Tôi đang viết một máy khách SNS đơn giản có nghĩa là tự đăng ký chủ đề SNS và sau đó nghe thông báo. Tôi thành công có thể gửi một yêu cầu sns.subscribe
, nhưng khi tôi nhặt nhắn SubscriptionConfirmation
POST từ AWS và thử và đáp ứng sử dụng sns.confirmSubscription
tôi nhận được một AuthorizationError
trả về:AuthorizationError khi xác nhận đăng ký SNS qua HTTP
[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:*]
Nếu tôi sử dụng giống hệt nhau Token và TopicArn trong một GET truy vấn đến máy chủ xác nhận đăng ký hoạt động tốt, không có xác thực.
Bất kỳ ý tưởng nào tại sao nó không hoạt động? Chủ đề SNS của tôi mở rộng với quyền xuất bản/đăng ký được đặt thành 'Mọi người'.
Để tham khảo, mã của tôi là một cái gì đó như thế này:
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 :(
}
});
Tuy nhiên, nếu tôi hướng đến URL tương tự như sau trong trình duyệt (tức là hoàn toàn không được thẩm định), nó hoạt động một cách hoàn hảo:
http://sns.us-east-1.amazonaws.com/?Action=ConfirmSubscription&Token=<token>&TopicArn=arn%3Aaws%3Asns%3Aus-east-1%3Axxx%3Ayyy&Version=2010-03-31
Sự khác biệt duy nhất dường như bao gồm tiêu đề 'Ủy quyền' và 'Chữ ký' trong phiên bản có lập trình (được kiểm tra bằng Wireshark).
Bất kỳ ý tưởng nào? Cảm ơn trước!
Cập nhật
Trong mã của tôi, nếu tôi chỉ programatically làm một yêu cầu GET đơn giản để các SubscribeURL
trong thông điệp SubscriptionConfirmation
này hoạt động tốt. Có vẻ lạ khi cuộc gọi API confirmSubscription
không hoạt động. Có lẽ sẽ dính vào cách giải quyết này ngay bây giờ.
Cập nhật 2
Cũng nhận được lỗi tương tự khi gọi sns.unsubscribe
mặc dù, một lần nữa, gọi UnsubscribeURL
trong mỗi thông báo hoạt động. Dường như những người khác cũng gặp phải vấn đề đó nhưng không thể tìm ra giải pháp nào.
quyền IAM cho 'mv-user' là gì? – tedder42
Người dùng không có quyền hoặc vai trò IAM cụ thể. Tôi đã thử các cài đặt khác nhau cho người dùng trong chính sách Chủ đề SNS. Sẽ cập nhật bài đăng để hiển thị chính sách khi tôi quay lại văn phòng. –
Và những gì thực sự bực bội, trang doc này (http://docs.aws.amazon.com/sns/latest/dg/UsingIAMwithSNS.html) nói "Tuy nhiên, các hành động ConfirmSubscription và Unsubscribe không yêu cầu xác thực, có nghĩa là ngay cả nếu bạn chỉ định những hành động đó trong một chính sách, IAM sẽ không hạn chế quyền truy cập của người dùng vào các hành động đó. " –