Configurar o IAP para o Cloud Run

Nesta página, descrevemos como ativar o IAP no Cloud Run e proteger o tráfego destinado a um serviço do Cloud Run roteando para o IAP para autenticação. Ao ativar o IAP no Cloud Run, você pode rotear o tráfego com um único clique de todos os caminhos de entrada, incluindo URLs run.app padrão e balanceadores de carga.

Limitações conhecidas

  • O projeto precisa estar em uma organização.
  • As identidades precisam ser da mesma organização.
  • Não é possível configurar a IAP no balanceador de carga e no serviço do Cloud Run.
  • Algumas integrações, como o Pub/Sub, podem parar de funcionar se o IAP estiver ativado.

Antes de começar

Funções exigidas

Para receber as permissões necessárias para ativar a IAP, peça ao administrador para conceder a você os seguintes papéis do IAM:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Ativar o IAP no Cloud Run

É possível ativar o IAP no Cloud Run.

Se você usar o IAP e o Identity and Access Management (IAM) no mesmo serviço do Cloud Run, observe as seguintes condições:

  • As verificações do IAP e do IAM são realizadas.

  • A verificação da IAP acontece primeiro e aceita ou bloqueia solicitações com base na configuração da IAP.

  • Se a solicitação passar pela verificação do IAP, ele usará a própria conta de serviço para autenticar a verificação do IAM do Cloud Run.

  • Como a verificação do IAP acontece primeiro, alguns serviços, como o Pub/Sub, podem não se autenticar corretamente.

Ative a IAP no Cloud Run usando o console Google Cloud , a Google Cloud CLI ou o Terraform.

Console

Quando você ativa o IAP para o Cloud Run, ele requer permissões para invocar seu serviço do Cloud Run. Se você estiver ativando o IAP usando o console Google Cloud , essa permissão será concedida automaticamente ao atribuir o papel de invocador do Cloud Run (roles/run.invoker) ao agente de serviço do IAP.

Para ativar o IAP no Cloud Run:

  1. No console Google Cloud , acesse a página do Cloud Run:

    Acessar o Cloud Run

  2. Se você estiver configurando um novo serviço em que fará uma implantação, selecione Implantar contêiner > Serviço. Se você estiver configurando e implantando um serviço que já existe, clique nele e depois em Editar e implantar nova revisão.

  3. Se você estiver configurando um novo serviço, preencha a página inicial de configurações de serviço conforme necessário e selecione Autenticação avançada com o Identity-Aware Proxy (IAP).

  4. Se você estiver configurando e implantando um serviço atual, clique nele e selecione Autenticação avançada com o Identity-Aware Proxy (IAP).

  5. Clique em Editar política para criar uma política de acesso baseado no contexto:

    • Adicione um ou mais principais e, opcionalmente, o nível de acesso que cada principal precisa atender para acessar o aplicativo.

    • Clique em Salvar.

  6. Clique em Save.

gcloud

Para ativar o IAP diretamente do Cloud Run, adicione a flag --iap ao implantar o app e conceda permissão de invocador ao agente do serviço IAP:

  1. Implante o serviço do Cloud Run usando um dos seguintes comandos:

    Para um novo serviço:

    gcloud beta run deploy SERVICE_NAME \
    --region=REGION \
    --image=IMAGE_URL \
    --no-allow-unauthenticated \
    --iap

    Para um serviço atual:

    gcloud beta run services update SERVICE_NAME \
    --region=REGION \
    --iap

    Substitua:

    • SERVICE_NAME: o nome do seu serviço do Cloud Run;
    • REGION: o nome da sua região do Cloud Run. Por exemplo, europe-west1.
    • IMAGE_URL: uma referência à imagem de contêiner, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • PROJECT_NUMBER: o número do projeto do Google Cloud .
  2. Conceda permissão de invocador ao agente de serviço da IAP:

    gcloud run services add-iam-policy-binding SERVICE_NAME \
    --region=REGION \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-iap.iam.gserviceaccount.com \
    --role=roles/run.invoker

    Substitua:

    • SERVICE_NAME: o nome do seu serviço do Cloud Run;
    • REGION: o nome da sua região do Cloud Run. Por exemplo, europe-west1.
    • PROJECT_NUMBER: o número do projeto do Google Cloud .
  3. Para verificar se o serviço está configurado com a IAP ativada, execute o seguinte comando:

    gcloud beta run services describe SERVICE_NAME

    A saída precisa conter a seguinte string:

    Iap Enabled: true

Agora você está roteando todo o tráfego destinado ao serviço configurado do Cloud Run para o IAP para autenticação antes de passar para o contêiner.

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

