2016-08-10 42 views
8

Tài liệu chính thức aws trên how to send a Textmessage với SDK aws trong java khá đơn giản.Ủy quyền khi gửi tin nhắn văn bản bằng AmazonSNSClient

Tuy nhiên, khi gửi một thông báo như trong ví dụ ở phía dưới, tôi nhận được lỗi User: arn:aws:iam::xxx:user/sms-testing is not authorized to perform: SNS:Publish on resource: +999999999

Lưu ý rằng +999999999 là số điện thoại truyền cho .withPhoneNumber() cuộc gọi, do đó api AWS phàn nàn về tôi Người dùng IAM không có quyền cần thiết để SNS:Publish thông báo tới tài nguyên có số điện thoại đó.

Câu hỏi của tôi: Làm cách nào để tạo người dùng IAM có thể gửi thông báo SMS qua SDK java? Hiện tại, có vẻ như tôi sẽ phải tạo quyền cho mỗi số tôi gửi tin nhắn, điều này có vẻ lạ và khó duy trì.

Trả lời

17

Lỗi này cho bạn biết rằng người dùng IAM của bạn "sms-testing" không được phép xuất bản lên SNS (SNS: Xuất bản) cho tài nguyên đó. Người dùng IAM của bạn có thể không có quyền SNS: Xuất bản, điều đó có nghĩa là bạn không thể xuất bản bất kỳ thứ gì. Nếu đúng như vậy, bạn chỉ cần thêm chính sách IAM sau vào người dùng HOẶC thêm chính sách vào Nhóm IAM mà người dùng IAM của bạn thuộc về.

Liên kết bên dưới sẽ đưa bạn đến ngay bảng điều khiển IAM để chỉnh sửa quyền cho người dùng "sms-testing". Bên dưới là chính sách mẫu cho phép người dùng IAM xuất bản mọi thứ lên SNS (SMS, Chủ đề, Điểm cuối, v.v.).

Nếu bạn muốn khóa quyền hạn một chút, bạn sẽ sửa đổi "Tài nguyên" và chỉ định tài nguyên SNS cụ thể như Chủ đề hoặc ứng dụng. Nếu bạn không thể chỉnh sửa chính sách người dùng IAM, bạn cần phải yêu cầu quản trị viên của mình thêm chính sách này cho bạn.

Sửa sử dụng IAM của bạn: Chính sách Sample https://console.aws.amazon.com/iam/home?region=us-east-1#users/sms-testing

cho phép SNS Publish cho TẤT CẢ các nguồn lực:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "sns:Publish" 
      ], 
      "Resource": "*" 
     } 
    ] 
} 

Kể từ SNS không có một nguồn tài nguyên tin nhắn SMS, bạn có thể làm một chút của một hack và "Từ chối" tất cả SNS xuất bản lên Chủ đề và Ứng dụng nền tảng và sau đó cho phép xuất bản lên phần còn lại chỉ để lại SMS (hiện tại).

Dưới đây là một chính sách mẫu chỉ cho phép xuất bản SMS và từ chối xuất bản bài viết và các ứng dụng (thông báo đẩy):

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Deny", 
      "Action": [ 
       "sns:Publish" 
      ], 
      "Resource": "arn:aws:sns:*:*:*" 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "sns:Publish" 
      ], 
      "Resource": "*" 
     } 
    ] 
} 

Hy vọng rằng sẽ giúp.

-Dennis

+1

cảm ơn, ủy quyền hoạt động với chính sách ký tự đại diện. Đó là một chút mở sau đó mặc dù - nếu tôi hiểu nó một cách chính xác người dùng iam bây giờ có thể xuất bản cho bất kỳ chủ đề trong tài khoản. Vấn đề với việc xác định một chủ đề có vẻ là sau đó tôi cần phải thêm một thuê bao cho chủ đề của loại "SMS", nơi tôi cần phải hardcode số điện thoại mục tiêu. Có cách nào tôi có thể khóa sự cho phép trong một cách mà người dùng chỉ có thể gửi sms (đến bất kỳ số nào) và không xuất bản cho bất kỳ chủ đề khác? – pulse00

+0

Tôi cũng có cùng một câu hỏi này. @ pulse00 là bạn có thể tìm ra cách hạn chế quyền truy cập SMS không? – kennyjwilli

+0

pules00 - Tôi đã cập nhật câu trả lời gốc với chính sách chỉ cho phép xuất bản lên SMS. kennyjwilli - Cho phép xuất bản tới bất kỳ tài nguyên nào khác ngoài SMS, dường như không khả thi vào lúc này. –

Các vấn đề liên quan