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

如何通过App Engine应用跨项目访问需认证的Cloud Run服务

问题根因

返回403的核心原因是请求未携带合法的OIDC身份令牌:Cloud Run开启「Require Authentication」后,不会根据请求来源的服务账号身份自动放行,所有请求必须在Header中携带绑定了对应服务账号、受众匹配Cloud Run地址的ID令牌,哪怕服务账号已经被授予调用权限,裸请求URL依然会被拦截。跨项目场景下存在多个容易遗漏的配置点,按以下步骤核对配置即可实现正常访问。

正确配置步骤

第一步:校验基础权限与网络配置

  • 先确认App Engine柔性实例实际使用的服务账号:默认是App Engine默认服务账号,格式为<App Engine所属项目ID>@appspot.gserviceaccount.com,如果给App Engine配置过自定义服务账号,以实际绑定的自定义账号为准
  • 切换到Cloud Run所属项目,给上述服务账号授予roles/run.invoker(Cloud Run调用者)角色,角色需要绑定在目标Cloud Run服务或Cloud Run所属项目层级,不要误绑定到App Engine所在项目
  • 确认Cloud Run入口配置保留当前选的Allow all traffic即可,跨项目访问不能选「仅允许内部流量」,该选项仅放行同项目VPC内来源的请求,跨项目请求哪怕带合法令牌也会在网络层被拦截。

第二步:请求时携带合法鉴权令牌(核心遗漏步骤)

所有发往Cloud Run的请求必须添加Authorization: Bearer <OIDC_ID_TOKEN>请求头,且令牌的aud(受众)字段必须和目标Cloud Run的完整默认服务地址完全匹配。

  • SSH到实例做连通性测试时,直接用gcloud生成符合要求的令牌发起请求,命令如下:
    curl -H "Authorization: Bearer $(gcloud auth print-identity-token --audience=https://<你的Cloud Run服务默认地址>.a.run.app)" https://<你的Cloud Run服务默认地址>.a.run.app
    
    注意必须加--audience参数,缺省该参数生成的令牌受众不匹配,Cloud Run校验依然会返回403。
  • Web应用代码中发起请求时,不要硬编码或手动维护令牌,直接用官方Google Auth库从实例元数据服务自动拉取、刷新令牌即可,不需要额外配置服务账号密钥。以Python代码为例:
    import google.auth.transport.requests
    import google.oauth2.id_token
    import requests
    
    CLOUD_RUN_URL = "https://<你的Cloud Run服务默认地址>.a.run.app"
    auth_req = google.auth.transport.requests.Request()
    id_token = google.oauth2.id_token.fetch_id_token(auth_req, CLOUD_RUN_URL)
    resp = requests.get(CLOUD_RUN_URL, headers={"Authorization": f"Bearer {id_token}"})
    
  • 跨项目场景注意:不要用自定义绑定的域名作为令牌受众,必须使用Cloud Run默认分配的*.a.run.app地址发起请求、配置令牌受众,自定义域名无法通过默认的OIDC身份校验。

第三步:异常排查点

如果按上述配置后依然返回403,逐一核对:

  • 确认Cloud Run所属项目/组织没有配置禁止跨项目服务账号授权的组织策略,这类策略会直接拒绝跨项目账号的调用权限
  • 确认App Engine柔性实例的出站路由没有配置强制走VPC自定义网络,导致到Cloud Run的请求被中间防火墙篡改或拦截(这类场景多数会返回超时,少数拦截鉴权头的场景会返回403)
  • 不要尝试用API Key做鉴权,「Require Authentication」模式下不识别API Key作为合法身份凭证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 08:57:21