You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP Cloud Run中如何实现服务账号的API级细粒度访问控制?

GCP实现Cloud Run服务API级细粒度访问控制方案

针对你的需求,GCP没有和Azure API范围完全对等的直接实现,但可以通过以下几种方式达成相同的API级细粒度访问控制目标:

1. 基于自定义IAM角色的原生方案(推荐)

这是最贴合GCP IAM模型的做法,利用服务账号的角色声明完成权限判断:

  • 为服务X定义自定义权限:分别创建custom.googleapis.com/serviceX.read(对应READ端点)和custom.googleapis.com/serviceX.write(对应WRITE端点)两个权限。
  • 创建两个自定义IAM角色:
    • 只读角色:仅包含serviceX.read权限
    • 读写角色:包含serviceX.read和serviceX.write权限
  • 分配角色:将只读角色授予服务A的服务账号,读写角色授予服务B的服务账号。
  • 服务X校验逻辑:验证访问令牌时,解析令牌payload中的roles字段(GCP会自动将账号拥有的角色注入令牌),根据当前请求的端点匹配对应权限,决定是否允许访问。

2. 利用Identity-Aware Proxy (IAP) 做路由级控制

如果服务X部署在IAP保护之下,可以直接在IAP中配置路由规则:

  • 针对服务X的/read端点,设置仅允许服务A的服务账号访问
  • 针对/write端点,设置允许服务B的服务账号访问
    这种方式无需修改服务X代码,由IAP在请求到达服务前完成权限校验。

3. 自定义JWT声明(灵活但需自行管理)

如果需要更灵活的自定义声明(类似Azure的范围),可以让服务A、B使用服务账号密钥签名自定义JWT,在payload中加入自定义范围字段(比如scope: "serviceX.read"):

  • 服务A生成的JWT包含只读范围,服务B包含读写范围
  • 服务X验证JWT合法性(通过GCP公钥)后,解析自定义范围字段进行权限判断
    注意:这种方式需要自行管理服务账号的签名密钥,安全性和便捷性不如GCP自动生成的访问令牌,仅适合特殊场景。

与Azure方案的差异

Azure的API范围是直接绑定到API的权限集合,而GCP的IAM模型以角色为权限载体,令牌会自动携带账号的角色信息。二者本质都是通过令牌中的声明做权限校验,只是实现载体不同。

内容的提问来源于stack exchange,提问作者ESG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 22:00:23