Como ativar o IAP para o Cloud Run

Há duas maneiras de ativar a IAP para seus serviços do Cloud Run, diretamente em um serviço do Cloud Run ou no serviço de back-end que está na frente dos serviços do Cloud Run.

Recomendamos que você ative a IAP diretamente no Cloud Run. Isso protege o endpoint run.app e, se você configurar um balanceador de carga, o endpoint dele também.

Se você precisar de gerenciamento de acesso centralizado ou quiser rotear o tráfego para várias regiões, siga os procedimentos abaixo.

Nesta página, explicamos como proteger um serviço do Cloud Run com a 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 a IAP uma vez para o serviço de back-end.

Limitações conhecidas

  • Quando você ativa o IAP em um balanceador de carga, ele protege o tráfego apenas pelo balanceador de carga e não pelo tráfego que pode chegar ao serviço do Cloud Run pelo URL run.app. Para permitir apenas o tráfego autorizado pela IAP, consulte Configurar o Cloud Run para limitar o acesso.

  • O IAP se autentica no Cloud Run usando o cabeçalho X-Serverless-Authorization. O Cloud Run transmite esse cabeçalho ao 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 exige autenticação do IAM, atualize o serviço para remover esse cabeçalho primeiro.

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

  • A IAP aumenta a latência. Ative o 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, você precisa do seguinte:

O IAP usa um cliente OAuth gerenciado pelo Google para autenticar usuários. Somente usuários na organização podem acessar o aplicativo ativado para IAP. Se 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 por trás de um serviço de back-end ou balanceador de carga, siga estas instruções.

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 configurou 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

  1. Acesse a página Identity-Aware Proxy.
  2. Selecione o projeto que você quer proteger com o IAP.
  3. Em APLICAÇÕES, marque a caixa de seleção ao lado do serviço de back-end do balanceador de carga a que você quer adicionar membros.
  4. No painel lateral à direita, clique em Adicionar principal.
  5. 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 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
  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 APLICAÇÕES, 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 na opção IAP. Para ativar o IAP:
  2. Na janela Ativar IAP que é exibida, 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.
  3. Siga as instruções em Controle de acesso com o IAM para autorizar o IAP a enviar tráfego ao serviço de back-end do Cloud Run.

    • Principal: service-[PROJECT-NUMBER]@gcp-sa-iap.
    • Função: Chamador do Cloud Run

    A conta de serviço do IAP é criada quando o IAP é ativado. Se a conta de serviço da IAP não estiver na lista de principais, crie-a executando o seguinte comando gcloud:

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

gcloud

  1. Se você ainda não fez isso no projeto, crie o agente de serviço da IAP executando o seguinte comando. Se você já tiver criado o agente de serviço, a execução do comando não o duplicará.
    gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
  2. Execute o comando a seguir para conceder permissão à conta de serviço criada na etapa anterior.
    gcloud run services add-iam-policy-binding [SERVICE-NAME] \
    --member='serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.'  \
    --role='roles/run.invoker'
    
  3. Ative o IAP executando o comando com escopo global ou regional, dependendo de 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 a Google Cloud CLI para manipular uma política de acesso do IAP usando o papel do Identity and Access Management roles/iap.httpsResourceAccessor. Consulte Como gerenciar o acesso a recursos protegidos pelo IAP para mais informações.

Terraform

  1. Se você ainda não tiver feito isso, crie o agente de serviço da IAP em um projeto executando o seguinte comando. Se você já tiver criado o agente de serviço, a execução do comando não o duplicará.
    resource "google_project_service" "project" {
      project = "your-project-id"
      service = "iap.googleapis.com"
    }
    
  2. Conceda a permissão de invocador ao agente de serviço criado na etapa 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, 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 definições de entrada para restringir a entrada de rede para o Cloud Run.

Como solucionar erros

Permissão negada ao acessar o Cloud Run

 Your client does not have permission to get URL from this server 
  • A IAP usa as permissões da conta de serviço da 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..

  • Se você concedeu o papel de invocador do Cloud Run à conta de serviço anterior e ainda está enfrentando esse problema, reimplante seu serviço do Cloud Run.

A falha do agente de serviço causa um erro de definição do IAM

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 de novo ou defina a política do IAM manualmente.

Não é possível configurar a IAP pela CLI gcloud

 The IAP service account is not provisioned 

Se você estiver vendo 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 de invocador do Cloud Run. Com a disponibilidade geral (GA), o Cloud Run realiza essa verificação de permissão.

Para evitar mudanças incompatíveis, alguns projetos de clientes que dependiam desse comportamento durante a prévia 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 para prévia.

A seguir

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