繁体   English   中英

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

[英]GCP Cloud Scheduler Permission Errors with Service Account

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

在此处输入图像描述

但是,当我使用云调度程序来调用函数时,即使在为每个具有适当权限的函数指定了服务帐户之后,我也会不断收到权限错误。 我已将每个功能都设置在 us-central1 区域中,并且研究了文档和堆栈溢出,但到目前为止没有成功。 我可以在这方面获得一些帮助吗? 在此处输入图像描述

Cloud Scheduler 是一个无服务器产品。 这意味着它不属于您的项目,并且不会通过 VPC 将请求发送到您的 Cloud Function。 此外, VPC SC 尚不支持Cloud Scheduler

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

使用您的服务帐户并将其添加到 Cloud Scheduler 以调用您的 function。 授予它足够的角色

选择

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

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

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

根据文档,为了从 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 服务帐户的角色,因为此方法不需要它们。

在这里,我发现了一篇博客文章,它具有相同的功能,但采用了更实用的方法,您可以从 CLI 中遵循该方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM