Ativar o IAP para o Cloud Run

Existem duas formas de ativar o IAP para os seus serviços do Cloud Run: diretamente num serviço do Cloud Run ou no serviço de back-end que está à frente dos serviços do Cloud Run.

Recomendamos que ative o IAP diretamente no Cloud Run. Isto protege o ponto final run.app e, se configurar um equilibrador de carga, também protege o ponto final do equilibrador de carga.

Se precisar de gestão de acesso centralizada ou quiser encaminhar tráfego para várias regiões, continue com os procedimentos seguintes.

Esta página explica como proteger um serviço do Cloud Run com o IAP a partir de um serviço de back-end ou de um balanceador de carga. Se estiver a executar o Cloud Run em várias regiões associadas ao mesmo serviço de back-end global do balanceador de carga, siga as instruções nesta página para configurar o IAP uma vez para o serviço de back-end.

Limitações conhecidas

  • Quando ativa o IAP num equilibrador de carga, o IAP protege o tráfego apenas através do equilibrador de carga e não com o tráfego que possa alcançar o serviço do Cloud Run através do respetivo URL run.app. Para permitir apenas tráfego autorizado pelo IAP, consulte o artigo Configurar o Cloud Run para limitar o acesso.

  • O IAP faz a autenticação no Cloud Run através do cabeçalho X-Serverless-Authorization. O Cloud Run transmite este cabeçalho ao seu serviço depois de remover a respetiva assinatura. Se o seu serviço foi concebido para encaminhar o pedido para outro serviço do Cloud Run que requer autenticação do IAM, atualize o seu serviço para remover este cabeçalho primeiro.

  • O IAP é incompatível com o Cloud CDN.

  • As IAPs aumentam a latência. Ative a IAP apenas 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, precisa do seguinte:

O IAP usa um cliente OAuth gerido pela Google para autenticar os utilizadores. Apenas os utilizadores na organização podem aceder à aplicação com a funcionalidade de IAP. Se quiser permitir o acesso a utilizadores externos à sua organização, consulte o artigo Ative o IAP para aplicações externas.

Ativar o IAP a partir de um serviço de back-end ou de um balanceador de carga

Para ativar o IAP a partir do IAP atrás de um serviço de back-end ou de um balanceador de carga, use as seguintes instruções.

Consola

O cliente OAuth gerido pela Google não está disponível quando ativa as CAs através da Google Cloud consola.

Se não tiver configurado o ecrã de consentimento OAuth do seu projeto, é-lhe pedido que o faça. Para configurar o ecrã de consentimento OAuth, consulte o artigo Configurar o ecrã de consentimento OAuth.

Configurar o acesso à IAP

  1. Aceda à página Identity-Aware Proxy.
  2. Selecione o projeto que quer proteger com o IAP.
  3. Em APLICAÇÕES, selecione a caixa de verificação junto ao serviço de back-end do equilibrador de carga ao qual quer adicionar membros.
  4. No painel do lado direito, clique em Adicionar diretor.
  5. Na caixa de diálogo Adicionar principal, introduza as contas de grupos ou indivíduos que devem ter a função Utilizador da app Web protegida por IAP para o projeto. Os seguintes tipos de contas podem ser membros:

    • Conta 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 Google: admins@googlegroups.com
    • Conta de serviço: server@example.iam.gserviceaccount.com
    • Domínio do Google Workspace: example.com
  6. Selecione Cloud IAP > Utilizador da app Web protegida pelo IAP na lista pendente Funções.

  7. Clique em Guardar.

Ativar o IAP

  1. Na página de IAP, em APLICAÇÕES, encontre o serviço de back-end do balanceador de carga ao qual quer restringir o acesso. Para ativar as CAs para um recurso, clique no botão CA. Para ativar as CNA:
    • Pelo menos um protocolo na configuração de front-end do balanceador de carga tem de ser HTTPS. Saiba como configurar um equilibrador de carga.
    • Precisa das autorizações compute.backendServices.update, clientauthconfig.clients.create e clientauthconfig.clients.getWithSecret. Estas autorizações são concedidas por funções, como a função de editor do projeto. Para saber mais, consulte o artigo Gerir o acesso a recursos protegidos pelo IAP.
  2. Na janela Ativar IAP apresentada, clique em Ativar para confirmar que quer que o IAP proteja o seu recurso. Depois de ativar o IAP, este requer credenciais de início de sessão para todas as ligações ao seu equilibrador de carga. Apenas as contas com a função utilizador da app Web protegida pelo IAP no projeto recebem acesso.
  3. Siga as instruções em Controlo de acesso com a 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: Cloud Run Invoker

    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, pode criá-la executando o seguinte comando gcloud:

    gcloud beta services identity create
        --service=iap.googleapis.com
        --project=PROJECT_ID
    

