Como ativar o IAP para o Cloud Run

Nesta página, explicamos 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 com um balanceador de carga de aplicativo clássico protegidos com IAP encontram um loop de redirecionamento infinito mediante solicitação. O Google recomenda o uso de um balanceador de carga de aplicativo externo global ao usar um serviço ativado para HTTP/2 protegido com o 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 somente 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 de Invocador do Cloud Run. O IAP gera um token de ID e o usa para se autenticar no Cloud Run usando o cabeçalho X-Serverless-Authorization.

  • O IAP se autentica no Cloud Run usando o cabeçalho X-Serverless-Authorization. O Cloud Run transmite esse cabeçalho para seu serviço depois de remover a assinatura. Se o serviço tiver sido 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:

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 IAP. Se você quiser permitir o acesso a usuários de fora da 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, será solicitado que você o configure. Para configurá-la, consulte Como configurar a tela de permissão OAuth.

Como configurar o acesso do IAP

  1. Acesse a página Identity-Aware Proxy.
  2. Selecione o projeto que você quer proteger com o IAP.
  3. Em APLICATIVOS, marque a caixa de seleção ao lado do serviço de back-end do balanceador de carga ao qual você quer adicionar membros.
  4. No painel lateral à direita, clique em Adicionar membro.
  5. Na caixa de diálogo Adicionar membros, 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: usuario@gmail.com - também pode ser uma conta do Google Workspace, como usuario@google.com ou algum outro domínio do Workspace.
    • grupo do Google: admins@googlegroups.com
    • Conta de serviço: server@example.gserviceaccount.com
    • Domínio do Google Workspace: example.com
  6. Selecione Cloud IAP > Usuário do app da Web protegido pelo IAP na lista suspensa Papéis.

  7. Clique em Salvar.

Ativando o IAP

  1. Na página do IAP, em APLICATIVOS, encontre o serviço de back-end do balanceador de carga a que você quer restringir o acesso. Para ativar o IAP para um recurso, clique no botão IAP. Para ativar o IAP:
  2. Na janela Ativar IAP, clique em Ativar para confirmar que você quer proteger o recurso com o IAP. Depois que você ativar o IAP, ele exigirá credenciais de login para todas as conexões com o balanceador de carga. O acesso será concedido apenas as contas com o papel Usuário do app da Web protegido pelo IAP no projeto.
  3. 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: Invocador do Cloud Run

gcloud

  1. Se você 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 duplicadas.
    gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
  2. Execute o comando a seguir para conceder à conta de serviço criada na etapa anterior a permissão do invocador.
    gcloud run services add-iam-policy-binding [SERVICE-NAME] \
    --member='serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com'  \
    --role='roles/run.invoker'
    
  3. Para ativar o IAP, execute 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

    gcloud compute backend-services update BACKEND_SERVICE_NAME --region REGION_NAME --iap=enabled
    
    Substitua:

    • 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 o Google Cloud CLI para manipular uma política de acesso do IAP usando o papel roles/iap.httpsResourceAccessor do Identity and Access Management. Para saber mais, consulte Como gerenciar papéis e permissões.

Como configurar o Cloud Run para limitar o acesso

É possível configurar o serviço do Cloud Run para permitir acesso apenas a clientes internos e ao balanceador de carga externo, que bloqueia todas as solicitações diretas da Internet pública.

Siga as etapas em Como restringir a entrada do Cloud Run para definir a configuração de entrada do serviço do Cloud Run como Interno e Cloud Load Balancing.

Como solucionar erros

 The IAP service account is not provisioned 
Se esse erro aparecer, você está tentando ativar o IAP em um serviço do Cloud Run por meio da CLI gcloud. A configuração do IAP por meio da CLI gcloud inclui a etapa extra de provisionamento de uma conta de serviço do IAP no projeto usando o seguinte comando: 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 o serviço do Cloud Run. Verifique se você concedeu o papel Invocador do Cloud Run à seguinte conta de serviço: service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com .

  • Se você tiver concedido o papel Invocador do Cloud Run à conta de serviço anterior e ainda estiver enfrentando esse problema, reimplante o 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 Invocador do Cloud Run. Com a disponibilidade geral (GA, na sigla em inglês), o Cloud Run executa essa verificação de permissão.

Para evitar alterações interruptivas, alguns projetos de clientes que dependiam desse comportamento durante a visualização foram colocados em uma lista de permissões 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, confira um exemplo de código (link em inglês) do Terraform.