GCP - 验证 PubSub 推送的云功能 https 端点的所有权

Posted

技术标签:

【中文标题】GCP - 验证 PubSub 推送的云功能 https 端点的所有权【英文标题】:GCP - Verify ownership of a cloud function https endpoint for a PubSub push 【发布时间】:2017-12-08 18:41:03 【问题描述】:

很确定没有办法做到这一点,但如果有其他人有任何想法,那就太好了。

我想要做的是:

我有 2 个微服务托管在 Google Cloud Platform 上作为云 函数 我的第一个微服务做一些事情并触发一个 PubSub 主题为 [x] 的消息 我想将我的第二个微服务设置为 将订阅者推送到主题 [x]。我知道我可以通过部署来做到这一点 带有订阅触发器的第二个云功能,但我不想要 这样做是因为没有合适的方式来确认/拒绝消息 (见这篇文章:Google Cloud Functions to only Ack Pub/Sub on success)。 因此,我将第二个函数部署为具有 HTTP 触发器。然后我试过了 将 GCP 控制台中的推送订阅配置为此 端点 URL。当然,这是行不通的,因为 https://[cloud-subdomain].cloudfunctions.net/ 未经验证 域。

我想这只是不可能做我想做的事,而是需要在应用引擎或我可以验证域的其他地方创建我的第二个微服务。

提前致谢!

【问题讨论】:

为什么你不能在云函数中自己处理重试(最大重试次数),方法是在云函数终止之前排队另一条消息,如answer in the other post 建议的那样。我觉得将逻辑保留在 Cloud Functions 中是一种相当简单的方法。 是的,可以做到。但是,我宁愿依靠 PubSub 为我做这件事,以使解决方案尽可能简单。不过感谢您的建议。 【参考方案1】:

我发布了关于如何从项目 A 中的 pubsub 主题发送消息到项目 B 中的云函数的详细说明。包括推送端点配置、域验证和 python 代码示例。这可以在以下 *** 帖子中找到:

Google pubsub into HTTP triggered cloud function?

【讨论】:

【参考方案2】:

Site Verification using html tag method

不仅仅是基于域名注册商的验证,您还可以使用here 列出的任何方法来验证您的网站。我同意其中大部分不适用于 Cloud Functions,但可以在几分钟内使用 Cloud Functions 获得基于 HTML Tag 的验证。

您需要在 HTML 响应中的 body 属性之前添加给定的 meta 属性。

示例:

<meta name="google-site-verification" content="VERIFICATION_TAG" />

此外,Google 会定期验证域(即使在初始成功之后),因此只要您希望验证 URL,您就必须继续返回此响应。

验证持续多长时间?

Google 会定期检查您的验证在某种程度上是否有效 适合您的验证方法(例如,通过检查 您的网站上是否存在 HTML 标记)。如果验证不能 再确认,您对该属性的权限将过期 在一定的宽限期之后。

Implement retry mechanism within your Cloud function

这与other answer you linked 中解释的选项相同,并且 IMO 更简单。将currentRetryAttempt 作为请求的一个参数,并在每次将重试请求排队时递增该值,并在超时时递归返回相同的函数。在排队新的重试请求之前,您需要检查 currentRetryAttemptmaxRetriesAllowed 值。

与上一个选项不同,它不会对来自云函数的响应施加任何限制。

【讨论】:

好主意!所以你会要求谷歌验证一个子目录(你的函数端点)并用一些 HTML 包括元标记来响应。在我的用例中,如果正文中没有消息,我更愿意抛出 500。但也许您可以查看传入请求的标头并提供不同的响应...下次有机会时,我会尝试一下这个想法。 @Louzoid - 如果您在验证请求中发现任何有趣的标头,请分享信息 :) 我不明白这是如何工作的,因为 Google 正在主页上寻找标签(http 服务器的根目录),据我所知,Cloud Functions 需要您部署到像 us-central1-my-project.cloudfunctions.net/my-function 这样的子目录

以上是关于GCP - 验证 PubSub 推送的云功能 https 端点的所有权的主要内容,如果未能解决你的问题,请参考以下文章

GCP Pubsub 未传递消息的数量不会改变

使用 pubsub 推送触发器运行云功能

GCP Nodejs8 云功能 - 同步 PubSub 发布

在 GCP 上使用 Pubsub 时如何解决身份验证范围不足的问题

如何将 GCP Pubsub 订阅的消息转发到另一个主题?

GCP 云功能未正确接收/确认 PubSub 消息