使用 AmazonSNSClient 发送短信时的授权

2022-09-01 18:16:40

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

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

请注意,这是传递给呼叫的电话号码,因此 aws api 会抱怨我的 IAM 用户对使用该电话号码向资源发送消息没有必要的权限。+999999999.withPhoneNumber()SNS:Publish

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


答案 1

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

下面的链接应将您直接转到 IAM 控制台,以编辑“sms-testing”用户的权限。下面还有一个示例策略,允许 IAM 用户向 SNS 发布任何内容(SMS、主题、终端节点等)。

如果要稍微锁定权限,可以修改“资源”并指定特定的 SNS 资源,如 Topic 或应用程序 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没有SMS资源,因此您可以进行一些黑客攻击并“拒绝”所有SNS发布到主题和平台应用程序,然后允许发布到其余部分,仅留下SMS(目前)。

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

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

希望有所帮助。

-丹尼斯


答案 2

推荐