为 Cloud Run 配置 Identity-Aware Proxy

本页介绍如何从 Cloud Run 启用 Identity-Aware Proxy,以及如何通过将流量路由到 IAP 进行身份验证来保护发往 Cloud Run 服务的流量。通过从 Cloud Run 启用 IAP,您可以一键从所有入站流量路径(包括默认 run.app 网址和负载平衡器)路由流量。

已知限制

  • 项目必须位于组织内。
  • 身份必须来自同一组织。
  • 您无法同时在负载均衡器和 Cloud Run 服务上配置 IAP。
  • 如果启用了 IAP,某些集成(例如 Pub/Sub)可能会停止运行。

准备工作

从 Cloud Run 启用 IAP

您可以从 Cloud Run 启用 IAP。

如果您在同一 Cloud Run 服务上同时使用 IAP 和 IAM,请注意以下条件:

  • 同时执行 IAP 和 IAM 检查。

  • 系统会先进行 IAP 检查,然后根据 IAP 配置接受或阻止请求。

  • 如果请求通过了 IAP 检查,IAP 会使用自己的服务账号向 Cloud Run 的 IAM 检查进行身份验证。

  • 由于 IAP 检查会先进行,因此 Pub/Sub 等某些服务可能无法正确向其进行身份验证。

使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 从 Cloud Run 启用 IAP。

控制台

如需从 Cloud Run 启用 IAP,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Cloud Run 页面:

    转到 Cloud Run

  2. 如果您要配置一个新服务来作为部署目标,请选择部署容器 > 服务。如果您要配置和部署现有服务,请点击该服务,然后点击修改和部署新的修订版本

  3. 如果您要配置新服务,请根据需要填写初始服务设置页面,然后选择使用 Identity-Aware Proxy (IAP) 进行高级身份验证

  4. 如果您要配置和部署现有服务,请点击该服务,然后选择使用 Identity-Aware Proxy (IAP) 进行高级身份验证

  5. 点击修改政策以创建情境感知访问权限政策:

    • 添加一个或多个主账号,并(可选)添加每个主账号必须满足的访问权限级别才能访问应用。

    • 点击保存

  6. 点击保存

gcloud

如需直接从 Cloud Run 启用 IAP,请在部署应用时添加 --iap 标志:

  1. 使用以下命令之一部署 Cloud Run 服务:

    对于新服务

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

    对于现有服务

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

    您需要进行如下替换:

    • SERVICE_NAME 替换为您的 Cloud Run 服务的名称。
    • REGION 替换为您的 Cloud Run 区域的名称。 例如 europe-west1
    • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。 如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  2. 如需验证您的服务是否已配置并启用 IAP,请运行以下命令:

    gcloud beta run services describe SERVICE_NAME

    输出应包含以下字符串:

    Iap Enabled: true

您现在将所有发往已配置的 Cloud Run 服务的流量路由到 IAP 进行身份验证,然后再传递到容器。

Terraform

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

添加 IAM 政策,以向 IAP 服务代理授予 Cloud Run Invoker (roles/run.invoker)。如需了解详情,请参阅管理对受 IAP 保护的资源的访问权限

  1. 将以下内容添加到 Terraform 配置中的 google_cloud_run_v2_service_iam_policy 资源。

    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
    }
    
  2. 将以下内容添加到 Terraform 配置中的 google_cloud_run_v2_service 资源。

    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"
        }
      }
    }
    

从 Cloud Run 停用 IAP

您可以使用 Google Cloud 控制台或 Google Cloud CLI 停用 IAP。

控制台

如需从 Cloud Run 停用 IAP,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Cloud Run 页面:

    转到 Cloud Run

  2. 点击要修改的现有服务。

  3. 点击安全,然后清除使用 Identity-Aware Proxy (IAP) 进行高级身份验证

  4. 点击保存

gcloud

如需直接从 Cloud Run 停用 IAP,请在部署应用时添加 --no-iap 标志:

  1. 使用以下任一命令部署 Cloud Run 服务:

    对于新服务

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

    对于现有服务

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

    您需要进行如下替换:

    • SERVICE_NAME 替换为您的 Cloud Run 服务的名称。
    • REGION 替换为您的 Cloud Run 区域的名称。
    • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。 如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  2. 如需验证您的服务是否已不再配置为启用 IAP,请运行以下命令:

    gcloud beta run services describe SERVICE_NAME

    输出中不应再包含以下字符串:

    Iap Enabled: true

您不再将所有发往配置的 Cloud Run 服务的流量路由到 IAP 进行身份验证,然后再传递到容器。

管理用户或群组访问权限

默认情况下,Cloud Run 的 IAP 使用组织内的 Google 账号身份。您可以使用 Google Cloud 控制台或 Google Cloud CLI 添加或移除对 Cloud Run 服务的访问权限。

控制台

如需添加或移除访问权限,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Cloud Run 页面:

    转到 Cloud Run

  2. 点击要修改的现有服务,然后点击 安全性

  3. IAP 下,点击修改政策

  4. 如需添加访问权限,请输入主账号,并可选择输入要添加的访问权限级别。

  5. 如需移除现有主账号的访问权限,请点击访问权限级别旁边的删除政策图标。

  6. 点击保存

gcloud

如需为组织内的个别用户或群组添加或移除对 Cloud Run 服务的访问权限,请运行以下命令之一:

  • 如需添加访问权限,请执行以下操作

    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
  • 如需移除访问权限,请执行以下操作

    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
  • 如需查看访问权限,请执行以下操作

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

您需要进行如下替换:

  • USER_EMAIL 替换为用户的电子邮件地址。
  • REGION 替换为您的 Cloud Run 区域的名称。
  • SERVICE_NAME 替换为您的 Cloud Run 服务的名称。

问题排查

服务代理故障导致设置 IAM 错误

首次在新项目中启用 IAP 时,可能会导致以下错误:

Setting IAM permissions failed

这是因为 Cloud Run 服务代理失败。如需解决此问题,请重新启用 IAP手动设置 IAM 政策

后续步骤