Configure o IAP para o Cloud Run

Esta página descreve como ativar o IAP a partir do Cloud Run e proteger o tráfego destinado a um serviço do Cloud Run através do encaminhamento para o IAP para autenticação. Ao ativar a IAP a partir do Cloud Run, pode encaminhar o tráfego com um único clique a partir de todos os caminhos de entrada, incluindo os URLs run.app predefinidos e os equilibradores de carga.

Limitações conhecidas

  • O projeto tem de estar numa organização.
  • As identidades têm de pertencer à mesma organização.
  • Não pode configurar o IAP no balanceador de carga e no serviço do Cloud Run.
  • Algumas integrações, como o Pub/Sub, podem deixar de funcionar se a IAP estiver ativada.

Antes de começar

Funções necessárias

Para receber as autorizações de que precisa para ativar as CAsI, peça ao seu administrador que lhe conceda as seguintes funções de IAM:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Ative o IAP a partir do Cloud Run

Recomendamos que ative a IAP diretamente a partir do Cloud Run.

Se usar o IAP e a gestão de identidade e de acesso (IAM) no mesmo serviço do Cloud Run, tenha em atenção as seguintes condições:

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

  • A verificação da IAP ocorre primeiro e aceita ou bloqueia pedidos com base na configuração da IAP.

  • Se o pedido passar na verificação de IAP, o IAP usa a sua própria conta de serviço para fazer a autenticação na verificação de IAM do Cloud Run.

  • Uma vez que a verificação de IAP ocorre primeiro, alguns serviços, como o Pub/Sub, podem não ser autenticados corretamente.

Ative o IAP a partir do Cloud Run através da Google Cloud consola, da Google Cloud CLI ou do Terraform.

Consola

Quando ativa o IAP para o Cloud Run, o IAP requer autorizações para invocar o seu serviço do Cloud Run. Se estiver a ativar os PNA através da Google Cloud consola, esta autorização é concedida automaticamente ao atribuir a função de invocador do Cloud Run (roles/run.invoker) ao agente do serviço de PNA.

Para ativar o IAP a partir do Cloud Run:

  1. Na Google Cloud consola, aceda à página do Cloud Run:

    Aceda ao Cloud Run

  2. Se estiver a configurar e implementar um novo serviço, selecione Implementar contentor e, de seguida, Serviço. Se estiver a configurar e implementar um serviço existente, clique no serviço e, de seguida, em Editar e implementar nova revisão.

  3. Se estiver a configurar um novo serviço, preencha a página de definições iniciais do serviço conforme necessário e, de seguida, selecione Exigir autenticação. Selecione Identity-Aware Proxy (IAP).

  4. Se estiver a configurar e implementar um serviço existente, clique no serviço e, de seguida, selecione Exigir autenticação. Selecione Identity-Aware Proxy (IAP).

  5. Clique em Editar política para criar uma política de acesso sensível ao contexto:

    • Adicione um ou mais responsáveis e, opcionalmente, o nível de acesso que cada responsável tem de cumprir para aceder à aplicação.

    • Clique em Guardar.

  6. Clique em Guardar.

gcloud

Para ativar o IAP diretamente a partir do Cloud Run, adicione a flag --iap quando implementar a sua app e conceda autorização de invocador ao agente do serviço IAP:

  1. Implemente o seu serviço do Cloud Run com 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 existente:

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

    Substitua o seguinte:

    • 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 do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAME tem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
    • PROJECT_NUMBER: o seu Google Cloud número do projeto.
  2. Conceda autorização de invocador ao agente do serviço 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 o seguinte:

    • 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 seu Google Cloud número do projeto.
  3. Para verificar se o seu serviço está configurado com a IAP ativada, execute o seguinte comando:

    gcloud beta run services describe SERVICE_NAME

    O resultado deve conter a seguinte string:

    Iap Enabled: true

Agora, está a encaminhar todo o tráfego destinado ao serviço do Cloud Run configurado para o IAP para autenticação antes de o passar para o contentor.

Terraform

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

Para ativar o IAP através do Terraform, tem de atualizar a definição do serviço e adicionar uma vinculação da política de IAM para conceder autorização de invocador ao IAP.

  1. Adicione iap_enabled = true a um recurso google_cloud_run_v2_service na sua 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 a função roles/run.invoker ao agente do serviço 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 seu projeto.

  3. Opcional. Para obter os dados da política de IAM atual, adicione o seguinte a um recurso google_cloud_run_v2_service_iam_policy na sua 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
    }
    

Desative o IAP a partir do Cloud Run

Pode desativar as CNA através da Google Cloud consola ou da CLI gcloud.

Consola

Para desativar o IAP a partir do Cloud Run:

  1. Na Google Cloud consola, aceda à página do Cloud Run:

    Aceda ao Cloud Run

  2. Clique no serviço existente que quer modificar.

  3. Clique em Segurança e selecione Permitir acesso público.

  4. Clique em Guardar.

gcloud

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

  1. Implemente o seu serviço do Cloud Run com 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 existente:

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

    Substitua o seguinte:

    • 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 do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAME tem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  2. Para verificar se o seu serviço já não está configurado com o IAP ativado, execute o seguinte comando:

    gcloud beta run services describe SERVICE_NAME

    O resultado já não deve conter a seguinte string:

    Iap Enabled: true

Já não está a encaminhar todo o tráfego destinado ao serviço do Cloud Run configurado para o IAP para autenticação antes de o passar para o contentor.

Faça a gestão do acesso de utilizadores ou grupos

Por predefinição, o IAP para o Cloud Run usa identidades na organização com Contas Google. Pode adicionar ou remover o acesso a um serviço do Cloud Run através da Google Cloud consola ou da CLI gcloud.

Consola

Para adicionar ou remover o acesso:

  1. Na Google Cloud consola, aceda à página do Cloud Run:

    Aceda ao Cloud Run

  2. Clique no serviço existente que quer modificar e, de seguida, clique em Segurança.

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

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

  5. Para remover o acesso de um principal existente, clique no ícone Eliminar política junto a Níveis de acesso.

  6. Clique em Guardar.

gcloud

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

  • Para adicionar 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 o seguinte:

  • USER_EMAIL: o endereço de email do utilizador.
  • REGION: o nome da sua região do Cloud Run.
  • SERVICE_NAME: o nome do seu serviço do Cloud Run.

Resolução de problemas

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

O que se segue?