【问题标题】:Posting SNS messages to AWS_IAM authenticated Api Gateway endpoint将 SNS 消息发布到经过 AWS_IAM 身份验证的 Api 网关端点
【发布时间】:2016-12-06 02:54:58
【问题描述】:
  1. 我创建了 SNS 主题
  2. 我创建了调用 Lambda 函数的 API Gateway 端点
  3. 我创建了指向 API Gateway 端点的主题 HTTPS 订阅

问题:当 AUTH=none 时一切正常,但是当我启用 AUTH=AWS_IAM 时,订阅和消息都不会传递到我的 lambda。它们也不会出现在 Lambda OR Gateway cloudwatch 日志中,因为通常会出现身份验证错误。

问题:

  • HTTPS 端点向 AWS_IAM 传递的身份是什么,所以它不允许这样做(我的第一个想法是中继 SNS 海报令牌,但似乎并非如此)
  • 我找不到任何将 HTTPS 端点与任何身份相关联的方法,有什么方法吗?
  • 有很多关于将 SNS 传递到 SQS 或网关到 SNS 的信息,但找不到任何关于实现我尝试做的事情的信息。
  • 是否有任何方法可以调试 AWS_IAM 身份验证问题?文档我已经看到了“检查权限”的建议,这是我已经做了很多小时但我没有更多想法的事情。

很高兴听到您的任何想法,谢谢。

【问题讨论】:

  • 您如何将 API Gateway 端点订阅到 SNS 主题...我已阅读文档 (docs.aws.amazon.com/sns/latest/dg/…) 但不太了解。
  • 与将消息发布到任何 HTTPS 端点的方式相同。您只需要添加额外的代码来根据 event.Type 确认订阅,然后您需要触发 GET event.SubscribeURL。很抱歉错过了您的评论。

标签: amazon-web-services amazon-sns aws-api-gateway


【解决方案1】:

正如您可能在文档中看到的,SNS 只能进行基本/摘要式身份验证http://docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.html

文档中有一节关于验证消息的有效性,但这是您必须自己编写或从后端的 SNS SDK 中提取的代码。不幸的是,实际上没有任何方法可以让 SNS 使用 AWS SigV4 签署请求。

【讨论】:

    【解决方案2】:

    为什么不让 Lambda 函数直接订阅 SNS 主题(不经过 API 网关)?

    这应该很简单:https://docs.aws.amazon.com/sns/latest/dg/sns-lambda.html

    【讨论】:

    • 这绝对是一种有效的方法,其背后的想法是为任何类型的客户端(不一定知道 aws)开放仅休息 api。不幸的是,在这个阶段我无法改变那个设计。
    • 再次阅读 SNS 的文档后:docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.html 我严重怀疑 SNS 是否可以将 IAM 身份验证的 HTTPS POST 请求发送到 API 网关端点。文档只讨论基本身份验证和摘要式身份验证,但 IAM 有所不同。另一个指针是没有办法为 SNS POST 配置主体。 (此外,如果“客户端”/发布者是 SNS,则通过 API 网关会产生不必要的额外费用。)
    【解决方案3】:

    这是帮助您解决身份验证问题的完整链接。 https://aws.amazon.com/premiumsupport/knowledge-center/iam-authentication-api-gateway/

    如果是“检查权限”问题,则您的 IAM 用户没有足够的资源访问权限来进行任何更改。

    【讨论】:

    • 我已经看到该链接和我的 API 的其他部分工作正常。唯一的问题是 SNS HTTPS 订阅不转发发送 SNS 消息的用户的凭据。换句话说,我不知道我的用户是什么,或者我如何将用户分配给 HTTPS 订阅。
    猜你喜欢
    • 2020-08-02
    • 1970-01-01
    • 2021-05-02
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 2012-11-20
    相关资源
    最近更新 更多