【发布时间】:2021-10-15 04:18:57
【问题描述】:
我创建了一个简单的 Cloud Run 作业。我可以通过 curl 命令触发此代码:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" https://sync-<magic>.a.run.app
(显然
为 Ingress 配置 Cloud Run 以允许所有流量并且需要身份验证。
我遵循了这个文档:https://cloud.google.com/run/docs/triggering/using-scheduler
并创建了一个服务帐户,授予它 Cloud Run Invoker 角色,然后设置一个 HTTP 计划作业以获取我使用 CURL 测试过的相同 URL。我选择了添加 OIDC 令牌,并提供了上面创建的服务帐户和我在 curl 中使用的相同 URL。
当我尝试触发此作业时(或当它基于本机 cron 触发时)它失败并显示:
{ "status": "PERMISSION_DENIED", "@type": "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished", "targetType": "HTTP", "jobName": "projects/<project>/locations/<region>/jobs/sync", "url": "https://sync-<magic>.a.run.app/" }
同样,
我尝试使用 service-YOUR_PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com 并将 YOUR_PROJECT_NUMBER 适当更新为运行计划作业的服务帐户。它有同样的错误。
任何关于如何调试的建议将不胜感激!
【问题讨论】:
-
转到 Google Cloud Console -> Cloud Run。验证服务帐户是否已绑定到具有 Invoker 角色的应用程序。
-
您能否检查 Cloud Scheduler SA 服务帐户是否具有在您放入 Cloud Scheduler 配置的服务帐户上生成令牌的角色。角色是
serviceAccountUser。 -
谢谢约翰,我已经验证了这一点,但没有帮助。
-
Guillaume,我怎么知道 Cloud Scheduler 使用了哪个服务帐号?
-
@guillaumeblaquiere 在我看来 Cloud Scheduler SA 是 service-YOUR_PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com。这不会显示在主 IAM 或服务屏幕中。这是你认为我应该检查的吗?
标签: google-cloud-run google-cloud-scheduler