Como proteger serviços de back-end

Além de autenticar solicitações de usuários finais no gateway implantado, é importante proteger o acesso entre o gateway de API e seus serviços de back-end. Para evitar o acesso público aos seus serviços gerenciados de back-end (Cloud Run, Cloud Functions, App Engine etc.):

  • Permitir somente o acesso autenticado ao seu serviço de back-end.
  • Conceda as permissões necessárias à conta de serviço associada à configuração da API do gateway para que ele seja autorizado a invocar o back-end.

Nesta página, descrevemos as etapas necessárias para proteger o serviço de back-end e os papéis e as permissões necessárias para que a conta de serviço do gateway acesse esses serviços.

Cloud Run

Todos os serviços do Cloud Run (totalmente gerenciado) são implantados de forma privada por padrão, o que significa que não podem ser acessados sem fornecer credenciais de autenticação na solicitação.

Os serviços do Cloud Run são protegidos pelo IAM. Por padrão, os serviços do Cloud Run podem ser chamados por qualquer papel que contenha a permissão run.routes.invoke.

É possível configurar o IAM nos serviços do Cloud Run (totalmente gerenciado) para conceder acesso a outros usuários.

Para o gateway de API, o acesso aos serviços do Cloud Run é ativado ao conceder à conta de serviço do gateway os papéis e permissões adequados: o roles/run.invoker ou o que contém a permissão run.routes.invoke.

É possível controlar o acesso de um gateway a um serviço individual com o IAM no nível de serviço ou para todos os serviços em um projeto com o IAM no nível do projeto.

Se a solicitação de um gateway para o serviço do Cloud Run for rejeitada, verifique se a conta de serviço do gateway é concedida ao roles/run.invoker e se a conta de serviço do gateway tem a permissão run.routes.invoke. Saiba mais sobre os papéis e permissões do invocador na referência do IAM do Cloud Run.

Cloud Functions

Nos serviços de back-end do Cloud Functions, o gerenciamento de identidade e acesso (IAM, na sigla em inglês) é usado para controlar a capacidade de visualizar, criar, atualizar e excluir funções. O IAM aplica a autenticação de autores de chamada aos serviços do Cloud Functions, como o gateway de API, concedendo papéis.

A concessão de papéis e permissões com o IAM permite o controle sobre dois conjuntos de ações:

  • Operações do desenvolvedor: criação, atualização e exclusão de funções, bem como gerenciamento de acesso a funções.
  • Invocação de função: faz com que uma função seja executada.

A concessão da capacidade de invocar funções é diferente para funções HTTP e funções em segundo plano.

Para permitir que o gateway de API chame o serviço de back-end do Cloud Functions, conceda à conta de serviço do gateway o papel roles/cloudfunctions.invoker ou qualquer papel que contenha a permissão cloudfunctions.functions.invoke.

É possível controlar o acesso de um gateway a uma função individual com o IAM no nível de serviço ou todas as funções em um projeto com o IAM no nível do projeto.

Se as solicitações de um gateway para o serviço do Cloud Functions forem rejeitadas, verifique se a conta de serviço do gateway é concedida ao papel roles/cloudfunctions.invoker e se a conta de serviço do gateway tem a permissão cloudfunctions.functions.invoke. Saiba mais sobre os papéis e permissões do invocador na referência do IAM do Cloud Functions.

App Engine

Para proteger seu aplicativo do App Engine, você precisa usar o Identity Aware Proxy (IAP) para garantir que as solicitações sejam autenticadas.

Siga as etapas para Ativar o IAP para o projeto em que o serviço de back-end do App Engine está implantado. Ativar o IAP garante que o acesso ao aplicativo de back-end do App Engine seja seguro.

Para ativar o gateway de API para chamar o serviço de back-end do App Engine, siga as etapas em Como configurar o acesso ao IAP para conceder à conta de serviço associada ao gateway o papel IAP-secured Web App User. Além disso, conceda à conta de serviço um papel que contenha as seguintes permissões:

  • appengine.applications.update
  • clientauthconfig.clients.create
  • clientauthconfig.clients.getWithSecret