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 faz a autenticação 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 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

    Observação: recomendamos ativar o IAP diretamente no Cloud Run, conforme descrito na documentação do Cloud Run.

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

    Permitir o acesso de 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 protegido pelo IAP.

    Para permitir o acesso de 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 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.iam.gserviceaccount.com
      • 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, executar o comando não vai duplicá-lo.
      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 seguinte comando.
      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 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, executar o comando não vai duplicá-lo.
      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.iam.gserviceaccount.com"
      }
      

      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.iam.gserviceaccount.com.

    • 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 para pré-lançamento.

    A seguir

    Configurar o IAP para o Cloud Run