Esta página explica como proteger um serviço do Cloud Run com o Identity-Aware Proxy (IAP).
Limitações conhecidas
Os serviços do Cloud Run com HTTP/2 ativado atrás de um balanceador de carga de aplicativo clássico protegidos com IAP encontram um loop de redirecionamento infinito ao fazer solicitações. O Google recomenda o uso de uma balanceador de carga de aplicativo externo global quando usando um serviço habilitado para HTTP/2 protegido com IAP. Consulte os modos do balanceador de carga para mais detalhes.
O IAP não protege o domínio fornecido pelo Cloud Run para um serviço implantado. Para garantir que apenas o IAP tenha permissão para acessar o serviço, use a autenticação do IAM no serviço do Cloud Run. Para permitir que o IAP acesse o serviço do Cloud Run, conceda o papel
service-[PROJECT_NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
da conta de serviço do IAP com o papel Invocador do Cloud Run. O IAP gera um token de ID e o usa para se autenticar no Cloud Run usando o CabeçalhoX-Serverless-Authorization
.O IAP se autentica no Cloud Run usando o Cabeçalho
X-Serverless-Authorization
. O Cloud Run transmite esse cabeçalho ao seu serviço depois de remover a assinatura. Se o serviço for projetado para encaminhar a solicitação a outro serviço do Cloud Run que exija autenticação do IAM, atualize o serviço para remover esse cabeçalho primeiro.O IAP é incompatível com o Cloud CDN.
Antes de começar
Para ativar o IAP para o Cloud Run, você precisa do seguinte:
- Um projeto do console do Google Cloud com o faturamento ativado.
- Um grupo de um ou mais serviços do Cloud Run, exibido por um balanceador de carga.
- Saiba mais sobre Como configurar um balanceador de carga HTTPS externo.
- Saiba mais sobre como configurar um balanceador de carga HTTPS interno.
- um nome de domínio registrado no endereço do balanceador de carga.
- o código do aplicativo para verificar se todas as solicitações têm uma identidade.
- Saiba mais sobre como conseguir a identidade do usuário.
O IAP usa um cliente OAuth gerenciado pelo Google para autenticar usuários. Somente os usuários da organização podem acessar o IAP ativado para o aplicativo. Para permitir o acesso a usuários fora da sua organização, consulte Ativar o IAP para aplicativos externos.
Como ativar o IAP
Console
O cliente OAuth gerenciado pelo Google não está disponível ao ativar o IAP usando o console do Google Cloud.
Se você não tiver configurado a tela de permissão OAuth do seu projeto, solicitado a fazer isso. Para configurar a tela de permissão OAuth, consulte o artigo Como configurar a tela de permissão OAuth.
Como configurar o acesso do IAP
- Acesse a página Identity-Aware Proxy.
- Selecione o projeto que você quer proteger com o IAP.
- Em APLICATIVOS, marque a caixa de seleção ao lado do serviço de back-end do balanceador de carga a que você quer adicionar membros.
- No painel lateral à direita, clique em Adicionar membro.
Na caixa de diálogo Adicionar participantes, insira as contas de grupos ou indivíduos que precisam ter o papel Usuário do app da Web protegido pelo IAP no projeto. Os seguintes tipos de contas podem ser membros:
- Conta do Google: user@gmail.com. Também pode ser uma conta do Google Workspace, como user@google.com ou algum outro domínio do Workspace.
- grupo do Google: admins@googlegroups.com
- Conta de serviço: server@example.iam.gserviceaccount.com
- Domínio do Google Workspace: example.com
Selecione Cloud IAP > Usuário do app da Web protegido pelo IAP na lista suspensa Papéis.
Clique em Salvar.
Ativando o IAP
- Na página do IAP, em APLICATIVOS, encontre o serviço de back-end do balanceador de carga em que você quer restringir o acesso. Para ativar o IAP para um recurso, clique na chave IAP.
Para ativar o IAP:
- Pelo menos um protocolo na configuração de front-end do balanceador de carga precisa ser HTTPS. Saiba mais sobre como configurar um balanceador de carga.
- Você precisa das permissões
compute.backendServices.update
,clientauthconfig.clients.create
eclientauthconfig.clients.getWithSecret
. Elas são concedidas por papéis como o de editor do projeto. Para saber mais, consulte Como gerenciar o acesso a recursos protegidos pelo IAP.
- Na janela Ativar IAP que é exibida, clique em Ativar para confirmar que você quer que o IAP proteja o recurso. Após a ativação, serão necessárias credenciais de login para todas as conexões com seu balanceador de carga. O acesso só será concedido às contas com o papel Usuário do app da Web protegido pelo IAP no projeto.
Siga as instruções em Controle de acesso com o IAM para autorizar o IAP a enviar tráfego para o serviço de back-end do Cloud Run.
- Principal:
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
- Papel: Chamador do Cloud Run
- Principal:
gcloud
- Se ainda não tiver feito isso, crie uma conta de serviço executando o comando a seguir. Se você já tiver criado uma conta de serviço, executar o comando não criará contas de serviço duplicadas.
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
- Conceda a permissão do invocador à conta de serviço, criada na etapa anterior, executando o comando a seguir.
gcloud run services add-iam-policy-binding [SERVICE-NAME] \ --member='serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com' \ --role='roles/run.invoker'
Ative o IAP executando o comando com escopo global ou regional, dependendo se o serviço de back-end do balanceador de carga é global ou regional. Use o ID e a chave secreta do cliente OAuth da etapa anterior.
Escopo global
gcloud compute backend-services update BACKEND_SERVICE_NAME --global --iap=enabled
Escopo regional
Substitua:gcloud compute backend-services update BACKEND_SERVICE_NAME --region REGION_NAME --iap=enabled
- BACKEND_SERVICE_NAME: o nome do serviço de back-end.
- REGION_NAME: a região em que você quer ativar o IAP.
Depois de ativar o IAP, use a Google Cloud CLI para manipular uma política de acesso do IAP usando o papel roles/iap.httpsResourceAccessor
do Identity and Access Management. Consulte Como gerenciar papéis e permissões para mais informações.
Como configurar o Cloud Run para limitar o acesso
É possível configurar o serviço do Cloud Run para permitir acesso apenas para clientes internos e o balanceador de carga externo, que bloqueia todos solicitações da Internet pública.
Siga as etapas em Como restringir a entrada no Cloud Run para definir a configuração de entrada do serviço do Cloud Run para Interno e Cloud Load Balancing.
Como solucionar erros
The IAP service account is not provisioned
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
Your client does not have permission to get URL from this server
O IAP usa as permissões da conta de serviço do IAP para invocar seu serviço do Cloud Run. Verifique se você concedeu o papel Execute o papel Invocador na seguinte conta de serviço:
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
.Se você tiver concedido o papel Chamador do Cloud Run ao conta de serviço e você ainda estiver enfrentando esse problema, reimplante seu serviço do Cloud Run.
A conta de serviço do IAP não precisa da permissão run.routes.invoke
Durante o IAP com a visualização do Cloud Run,
O Cloud Run não realizou a verificação de permissão run.routes.invoke
para chamadas do IAP que usam o papel Chamador do Cloud Run. Com a
disponibilidade geral (GA), o Cloud Run executa essa verificação de
permissão.
Para evitar mudanças importantes, alguns projetos de clientes que dependiam desse comportamento durante a visualização foram colocados em uma lista de permissões permitidas para que a permissão não fosse verificada. Entre em contato com o suporte do Cloud Run para remover esses projetos da lista de permissões somente visualização.
A seguir
Para ajudar a configurar o IAP para o Cloud Run com o Terraform, conferir um exemplo de código do Terraform.