Ativar o IAP para o Cloud Run

É possível ativar o Identity-Aware Proxy para os serviços do Cloud Run usando um dos seguintes métodos:

  1. Recomendado: ative o IAP diretamente em um serviço do Cloud Run, que tem os seguintes benefícios:

    • Protege o endpoint run.app diretamente para que você não precise provisionar recursos do balanceador de carga.

    • Oferece uma configuração mais simples e evita custos adicionais com balanceadores de carga.

    • Se você optar por colocar um balanceador de carga na frente do Cloud Run, o endpoint do balanceador de carga também será protegido.

  2. Ative o IAP no serviço de back-end que está na frente dos serviços do Cloud Run: 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 e precisar de gerenciamento de acesso central, siga as instruções nesta página. Caso contrário, recomendamos que você ative o IAP diretamente no serviço do Cloud Run.

Limitações conhecidas

  • O IAP não pode ser usado nos serviços do Cloud Run e no balanceador de carga. Se você ativar o IAP em um balanceador de carga, ele vai proteger o tráfego apenas por meio do balanceador de carga, e não com o tráfego que pode chegar ao 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 se autentica no Cloud Run usando o cabeçalho X-Serverless-Authorization. O Cloud Run transmite esse cabeçalho para o serviço depois de remover a assinatura. Se o serviço foi projetado para encaminhar a solicitação para 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.

  • O IAP aumenta a latência. Ative o IAP apenas para serviços que não são sensíveis à latência.

Antes de começar

Recomendamos que você ative o IAP diretamente no Cloud Run.

Se você optar por ativar o IAP para recursos do Cloud Run no balanceador de carga em vez de diretamente no Cloud Run, será necessário ter o seguinte:

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

Para ativar o IAP em um serviço de back-end de um balanceador de carga, use as instruções a seguir.

Console

Se você não configurou a tela de permissão OAuth do projeto, será solicitado que você faça isso. Para configurar a tela de permissão OAuth, 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 em 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.

    • 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.

Ativar o acesso para usuários de fora da sua organização

Por padrão, quando você ativa o IAP, ele usa um cliente OAuth gerenciado pelo Google para autenticar os usuários. Como resultado, apenas os usuários da organização podem acessar o aplicativo com o IAP ativado.

Para permitir o acesso a usuários de fora da sua organização ou sem uma organização, atualize a configuração do cliente OAuth para usar um cliente OAuth personalizado, conforme descrito em Ativar o IAP para aplicativos externos.

Ativando o IAP

  1. Na página do IAP, em APLICATIVOS, encontre o serviço de back-end do balanceador de carga ao qual você quer restringir o acesso. Para ativar o IAP em um recurso, clique no botão IAP. Para ativar o IAP:

  2. Na janela Ativar o IAP que aparece, clique em Ativar para confirmar que você quer que o IAP proteja seu recurso. Depois de ativar o IAP, será necessário usar credenciais de login para todas as conexões com o balanceador de carga. Somente contas com o papel Usuário do app da Web protegido pelo IAP no projeto recebem o acesso.

  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.

    • Papel: Invocador 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, crie-a executando o seguinte comando gcloud:

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

gcloud

  1. Se você ainda não tiver feito isso no projeto, crie o agente de serviço do IAP executando o comando a seguir. Se você já tiver criado o agente de serviço, a execução do comando não o duplicará.

    gcloud services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
  2. Conceda a permissão de 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.' \
       --role='roles/run.invoker'
    
  3. 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 do cliente OAuth e a chave secreta 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 roles/iap.httpsResourceAccessor do Identity and Access Management. 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 do IAP em um projeto executando o comando a seguir. 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. Adicione o seguinte para conceder o papel roles/run.invoker ao agente de serviço do IAP.

    resource "google_cloud_run_v2_service_iam_member" "iap_invoker" {
      project = google_cloud_run_v2_service.default.project
      location = google_cloud_run_v2_service.default.location
      name = google_cloud_run_v2_service.default.name
      role   = "roles/run.invoker"
      member = "serviceAccount:service-"PROJECT_NUMBER@gcp-sa-iap."
    }
    

    Substitua PROJECT_NUMBER pelo número do projeto.

  3. Ative o IAP executando o comando global ou regional, dependendo do balanceador de carga. Use o ID do cliente OAuth e a chave secreta 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, defina as configuraçõ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 
  • 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 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 o serviço do Cloud Run.

Falha do agente de serviço causa 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 novamente ou defina a política do IAM manualmente.

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

 The IAP service account is not provisioned 

Se esse erro aparecer, execute o seguinte comando:

gcloud 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 o pré-lançamento 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 usavam o papel de invocador do Cloud Run. Com a disponibilidade geral (GA), o Cloud Run realiza essa verificação de permissão.

Para evitar alterações interruptivas, alguns projetos de clientes que dependiam desse comportamento durante o pré-lançamento 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 de pré-lançamento.

A seguir

Configurar o IAP para o Cloud Run