本页面介绍如何使用 Identity-Aware Proxy (IAP) 保护 Cloud Run 服务。
已知限制
-
IAP 不会保护 Cloud Run 为已部署的服务提供的网域。如需确保只有 IAP 有权访问该服务,请对 Cloud Run 服务使用 IAM 身份验证。如需允许 IAP 访问 Cloud Run 服务,请向 IAP 服务账号角色
service-[PROJECT_NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
授予 Cloud Run Invoker 角色。iap 会生成 ID 令牌,并使用该令牌通过X - serverless - authorization
标头对 Cloud Run 进行身份验证。 -
IAP 使用
X - serverless - authorization
标头对 Cloud Run 进行身份验证。Cloud Run 会在移除其签名后将此标头传递给您的服务。如果您的服务旨在将请求转发到另一个需要 IAM 身份验证的 is Run Cloud Run 服务,请先更新您的服务以移除此标头 。 -
IAP 与 Cloud CDN 不兼容。
准备工作
如需为 Cloud Run 启用 IAP,您需要以下各项 :
- 启用了结算功能的 Google Cloud 控制台项目。
- 由负载均衡器提供服务的一组(一个或多个)Cloud Run 服务 。
- 用于验证所有请求都拥有一个身份的应用代码。
IAP 使用 Google 管理的 OAuth 客户端对用户进行身份验证。只有组织内的用户才能访问启用了 IAP 的应用。如果您想允许组织外部的用户访问,请参阅为外部应用启用 IAP。
注意: 预览版中提供了使用 Google 管理的 OAuth 客户端对用户进行身份验证的功能。
启用 IAP
控制台
使用 Google Cloud 控制台启用 IAP 时,无法使用 Google 管理的 OAuth 客户端。
如果您尚未配置项目的 OAuth 同意屏幕,系统会提示您执行此操作。如需配置 OAuth 同意屏幕,请参阅设置 OAuth 同意屏幕。
设置 IAP 访问权限
- 转到 Identity-Aware Proxy 页面。
- 选择要使用 IAP 保护的项目。
- 在 APPLICATIONS(应用)下,选中您要向其添加成员的负载均衡器后端服务旁边的复选框。
- 在右侧面板上,点击添加成员 。
-
在添加成员对话框中,输入应具有项目的 IAP-secured Web App User 角色的群组或个人的账号。可以添加以下种类的账号作为成员:
- Google 账号:user@gmail.com – 也可以是 Google Workspace 账号,例如 user@google.com 或其他一些工作区网域 。
- Google 群组:<管理员>@googlegroups.com
- 服务账号:server@example.iam.gserviceaccount.com
- Google Workspace 网域:example.com
-
从角色下拉列表中选择 Cloud IAP > IAP-secured Web App Use。
-
点击保存。
启用 IAP
- 在 IAP 页面的应用下,找到您要限制访问的负载均衡器后端服务。如需为某资源开启 IAP,请点击 IAP 切换开关。如需启用 IAP,需要满足以下条件:
- 负载均衡器前端配置中至少一个协议必须是 HTTPS。了解设置负载均衡器。
- 您需要
compute.backendServices.update
、clientauthconfig.clients.create
和clientauthconfig.clients.getWithSecret
权限。这些权限由 Project Editor 等角色授予。 如需了解详情,请参阅管理对受 IAP 保护的资源的访问权限。
- 在出现的开启 IAP 窗口中,点击开启以确认您希望使用 IAP 保护资源。开启 IAP 后,它需要与负载均衡器的所有连接的登录凭据。只有具有项目的 IAP-Secured Web App User 角色的账号才能获得访问权限。
-
按照使用 IAM 进行访问权限控制中的说明,授权 IAP 将流量发送到后端 Cloud Run 服务。
- 主要用户:
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
- 角色:Cloud Run Invoker
- 主要用户:
gcloud
- 如果您之前尚未创建服务账号,请运行以下命令创建一个服务账号。如果您之前创建了服务账号,运行该命令不会创建重复的服务账号 。
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
- 运行以下命令,向在上一步中创建的服务账号授予调用方权限 。
gcloud run services add-iam-policy-binding [SERVICE-NAME] \ --member='serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com' \ --role='roles/run.invoker'
-
通过运行全局范围或区域范围的命令来启用 IAP,具体取决于您的负载均衡器后端服务是全球性还是区域性。使用上一步中的 OAuth 客户端 ID 和 Secret 。
全局范围
gcloud compute backend-services update --global --iap=enabled
区域范围
gcloud compute backend - service update is enabled --region --iap = enable
替换以下内容:- : 后端服务的名称 。
- : 要在其中启用 IAP 的区域 。
启用 IAP 后,您可以使用 Google Cloud CLI 通过 Identity and Access Management 角色role / iap.httpsresourceaccessor
操纵 IAP 访问权限政策。如需了解详情,请参阅管理角色和权限 。
配置 Cloud Run 以限制访问权限
您可以将 Cloud Run 服务配置为仅允许内部客户端和外部负载均衡器访问,从而阻止来自公共互联网的所有直接请求。
按照限制 Cloud Run 的入站流量中的步骤,将 Cloud Run 服务的入站流量设置配置为内部和 Cloud Load balance 。
排查错误
The IAP service account is not provision
如果您看到此错误,则表示您正在尝试通过 gcloud CLI 为 Cloud Run 服务启用 IAP。通过 gcloud CLI 设置 IAP 需要执行额外的步骤,即使用以下命令在项目中预配 IAP 服务账号 :
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
Your client does not have permission to get URL from this server
IAP 服务账号不需要run.routes.invoke
权限
在 IAP with Cloud Run 预览版期间,Cloud Run 不会针对使用 Cloud Run Invoker 角色的 IAP 调用执行 run.routes.invoke
权限检查。在正式版 is 会执行此权限检查 ( GA ) 中,Cloud Run 会执行此权限检查 。
为避免破坏性更改,在预览期间,我们将一些依赖于此行为的客户项目列入了许可名单,以免系统检查该权限。请与 Cloud Run 支持团队联系,将此类项目从“仅限预览版”许可名单中移除。
后续步骤
如需了解如何使用 Terraform 为 Cloud Run 设置 IAP,请浏览 terraform 代码示例 。
© Copyright notes
The copyright of the article belongs to the author, please do not reprint without permission.
Related posts
No comments...