ESPV2访问仅内部流量的NodeJS+Express Cloud Run服务授权问题
配置步骤
1. 配置ESPV2的VPC访问能力
如果你的ESPV2部署在Cloud Run上,需要为其绑定VPC连接器,确保ESPV2发往后端Cloud Run的请求走GCP内部网络,才能匹配后端「仅允许内部流量」的访问规则:
- 提前在和ESPV2同区域创建VPC连接器
- 更新ESPV2的Cloud Run服务配置,绑定VPC连接器,设置出口流量规则为「所有流量都走VPC连接器」
如果ESPV2部署在GKE等其他内部资源上,确保该资源和后端Cloud Run所属VPC网络已打通。
2. 授予ESPV2服务账号后端调用权限
找到你部署ESPV2时使用的服务账号,为其授予后端NodeJS Cloud Run服务的调用权限:
gcloud run services add-iam-policy-binding <你的NodeJS服务名称> \ --member="serviceAccount:<ESPV2服务账号邮箱>" \ --role="roles/run.invoker" \ --region=<服务部署区域>
如果你部署ESPV2时没有指定自定义服务账号,默认使用的是项目默认计算服务账号,格式为<项目编号>-compute@developer.gserviceaccount.com
3. 修改OpenAPI配置添加JWT Audience
ESPV2调用受IAM保护的Cloud Run服务时,需要在请求头中携带符合要求的ID Token,你需要在x-google-backend配置中添加jwt_audience字段,值和后端Cloud Run的访问地址完全一致:
x-google-backend: address: https://<nodejs-expess-cloud-run-url>.a.run.app protocol: h2 jwt_audience: "https://<nodejs-expess-cloud-run-url>.a.run.app"
其他配置保持你原有的内容即可。
4. 重新部署生效
- 用修改后的OpenAPI配置重新生成ESPV2部署配置
- 重新部署ESPV2服务,验证调用效果:此时可以将后端NodeJS服务的访问规则改为「仅允许内部流量」、「不允许未授权调用」,通过ESPV2的地址即可正常访问接口。
内容的提问来源于stack exchange,提问作者Venkat
相关产品推荐
相关产品推荐

