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 a CAsI, peça ao seu administrador para lhe conceder 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 de IAP ocorre primeiro e aceita ou bloqueia pedidos com base na configuração de 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 Serviços do Cloud Run:

    Aceda ao Cloud Run

  2. Se estiver a configurar e implementar um novo serviço, clique em Implementar contentor. 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 número do seu Google Cloud 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 número do seu Google Cloud 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 CAs 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 quando implementar a sua app:

  1. Implemente o seu serviço do Cloud Run através de 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 um endereço de email associado a um utilizador. 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 o IAP novamente ou defina a política IAM manualmente.

O que se segue?