使用AmazonSNSClient发送文本消息时的授权

pul*_*e00 15 java amazon-sns aws-sdk

关于如何使用aws SDK在java中发送Textmessage的官方aws文档非常简单.

但是,当发送如底部示例中所示的消息时,我收到错误 User: arn:aws:iam::xxx:user/sms-testing is not authorized to perform: SNS:Publish on resource: +999999999

请注意,+999999999是传递给该电话号码.withPhoneNumber()的呼叫,因此AWS API抱怨我的IAM用户没有必要的权限SNS:Publish的消息到与该电话号码资源.

我的问题:如何创建一个能够通过java SDK发送短信通知的IAM用户?目前,看起来我必须为我发送消息的每个号码创建一个权限,这看起来很奇怪,很难维护.

Den*_*s H 34

该错误告诉您,您的IAM用户"sms-testing"无权向该资源发布到SNS(SNS:Publish).您的IAM用户可能根本没有SNS:Publish权限,这意味着您无法发布任何内容.如果是这种情况,您只需将以下IAM策略添加到您的用户,或将策略添加到您的IAM用户所属的IAM组.

下面的链接可以让您直接进入IAM控制台,以编辑"短信测试"用户的权限.以下是允许IAM用户向SNS(SMS,主题,端点等)发布任何内容的示例策略.

如果要稍微锁定权限,可以修改"资源"并指定特定的SNS资源,如主题或应用程序arn.如果您无法编辑IAM用户策略,则需要让管理员为您添加此策略.

修改您的IAM用户:https://console.aws.amazon.com/iam/home? region = us-east-1 #users/sms-testing

允许SNS发布到所有资源的示例策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

由于SNS没有SMS资源,您可以做一些黑客攻击并"拒绝"所有SNS发布到主题和平台应用程序,然后允许发布到其余只留下SMS(现在).

这是一个示例策略,只允许发布到SMS并拒绝发布到主题和应用程序(推送通知):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "sns:Publish"
            ],
            "Resource": "arn:aws:sns:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

丹尼斯