为 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 从 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 区域的名称。
    • 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 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

您不再将所有流量转送到 IAP 进行身份验证,然后再传递给容器,而是将流量直接转送到配置的 Cloud Run 服务。

管理用户或群组访问权限

默认情况下,适用于 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

    您需要进行如下替换:

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

问题排查

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

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

Setting IAM permissions failed

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

后续步骤