2016-11-22 32 views
1
  1. 我创建了SNS话题
  2. 我创建API网关端点调用lambda函数
  3. 我创建话题HTTPS订阅指向API网关端点

问题:AUTH = none时一切正常,但当启用AUTH = AWS_IAM时,预订和消息都不会传递到我的lambda。它们也不会显示在Lambda或Gateway网关的Cloudwatch日志中,因为它通常是验证错误的情况。发布SNS消息AWS_IAM验证API网关端点

问题:

  • 什么是通过HTTPS端点交付给AWS_IAM所以它不会允许它的身份(我的第一个想法是中继SNS海报令牌,但它似乎并不如此)
  • 我找不到任何方式将HTTPS端点与任何身份关联,有没有办法?
  • 有很多关于将SNS交付给SQS或通往SNS的网关的信息,但找不到有关实现我所做的任何信息。
  • 有什么方法可以调试AWS_IAM认证问题吗?文档我已经看到建议“检查特权”,这是我已经做了很多小时,但我没有更多的想法。

我很乐意听到您的任何想法,谢谢。

+0

你是如何订阅API网关端点到SNS主题的......我已阅读文档(http://docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.html#SendMessageToHttp.prepare)但并不了解太多。 –

+0

与将消息发布到任何HTTPS端点的方式相同。您只需添加额外的代码以确认基于event.Type的订阅,那么您需要触发GET event.SubscribeURL。对不起,您的评论错过了。 – shd

回答

0

正如你可以在文档中看到,SNS只能做基本/摘要验证http://docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.html

有在有关验证消息的有效性的文档一节但这是代码你不得不写或者从后端的其中一个SNS SDK提取。不幸的是,真的没有办法让SNS通过AWS SigV4签署请求。

0

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

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

+0

这绝对是一种有效的方法,背后的想法是为任何类型的客户端(不一定知道aws)开放休息API。不幸的是,在这个阶段我不能改变这个设计。 – shd

+1

再次阅读SNS的文档之后:https://docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.html我严重怀疑SNS可以将IAM认证的HTTPS POST请求发送给API网关端点。文档仅讨论基本和摘要认证,但IAM是不同的。另一个指针是,没有办法为SNS POST配置主体。 (另外,如果“客户端”/发行商是SNS,则通过API网关会产生不必要的额外成本。) – Digitalkapitaen

0

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

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

+0

我已经看到我的API的链接和其他部分工作正常。唯一的问题是,SNS HTTPS订阅不会转发发送SNS消息的用户的凭据。换句话说,我不知道我的用户是什么,或者我如何将用户分配给HTTPS订阅。 – shd