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

如何在自定义GCP Cloud Run服务中实现IAM权限验证及兼容GitHub App调用?

问题解答

一、验证身份是否具备Cloud Run服务调用权限

  • Cloud Run的IAM权限验证无需额外调用API。当你启用Cloud Run的IAM身份认证后,Google的基础设施会自动验证请求携带的ID令牌对应的身份是否拥有roles/run.invoker角色,验证不通过会直接返回403。你之前做的iss和hd检查只是验证令牌本身的合法性,权限检查是Cloud Run入口层自动完成的,不需要自己实现。
  • 如果确实需要在代码内手动校验权限,可以调用Google Cloud的IAM Credentials API或Cloud Resource Manager API查询身份的角色权限,但这种场景极少,因为Cloud Run的内置校验已经足够。

二、同时支持IAM认证与GitHub App调用的方案

方案1:路由级中间件区分校验

保留Cloud Run的IAM身份认证(强制所有请求携带有效ID令牌),在服务中间件中对GitHub相关路由(如/github/webhook)跳过IAM令牌校验,转而验证GitHub的请求签名:

  • GitHub会用你的App私钥对请求生成签名,你可以在中间件中通过GitHub提供的公钥验证签名有效性,确保请求来自官方。

方案2:关闭Cloud Run全局认证,服务内部做分层校验

关闭Cloud Run的IAM身份认证,让所有请求都能到达服务,然后在中间件中做分层处理:

  • 对旧有路由:严格验证ID令牌的iss、hd字段,同时调用IAM API确认该身份拥有roles/run.invoker权限;
  • 对GitHub路由:仅验证GitHub请求签名。

方案3:前置网关/Cloud Armor做路由控制

使用Cloud Armor或API Gateway作为前置层:

  • 配置规则,仅允许GitHub的官方IP段访问GitHub相关路由;
  • 对其他路由,强制要求携带有效ID令牌并通过Cloud Run的IAM校验。

注意:GitHub的IP段可能会更新,需要定期维护规则。

内容的提问来源于stack exchange,提问作者Moritz Schmitz v. Hülst

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:52:14