通过HTTP确认SNS订阅时发生AuthorizationError
我正在编写一个简单的SNS客户端,用于订阅SNS主题,然后收听通知。 我可以成功提交sns.subscribe
请求,但是当我从AWS获取SubscriptionConfirmation
POST消息并尝试使用sns.confirmSubscription
响应sns.confirmSubscription
我得到一个AuthorizationError
:
[AuthorizationError: User: arn:aws:iam::xxx:user/mv-user is not authorized to perform: SNS:ConfirmSubscription on resource: arn:aws:sns:us-east-1:xxx:*]
如果我在服务器的GET查询中使用完全相同的Token和TopicArn,那么预订确认工作正常,没有身份验证。
任何想法,为什么它不工作? 我的SNS主题全面开放,发布/订阅权限设置为“每个人”。
作为参考,我的代码是这样的:
var params = {
TopicArn: topicArn, // e.g. arn:aws:sns:us-east-1:xxx:yyy
Token: token // long token extracted from POST body
};
sns.confirmSubscription(params, function (err, data) {
if (err) {
// BOOOM - keep getting here with AuthorizationError
} else {
// Yay. Worked, but never seem to get here :(
}
});
但是,如果我在浏览器中导航到类似于此的URL(即完全未经身份验证的),它可以很好地工作:
http://sns.us-east-1.amazonaws.com/?Action=ConfirmSubscription&Token=<token>&TopicArn=arn%3Aaws%3Asns%3Aus-east-1%3Axxx%3Ayyy&Version=2010-03-31
唯一的区别似乎是编程版本中包含'授权'和'签名'标题(使用Wireshark进行检查)。
有任何想法吗? 提前致谢!
更新
在我的代码中,如果我只是编程式地对SubscriptionConfirmation
消息中的SubscribeURL
执行一个简单的GET请求,这可以正常工作。 confirmSubscription
API调用不起作用似乎很奇怪。 现在可能会坚持这种解决方法。
更新2
调用sns.unsubscribe
时sns.unsubscribe
出现同样的错误,虽然在每个通知中都调用了UnsubscribeURL
。 似乎其他人也遇到过这个问题,但无法找到任何解决方案。
错误说明了一切:
[AuthorizationError: User: arn:aws:iam::xxx:user/mv-user is not authorized to perform: SNS:ConfirmSubscription on resource: arn:aws:sns:us-east-1:xxx:*]
基本上告诉你,您用来调用ConfirmSubscription的IAM用户没有适当的权限来执行此操作。 最好的办法是更新该IAM用户的权限,特别是添加ConfirmSubscription
权限。
(根据您的意见,即使文档中有其他说明,错误也是非常具体的......可能值得直接跟随AWS跟踪此问题,因为错误消息或文档不正确)。
我在开发我的应用程序时遇到了类似的问题。 我最终解决的方法如下:
以上应该照顾它。
如果您想要看起来可以创建一个基于“AmazonSNSFullAccess”的自定义策略,并将其应用于您的用户。
自定义策略与以下内容类似:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"sns:ConfirmSubscription"
],
"Effect": "Allow",
"Resource": "YOUR_RESOURCE_ARN_SHOULD_BE_HERE"
}
]
}
链接地址: http://www.djcxy.com/p/24283.html
上一篇: AuthorizationError when confirming SNS subscription over HTTP