服务帐户的 GCP Cloud Scheduler 权限错误

GCP Cloud Scheduler Permission Errors with Service Account

我创建了一组云函数,用于将数据提取到 google 云存储中。这些功能已通过 get http 请求设置为仅接受内部流量。

但是,当我使用云调度程序调用函数时,即使在为具有适当权限的每个函数指定服务帐户之后,我仍不断收到权限错误。我已将每个函数都设置在 us-central1 区域中,并且研究了文档和 Stack overflow,但到目前为止没有成功。我可以得到一些帮助吗?

Cloud Scheduler 是一款无服务器产品。这意味着它不属于您的项目,也不会通过 VPC 将请求发送到您的 Cloud Function。此外,Cloud Scheduler 尚未 supported in VPC SC

因此,你不能。解决方法是允许云功能上的所有入口流量并取消选中允许未经身份验证的访问。因此,您的函数可以从其他地方(从互联网)调用,但您需要有效的身份验证才能调用它。

使用您的服务帐户并将其添加到 Cloud Scheduler 以调用您的函数。授予它 sufficient role for this

备选

但是,如果您最初不想部署可在 Internet 上公开访问的函数(仅允许内部流量进入模式),还有一个替代方案。

更改您的 Cloud Scheduler 以发布 PubSub 消息,而不是直接调用您的函数。然后,部署链接到 PubSub 主题而不是 HTTP 目标模式的函数。

您可能需要在代码中执行一些更新,特别是如果您有参数要处理(最初在查询或正文中,现在全部在 Cloud Scheduler 发布的 PubSub 消息中)。但是您的函数只能由您的 PubSub 主题调用,不能通过其他方式调用。

根据 the documentation,要从 Cloud Scheduler 触发 Cloud Function,您必须使用 Pub/Sub。这些是步骤:

  1. 创建 Cloud Function 并使其由 Pub/Sub 主题触发。
  2. 创建 Pub/Sub 主题。
  3. 创建将调用 Pub/Sub 触发器的 Cloud Scheduler 作业。

完成后,您将能够测试-运行 Cloud Scheduler 作业并验证它现在是否正常工作。最终的模式是这样的:

Cloud Scheduler job => Pub/Sub topic => Cloud Function

一旦生效,请记住恢复授予 Cloud Scheduler 服务帐户的角色,因为此方法不需要它们。

我在这里找到了一个 blog post,它的作用与此相同,但使用更实用的方法,您可以从 CLI 中遵循。