java 使用AmazonSNSClient发送短信时的授权

f0brbegy  于 2022-12-25  发布在  Java
关注(0)|答案(1)|浏览(198)

how to send a Textmessage上的官方aws文档和java中的aws SDK非常简单。
但是,当发送底部示例中所示的消息时,我收到错误User: arn:aws:iam::xxx:user/sms-testing is not authorized to perform: SNS:Publish on resource: +999999999
注意,+999999999是传递给.withPhoneNumber()调用的电话号码,因此awsapi会抱怨我的IAM用户没有必要的权限,无法通过SNS:Publish向具有该电话号码的资源发送消息。
我的问题:如何创建一个IAM用户,使其能够通过java SDK发送短信通知?目前,似乎我必须为每个发送消息的号码创建一个权限,这似乎很奇怪,很难维护。

ohfgkhjo

ohfgkhjo1#

此错误通知您IAM用户“sms-testing”无权发布到SNS(SNS:发布)该资源。您的IAM用户可能根本没有SNS:发布权限,这意味着您无法发布任何内容。如果是这种情况,您只需将以下IAM策略添加到您的用户,或将该策略添加到IAM用户所属的IAM组。
下面的链接应将您直接带到IAM控制台,以编辑“sms-testing”用户的权限。下面还有一个示例策略,允许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": "*"
        }
    ]
}

由于SNS没有短信资源,你可以做一点黑客和“拒绝”所有SNS发布到主题和平台应用程序,然后允许发布到其余的只留下短信(目前)。
下面是一个示例策略,只允许发布到SMS,拒绝发布到主题和应用程序(推送通知):

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

相关问题