1. 简介
概览
此 Codelab 将向您详细介绍如何从 Cloud Run 启用 Identity-Aware Proxy,以及如何通过路由到 IAP 进行身份验证来保护要连接到 Cloud Run 服务的流量。通过在 Cloud Run 中启用 IAP,您可以一键路由来自所有入站流量路径(包括默认 run.app 网址和负载平衡器)的流量。
在此 Codelab 中,您将部署 hello 容器服务。只有已使用 IAP 列入许可名单的用户才能使用该服务。
如需了解其他已知限制,请参阅 Cloud Run 上的 IAP 文档。
学习内容
- 如何为 Cloud Run 启用一键式 IAP
- 如何通过 IAP 向用户身份授予对 Cloud Run 服务的访问权限
2. 准备工作
启用 API
在开始使用此 Codelab 之前,请通过运行以下命令启用以下 API:
gcloud services enable \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
iap.googleapis.com \
run.googleapis.com \
cloudresourcemanager.googleapis.com
3. 创建环境变量
设置将在此 Codelab 中全程使用的环境变量
export PROJECT_ID=<YOUR_PROJECT_ID>
export REGION=<YOUR_REGION>
export SERVICE_NAME=iap-example
export SERVICE_ACCOUNT_NAME=iap-example-sa
export PROJECT_NUMBER=$(gcloud projects describe "${PROJECT_ID}" --format="value(projectNumber)")
4. 部署启用了 IAP 的服务
运行以下命令创建服务账号(用作 Cloud Run 服务身份):
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \
--display-name="IAP codelab CR identity"
部署启用了 IAP 的 hello 容器映像。
gcloud beta run deploy ${SERVICE_NAME} \
--image=us-docker.pkg.dev/cloudrun/container/hello \
--region=${REGION} \
--service-account $SERVICE_ACCOUNT_NAME@${PROJECT_ID}.iam.gserviceaccount.com \
--no-allow-unauthenticated \
--iap
注意:如果您现在尝试访问该应用,会看到 You don't have access
错误页面。在下一步中,您将通过 IAP 向用户授予访问权限。
5. 配置 IAP 访问权限控制
创建 IAP 服务代理。
gcloud beta services identity create --service=iap.googleapis.com --project=${PROJECT_ID}
向 IAP 服务账号分配 Cloud Run Invoker 角色
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-iap.iam.gserviceaccount.com" \
--role="roles/run.invoker"
通过 IAP 允许特定用户或群组访问,从而向用户授予访问权限
EMAIL_ADDRESS=<YOUR_EMAIL>
gcloud beta iap web add-iam-policy-binding \
--resource-type=cloud-run \
--service=${SERVICE_NAME} \
--region=${REGION} \
--member=user:${EMAIL_ADDRESS} \
--role=roles/iap.httpsResourceAccessor \
--condition=None
注意:如果愿意,您还可以在成员参数中使用 group:your-group@example.com。
6. 测试应用
验证对应用的访问权限
获取示例 Cloud Run 服务的网址。
gcloud run services describe ${SERVICE_NAME} --region ${REGION} --format 'value(status.url)'
在浏览器中打开该网址,您应该会看到“It's Running! 恭喜,您已成功将容器映像部署到 Cloud Run”
验证是否已移除对应用的访问权限
您可以通过运行以下命令移除对该应用的访问权限。
gcloud beta iap web remove-iam-policy-binding \
--resource-type=cloud-run \
--service=${SERVICE_NAME} \
--region=${REGION} \
--member=user:${EMAIL_ADDRESS} \
--role=roles/iap.httpsResourceAccessor
请等待几分钟,让 IAM 政策传播。现在,尝试在浏览器中打开该网址,您会看到 You don't have access
错误页面。
7. 恭喜!
恭喜您完成此 Codelab!
建议您查看 Cloud Run IAP 文档。
所学内容
- 如何为 Cloud Run 启用一键式 IAP
- 如何通过 IAP 向用户身份授予对 Cloud Run 服务的访问权限
8. 清理
为避免意外产生费用,例如,如果 Cloud Run 服务的意外调用次数超出了免费层级的 Cloud Run 调用配额,您可以删除在第 6 步中创建的 Cloud Run 服务 iap-example
。
如需删除 Cloud Run 服务,请前往 Cloud Run Cloud 控制台 (https://console.cloud.google.com/run),然后删除 iap-example
服务。
如需删除整个项目,请前往管理资源,选择您的项目,然后选择“删除”。如果您删除该项目,则需要在 Cloud SDK 中更改项目。您可以通过运行 gcloud projects list
来查看所有可用项目的列表。