点击Cloud Run安全按钮后,Scheduler调用API遇权限拒绝问题
Cloud Scheduler调用Cloud Run权限拒绝问题排查与解答
问题背景
原本运行正常的配置:
- Google Cloud Run:API通过公开URL可正常访问(示例:
https://some_name-ab3adasmjk-oa.a.run.app) - Google Cloud Scheduler:通过HTTP调用上述API(URL示例:
https://some_name-ab3adasmjk-oa.a.run.app/v1/myapi?id=0)
在Cloud Run控制台的SECURITY页面为服务账号添加SECRET MANAGER SECRET ACCESSOR权限后,Scheduler调用API开始出现permission denied错误,按Stack Overflow相关操作处理后仍未解决。
已执行操作
- A) 为Cloud Run的服务账号添加
SECRET MANAGER SECRET ACCESSOR权限 - B) 在Scheduler中配置
OIDC Token - C) Cloud Run与Scheduler处于不同区域(此前运行正常)
用户疑问
基础疑问
- 服务账号获得
SECRET MANAGER SECRET ACCESSOR权限后,Scheduler是否仍使用原Cloud Run URL? - 在Scheduler中添加OIDC Token时,指定Cloud Run服务账号、Audience留空是否正确?
补充疑问
- Cloud Run与Scheduler跨区域部署是否会影响调用?
I) 为Cloud Run创建服务账号SA1,并赋予SECRET MANAGER SECRET ACCESSOR权限,此配置是否正确?
II) 在IAM中创建服务账号SA2(格式:service-YOUR_PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com),并赋予Cloud Scheduler Service Agent角色,此配置是否正确?
III) 添加OIDC Token时,应该指定SA1还是SA2?
IV) 需授予roles/run.invoker权限,具体操作步骤是什么?控制台中该权限的名称是什么?应该赋予SA1还是SA2?
问题解答
基础疑问解答
- 是,仍使用原URL。Cloud Run的访问URL不会因服务账号权限变更而改变,只要服务本身未重新部署或修改域名配置,Scheduler继续用原有API URL即可。
- 不正确。OIDC Token的Audience字段不能留空,必须填写Cloud Run服务的根URL(示例:
https://some_name-ab3adasmjk-oa.a.run.app);指定的服务账号应为Scheduler发起请求的身份账号,而非Cloud Run的服务账号SA1。
补充疑问解答
- 无影响。Cloud Scheduler支持跨区域调用Cloud Run服务,此前正常运行也验证了这一点,权限问题与跨区域无关。
I) 配置正确但不相关。SA1作为Cloud Run的服务账号,若服务本身需要访问Secret Manager,赋予SECRET MANAGER SECRET ACCESSOR是必要的,但这个权限是给Cloud Run服务内部使用的,和Scheduler调用Cloud Run的权限问题无关。
II) 无需手动创建。SA2是Google自动生成的Cloud Scheduler服务代理账号,默认已存在且通常自带Cloud Scheduler Service Agent角色,不需要手动创建;只有当该角色缺失时,才需要手动补充。
III) 指定SA2。OIDC Token需要使用Cloud Scheduler的服务代理账号(SA2),因为是SA2代表Scheduler发起请求,需要用自身身份获取Token访问Cloud Run。
IV) 权限配置说明:- 控制台权限名称:
Cloud Run Invoker(对应权限ID:roles/run.invoker) - 赋予对象:SA2(Cloud Scheduler服务代理账号),因为是SA2发起调用请求,需要获得Cloud Run的访问权限
- 操作步骤:
- 打开Google Cloud Console的IAM与管理 -> IAM页面
- 在IAM列表中找到SA2(格式:
service-YOUR_PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com),点击右侧的编辑图标 - 点击添加角色,在搜索框输入
Cloud Run Invoker并选中该角色 - 点击保存完成配置
- 控制台权限名称:
内容的提问来源于stack exchange,提问作者iKK
相关产品推荐
相关产品推荐