gcloud

  1. Se ainda não o fez no projeto, crie o agente do serviço IAP executando o seguinte comando. Se tiver criado anteriormente 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]
  2. Execute o seguinte comando para conceder autorização ao invocador na conta de serviço criada no passo anterior.
    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. Ative o IAP executando o comando com âmbito global ou regional, consoante o serviço de back-end do balanceador de carga seja global ou regional. Use o ID de cliente OAuth e o segredo do passo anterior.

    Âmbito global

    gcloud compute backend-services update BACKEND_SERVICE_NAME --global --iap=enabled
    

    Âmbito regional

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

    • BACKEND_SERVICE_NAME: o nome do serviço de back-end.
    • REGION_NAME: a região na qual quer ativar as CNAs.

Depois de ativar o IAP, pode usar a CLI do Google Cloud para manipular uma política de acesso do IAP através da função de gestão de identidade e de acesso roles/iap.httpsResourceAccessor. Consulte o artigo Faça a gestão do acesso a recursos protegidos pelo IAP para mais informações.

Terraform

  1. Se ainda não o fez, num projeto, crie o agente de serviço do IAP executando o seguinte comando. Se tiver criado anteriormente 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"
    }
    
  2. Conceda autorização ao invocador para o agente de serviço criado no passo anterior executando o seguinte comando.
    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/run.invoker"
      members = [
        "serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com",
      ]
    }
    
  3. Ative o IAP executando o comando global ou regional, consoante o seu equilibrador de carga. Use o ID de cliente OAuth e o segredo do passo anterior.

    • Âmbito 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"
        }
      }
      

    • Âmbito 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"
        }
      }
      

Configurar o Cloud Run para limitar o acesso

Para impedir o encaminhamento do tráfego através do run.appURL predefinido de um serviço do Cloud Run, desative o URL predefinido. Caso contrário, configure as definições de entrada para restringir a entrada de rede para o Cloud Run.

Resolução de problemas de erros

Acesso ao Cloud Run negado

 Your client does not have permission to get URL from this server 
  • O IAP usa as autorizações da conta de serviço do IAP para invocar o seu serviço do Cloud Run. Certifique-se de que concedeu a função de invocador do Cloud Run à seguinte conta de serviço: service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com.

  • Se concedeu a função Cloud Run Invoker à conta de serviço anterior e continua a ter este problema, volte a implementar o serviço do Cloud Run.

A falha do agente de serviço provoca um erro de IAM definido

A ativação das CAs num novo projeto pela primeira vez pode causar o seguinte erro:

Setting IAM permissions failed

Isto deve-se ao facto de o agente do serviço do Cloud Run ter falhado. Para resolver o problema, ative novamente o IAP ou defina a política de IAM manualmente.

Não é possível configurar o IAP através da CLI gcloud

 The IAP service account is not provisioned 

Se estiver a ver este 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 autorização run.routes.invoke

Durante a pré-visualização do IAP com o Cloud Run, o Cloud Run não realizou a verificação de autorização run.routes.invoke para chamadas do IAP que usam a função Cloud Run Invoker. Com a disponibilidade geral (DG), o Cloud Run realiza esta verificação de autorização.

Para evitar alterações significativas, alguns projetos de clientes que dependiam deste comportamento durante a pré-visualização foram colocados numa lista de autorizações para que a autorização não fosse verificada. Contacte o apoio técnico do Cloud Run para remover esses projetos da lista de autorizações apenas de pré-visualização.

O que se segue?

Para ajudar a configurar o IAP para o Cloud Run com o Terraform, explore um exemplo de código do Terraform.