本页介绍了如何从 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,请执行以下操作:
在 Google Cloud 控制台中,前往 Cloud Run 页面:
如果您是要配置一个新服务来作为部署目标,请依次选择部署容器 > 服务。如果您要配置和部署现有服务,请点击该服务,然后点击修改和部署新的修订版本。
如果您要配置新服务,请根据需要填写初始服务设置页面,然后选择使用 Identity-Aware Proxy (IAP) 进行高级身份验证。
如果您要配置和部署现有服务,请点击该服务,然后选择使用 Identity-Aware Proxy (IAP) 进行高级身份验证。
点击修改政策以创建情境感知访问权限政策:
添加一个或多个正文,以及(可选)每个正文必须满足才能获得应用访问权限的访问权限级别。
点击保存。
点击保存。
gcloud
如需直接从 Cloud Run 启用 IAP,请在部署应用时添加 --iap
标志:
使用以下命令之一部署 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
如需验证您的服务是否已配置为启用 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,请执行以下操作:
在 Google Cloud 控制台中,前往 Cloud Run 页面:
点击要修改的现有服务。
点击安全,然后清除使用 Identity-Aware Proxy (IAP) 进行高级身份验证。
点击保存。
gcloud
如需直接从 Cloud Run 停用 IAP,请在部署应用时添加 --no-iap
标志:
使用以下任一命令部署 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
如需验证您的服务不再配置为启用 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 服务授予或撤消访问权限。
控制台
如需添加或移除访问权限,请执行以下操作:
在 Google Cloud 控制台中,前往 Cloud Run 页面:
点击要修改的现有服务,然后点击 安全性。
在 IAP 下,点击修改政策。
如需添加访问权限,请输入主账号,并可选择性输入要添加的访问权限级别。
如需移除现有主账号的访问权限,请点击访问权限级别旁边的删除政策图标。
点击保存。
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 政策。
后续步骤
- 如需了解如何通过后端服务或负载平衡器使用 IAP 启用 IAP,请参阅为 Cloud Run 启用 IAP。
- 如需了解为 Cloud Run 启用 IAP 时遇到的问题,请参阅错误问题排查。
- 启用外部身份。
- 启用 OAuth 配置。
- 管理对受 IAP 保护的资源的访问权限。
- 使用组织政策控制 IAP 启用。