Esta página explica como proteger um serviço do Cloud Run com o IAP de um serviço de back-end ou balanceador de carga. Se você estiver executando o Cloud Run em várias regiões anexadas ao mesmo serviço de back-end global do balanceador de carga, siga as instruções desta página para configurar o IAP uma vez para o serviço de back-end.
Se você estiver executando o Cloud Run em uma única região, recomendamos
que você Configure o IAP para o Cloud Run
para ativar o IAP no Cloud Run. Assim, você pode
proteger o tráfego com um único clique em todos os caminhos de entrada, incluindo URLs
run.app
padrão e balanceadores de carga.
Limitações conhecidas
Quando você ativa o IAP em um balanceador de carga, o IAP protege o tráfego apenas pelo balanceador de carga, e não pelo tráfego que pode acessar o serviço do Cloud Run pelo URL
run.app
. Para permitir apenas o tráfego autorizado pelo IAP, consulte Como configurar o Cloud Run para limitar o acesso.O IAP 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.
O IAP aumenta a latência. Ative o IAP somente para instâncias que não sejam sensíveis à latência.
Antes de começar
Para ativar o IAP para recursos do Cloud Run no IAP, você precisa:
- Um Google Cloud projeto do console com 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 aplicativo ativado para IAPs. Se você quiser permitir o acesso a usuários de fora da sua organização, consulte Ativar o IAP para aplicativos externos.
Ativar o IAP em um serviço de back-end ou balanceador de carga
Para ativar o IAP do IAP por trás de um serviço de back-end ou balanceador de carga, siga as instruções abaixo.
Console
O cliente OAuth gerenciado pelo Google não está disponível ao ativar o IAP usando o console Google Cloud .
Se você ainda não tiver configurado a tela de consentimento do OAuth do seu projeto, precisará fazer isso. Para configurar a tela de consentimento do OAuth, consulte Como configurar a tela de consentimento do 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 APLICAÇÕES, marque a caixa de seleção ao lado do serviço de back-end do balanceador de carga em que você quer adicionar membros.
- No painel à direita, clique em Adicionar principal.
Na caixa de diálogo Adicionar principal, insira as contas de grupos ou indivíduos que terão 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 APLICAÇÕES, encontre o serviço de back-end do balanceador de carga que você quer restringir. 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 ter as 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 aparece, clique em Ativar para confirmar que você quer proteger seu recurso com o IAP. Depois disso, será necessário usar credenciais de login para todas as conexões com o balanceador de carga. O acesso será concedido apenas à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
- Função: Chamador do Cloud Run
A conta de serviço do IAP é criada quando o IAP é ativado. Se a conta de serviço do IAP não estiver na lista de principais, você poderá criar uma executando o seguinte comando gcloud:
gcloud beta services identity create --service=iap.googleapis.com --project=PROJECT_ID
- Principal:
gcloud
- Se você ainda não fez isso no projeto, crie o agente de serviço do IAP executando o comando a seguir. Se você já criou o agente de serviço, a execução do comando não o duplica.
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
- Conceda a permissão de invocação à 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 de 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, será possível usar a CLI do Google Cloud para manipular uma política de acesso do IAP usando a função roles/iap.httpsResourceAccessor
do Identity and Access Management. Consulte Como gerenciar o acesso a recursos protegidos pelo IAP para mais informações.
terraform
- Se você ainda não fez isso, crie o agente de serviço do IAP em um projeto executando o comando a seguir. Se você já criou o agente de serviço, a execução do comando não o duplica.
resource "google_project_service" "project" { project = "your-project-id" service = "iap.googleapis.com" }
- Para conceder a permissão de invocação ao agente de serviço criado na etapa anterior, execute o comando a seguir.
resource "google_cloud_run_service_iam_binding" "binding" { location = google_cloud_run_v2_service.default.location service = google_cloud_run_v2_service.default.name role = "roles/invoker" members = [ "serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.gserviceaccount.com", ] }
Ative o IAP executando o comando global ou regional, dependendo do balanceador de carga. Use o ID e a chave secreta do cliente OAuth da etapa anterior.
Escopo global
resource "google_compute_backend_service" "default" { name = "tf-test-backend-service-external" protocol = "HTTPS" load_balancing_scheme = "EXTERNAL_MANAGED" iap { enabled = true oauth2_client_id = "abc" oauth2_client_secret = "xyz" } }
Escopo regional
resource "google_compute_region_backend_service" "default" { name = "tf-test-backend-service-external" protocol = "HTTPS" load_balancing_scheme = "EXTERNAL_MANAGED" iap { enabled = true oauth2_client_id = "abc" oauth2_client_secret = "xyz" } }
Como configurar o Cloud Run para limitar o acesso
Para impedir que o tráfego seja roteado pelo URL run.app
padrão de um serviço do Cloud Run, desative o URL padrão.
Caso contrário, configure as configurações de entrada para Restringir a entrada de rede para o Cloud Run.
Como solucionar erros
Permissão negada para acessar o Cloud Run
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. Confira se você concedeu o papel de invocador do Cloud Run à seguinte conta de serviço:
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
.Se você tiver concedido o papel de invocador do Cloud Run à conta de serviço anterior e ainda estiver enfrentando esse problema, implante novamente o serviço do Cloud Run.
A falha do agente de serviço causa um erro de IAM definido
Ativar o IAP em um novo projeto pela primeira vez pode causar o seguinte erro:
Setting IAM permissions failed
Isso ocorre porque o agente de serviço do Cloud Run falhou. Para resolver o problema, ative o IAP novamente ou defina a política do IAM manualmente.
Não é possível configurar o IAP pela CLI gcloud
The IAP service account is not provisioned
Se você receber esse erro, execute o seguinte comando:
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
A conta de serviço do IAP não precisa da permissão run.routes.invoke
Durante a prévia do IAP com o Cloud Run,
o Cloud Run não realizava a verificação de permissão run.routes.invoke
para chamadas do IAP que usam o papel do invocador 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 de visualização.
A seguir
Para ajudar a configurar o IAP para o Cloud Run com o Terraform, confira um exemplo de código do Terraform.