【问题标题】:Cloud Run container not running due to permission issue由于权限问题,Cloud Run 容器未运行
【发布时间】:2021-11-05 12:16:31
【问题描述】:

GCP 项目包括一个每分钟抓取特定网站的管道。 Cloud Scheduler 设置为每分钟触发一次,并向 Cloud 函数发布请求,然后调用我遇到问题的 Cloud Run 容器。 Cloud Scheduler 和 Function 工作正常,每分钟提交一次请求,并且它们的日志没有显示任何错误。

但是,每次运行抓取时,Cloud Run 容器都会返回此消息:

The request was not authorized to invoke this service. Read more at https://cloud.google.com/run/docs/securing/authenticating

我该如何解决这个错误?我认为这与未授权调用 Run 容器的 Cloud Function 有关,但我不确定该怎么做。如果需要,我会添加更多信息。 谢谢!

注意:这个问题类似于我不久前发布的this。但是,现在的不同之处在于容器会立即开始抛出这些错误,而之前它会在失败之前运行一段时间。

【问题讨论】:

  • Cloud Run 服务的身份验证设置显示什么以及您为 Cloud Function 服务帐户附加了哪些权限?
  • Cloud Scheduler 可以直接调用 Cloud Run。除非 Cloud Functions 还提供额外价值,否则请移除该服务。
  • @Asdfg 我已允许所有流量并要求使用 IAM 进行身份验证。您知道 Cloud Functions 对应的是哪个服务邮箱吗?
  • @JohnHanley 我会尝试删除云功能,但我不知道这是否可能。
  • 如果您询问 Cloud Functions 对应的服务电子邮件是什么,您需要了解一些基本的工作原理。这将为您节省大量时间和麻烦。

标签: google-cloud-platform google-cloud-functions google-cloud-run


【解决方案1】:

此问题可能与云功能关联的服务帐户的权限有关。为了解决它,您可以尝试以下步骤:

  • 检查与 Cloud Function 关联的服务帐号。
  • 在您的 Cloud Run 服务中授予此服务帐号 Cloud Run Invoker 角色 (roles/run.invoker)。
  • 在向 Cloud Run 服务 URL 发出请求之前,请遵循 Cloud Function 中的 authentication process。一种选择是 use the metadata server 获取 ID 令牌,并将此令牌包含在对 Cloud Run 服务的请求的标头中。

另一种选择是通过将 Cloud Run Invoker 角色添加到 allUsers 成员类型来使您的 Cloud Run 服务公开。请记住,这将允许未经身份验证的调用,因此 Cloud Function 将能够向服务发出请求。

【讨论】:

  • 添加此代码无法正常工作。这有什么错误吗?
  • 检查与 CF 关联的 SA,授予 SA 在 Cloud Run 服务中的调用者角色,然后继续进行身份验证。完成此操作后,进行身份验证的一种方法是通过 metadata server 检索 de ID 令牌,然后将此令牌包含在请求中,如 this 文档中所述,但将 $(gcloud auth print-identity-token) 更改为您之前获得的令牌。你试过这种方法吗?
猜你喜欢
  • 2021-10-05
  • 2021-10-23
  • 2020-04-19
  • 1970-01-01
  • 2020-11-22
  • 2020-10-17
  • 1970-01-01
  • 2021-08-23
  • 2021-10-15
相关资源
最近更新 更多