2

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

4

1 回答 1

2

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

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

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

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

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

使用 Amazon SNS 以 HTTP/s 终端节点作为订阅者的系统到系统消息传递

于 2020-04-06T16:52:37.417 回答