如何通过 http 触发器从 AWS SNS 触发 GCP 云功能(私有)

Posted

技术标签:

【中文标题】如何通过 http 触发器从 AWS SNS 触发 GCP 云功能(私有)【英文标题】:How to trigger GCP cloud function(private) from AWS SNS over http trigger 【发布时间】:2020-04-06 16:11:52 【问题描述】:

我在 GCP 中有云功能,当使用 SNS 通知在 s3 存储桶中收到任何对象时触发。 SNS 已以这种方式配置,当任何对象进入 s3 存储桶时,它会使用 http 触发器(https url)通知 GCP 云函数。截至目前,云功能端点是公开的,因此如果有人拥有严重安全问题的 url,它甚至可以从任何地方触发,甚至可以从 Web 浏览器触发。因此,我想将其设为私有,并希望它只能通过 AWS SNS 访问,但不知道如何实现。

【问题讨论】:

【参考方案1】:

您无法阻止用户调用您的 HTTP 终端节点,因为您必须公开该终端节点才能使 Amazon SNS 能够调用您的终端节点。您可以验证请求并拒绝您不想处理的请求(返回 401 Unauthorized)。

有几种方法可以验证请求。我列出了从最不安全到最安全(也是最容易到最难实现)的方法。

检查 x-amz-sns-topic-arnx-amz-sns-subscription-arn 以获得您期望在 HTTP POST 请求标头中的值。

使用用户名和密码将 SNS 配置为使用基本身份验证。验证这两个值。

验证 SNS 通知签名。此方法需要下载 Amazon 证书并验证每个请求的签名。

Using Amazon SNS for system-to-system messaging with an HTTP/s endpoint as a subscriber

【讨论】:

以上是关于如何通过 http 触发器从 AWS SNS 触发 GCP 云功能(私有)的主要内容,如果未能解决你的问题,请参考以下文章

AWS SNS子脚本与lambda函数的触发器?

AWS Elastic Beanstalk上发生了哪种事件会触发SNS通知?

Zabbix借助AWS SNS触发短信告警

AWS Beanstalk - 创建新环境时向 Lambda 发送 SNS 通知

从 S3 事件触发 ECS 任务

从 SNS 触发 Step Function