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

时间:2020-06-19 04:46:33

标签: google-cloud-platform google-cloud-functions google-cloud-storage google-cloud-scheduler

我创建了一组云功能,这些功能可以将数据提取到Google云存储中。已使用get http请求设置功能,以仅接受内部流量。

enter image description here

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

2 个答案:

答案 0 :(得分:4)

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

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

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

替代

但是,如果您最初不想部署可在Internet上公开访问的功能(仅允许内部流量进入模式),则有另一种选择。

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

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

答案 1 :(得分:1)

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

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

完成此操作后,您将能够测试运行Cloud Scheduler作业并验证其是否现在正在工作。最终的架构是这样的:

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

一旦工作起来,请记住还原授予Cloud Scheduler服务帐户的角色,因为此方法不需要它们。

在这里,我发现一个blog post可以执行相同的操作,但是您可以通过CLI采取更实用的方法。