【问题标题】:Authenticating to cloud function from PubSub push subscription从 PubSub 推送订阅认证到云功能
【发布时间】:2021-05-06 03:05:49
【问题描述】:

我们正在使用 PubSub 进行排队,利用指向 http 触发 云功能的推送订阅。根据this 文档,Cloud Run 和 App Engine 都将对来自 PubSub 的请求进行身份验证,但未列出云功能。我们使用了其他谷歌服务,比如调度程序来调用需要身份验证的函数,但在 PubSub 中没有运气。

我的问题是,云功能是否支持通过订阅目标帐户集从 PubSub 进行身份验证,还是需要该功能读取并处理 JWT 本身进行身份验证?

【问题讨论】:

  • 是的,它支持。可以分享一下你的推送订阅配置吗?
  • 订阅基本上设置为@Ricco的答案如下。我尝试了不同级别的服务帐户,但没有成功。监控始终显示订阅的 401 结果。

标签: google-cloud-functions google-cloud-pubsub


【解决方案1】:

你需要不同的东西:

  • 具有角色/cloudfunctions.invoker 的服务帐户
  • 勾选Enable authentication
  • 选择您的服务帐号
  • 在受众字段中添加 Cloud Function URL(如 Cloud Function 中提供的)。 这是 Ricco 答案中缺少的部分


编辑 1

PubSub 需要获得在服务帐户上生成令牌的授权。检查first step on this。在那里,它显示了如何授予 pubsub 服务代理服务帐户作为令牌创建者。

【讨论】:

  • 是的,我拥有所有这些,但仍然无法通过身份验证。一定有其他事情发生。而且我确实知道该过程有效,因为我使用--allow-authenticated 重新安装了该功能,并且一切都按预期工作。所以这是我假设的权限配置。
  • 401 未授权:您的身份验证有效,但您没有权限。
  • 已删除并重新创建了不同名称的订阅。相同的结果 401,auth_required。我与所有者一起使用了服务帐户,结果相同?。我将使用具有所有者权限的临时服务帐户重试。
  • 使用具有所有者权限的服务帐户删除并重新创建订阅,并获得相同的结果,401,需要身份验证。我觉得有点担心,cloud.google.com/pubsub/docs/push#and,根本没有提到函数。我已经成功地从云调度程序调用了函数。我真的不知道为什么它不能从 PubSub 工作。也许我只是将功能移至 Cloud Run。虽然我希望保留一个功能
  • 感谢@guillaume 与我一起度过的所有时间并努力解决这个问题。在这种情况下,问题是观众字符串。我使用与端点相同的字符串,它的路径比函数上定义的触发器更长。这对以后的人应该是一个很好的参考。
【解决方案2】:

Pub/Sub 订阅支持对使用“推送”的订阅使用服务帐户身份验证。

要使用服务帐户,只需指定云功能的端点,启用身份验证并添加用于向云功能发送请求的服务帐户。确保服务帐户具有访问 PubSub 和云功能的适当权限。

【讨论】:

  • 谢谢@Ricco,所以我这样做了,甚至添加了所有者服务帐户,但仍然收到拒绝访问 (401)。据我了解,使用的服务帐户只需要 cloudfunction.invoke 即可调用该功能。有什么建议?服务帐号需要哪些 PubSub 权限?我假设服务设置与用于 Cloud Run 的服务设置相同。
  • 这个答案的问题是它不包含验证正常工作所需的受众字符串。
猜你喜欢
  • 2021-12-05
  • 2021-03-05
  • 2017-12-08
  • 2020-08-30
  • 2019-01-17
  • 1970-01-01
  • 2021-09-19
  • 2021-06-01
  • 1970-01-01
相关资源
最近更新 更多