Para ativar o IAP usando o Terraform, atualize a definição de serviço e adicione uma vinculação de política do IAM para conceder permissão de invocador ao IAP.

  1. Adicione iap_enabled = true a um recurso google_cloud_run_v2_service na configuração do Terraform para ativar o IAP no serviço:

    resource "google_cloud_run_v2_service" "default" {
      provider = google-beta
      name     = "cloudrun-iap-service"
      location = "europe-west1"
      ingress      = "INGRESS_TRAFFIC_ALL"
      launch_stage = "BETA"
      iap_enabled  = true
    
      template {
        containers {
          image = "us-docker.pkg.dev/cloudrun/container/hello"
        }
      }
    }
    
  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" {
      provider = google-beta
      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. Opcional. Para recuperar os dados da política do IAM atual, adicione o seguinte a um recurso google_cloud_run_v2_service_iam_policy na configuração do Terraform.

    data "google_cloud_run_v2_service_iam_policy" "policy" {
      project = google_cloud_run_v2_service.default.project
      location = google_cloud_run_v2_service.default.location
      name = google_cloud_run_v2_service.default.name
    }
    

Desativar o IAP no Cloud Run

É possível desativar a IAP usando o console Google Cloud ou a CLI gcloud.

Console

Para desativar o IAP no Cloud Run:

  1. No console Google Cloud , acesse a página do Cloud Run:

    Acessar o Cloud Run

  2. Clique no serviço que você quer modificar.

  3. Clique em Segurança e desmarque Autenticação avançada com o Identity-Aware Proxy (IAP).

  4. Clique em Salvar.

gcloud

Para desativar o IAP diretamente do Cloud Run, adicione a flag --no-iap ao implantar o app:

  1. Implante o serviço do Cloud Run usando um dos seguintes comandos:

    Para um novo serviço:

    gcloud beta run deploy SERVICE_NAME \
    --region=REGION \
    --image=IMAGE_URL \
    --no-iap

    Para um serviço atual:

    gcloud beta run services update SERVICE_NAME \
    --region=REGION \
    --no-iap

    Substitua:

    • SERVICE_NAME: o nome do seu serviço do Cloud Run;
    • REGION: o nome da sua região do Cloud Run.
    • IMAGE_URL: uma referência à imagem de contêiner, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  2. Para verificar se o serviço não está mais configurado com o IAP ativado, execute o seguinte comando:

    gcloud beta run services describe SERVICE_NAME

    A saída não deve mais conter a seguinte string:

    Iap Enabled: true

Você não está mais roteando todo o tráfego destinado ao serviço configurado do Cloud Run para o IAP para autenticação antes de passar para o contêiner.

Gerenciar o acesso de usuários ou grupos

Por padrão, o IAP para Cloud Run usa identidades na organização com Contas do Google. É possível adicionar ou remover o acesso a um serviço do Cloud Run usando o console Google Cloud ou a CLI gcloud.

Console

Para adicionar ou remover o acesso:

  1. No console Google Cloud , acesse a página do Cloud Run:

    Acessar o Cloud Run

  2. Clique no serviço que você quer modificar e em Segurança.

  3. Em IAP, clique em Editar política.

  4. Para adicionar acesso, insira o principal e, opcionalmente, o nível ou os níveis de acesso que você quer adicionar.

  5. Para remover o acesso de um principal, clique no ícone Excluir política ao lado de Níveis de acesso.

  6. Clique em Salvar.

gcloud

Para adicionar ou remover o acesso a um serviço do Cloud Run para usuários individuais ou grupos na sua organização, execute um dos seguintes comandos:

  • Para conceder o acesso:

    gcloud beta iap web add-iam-policy-binding \
    --member=user:USER_EMAIL \
    --role=roles/iap.httpsResourceAccessor \
    --region=REGION \
    --resource-type=cloud-run \
    --service=SERVICE_NAME
  • Para remover o acesso:

    gcloud beta iap web remove-iam-policy-binding \
    --member=user:USER_EMAIL \
    --role=roles/iap.httpsResourceAccessor \
    --region=REGION \
    --resource-type=cloud-run \
    --service=SERVICE_NAME
  • Para ver o acesso:

    gcloud beta iap web get-iam-policy \
    --region=REGION \
    --resource-type=cloud-run \
    --service=SERVICE_NAME

Substitua:

  • USER_EMAIL: o endereço de e-mail do usuário.
  • REGION: o nome da sua região do Cloud Run.
  • SERVICE_NAME: o nome do seu serviço do Cloud Run;

Solução de problemas

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.

A seguir