代码之家  ›  专栏  ›  技术社区  ›  pulse00

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

  •  25
  • pulse00  · 技术社区  · 9 年前

    有关的官方aws文档 how to send a Textmessage 使用java中的awsSDK非常简单。

    然而,当发送如底部示例所示的消息时,我得到了错误 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 向资源发送带有该电话号码的消息。

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

    1 回复  |  直到 5 年前
        1
  •  62
  •   Dennis H    9 年前

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

    下面的链接将带您直接进入IAM控制台,编辑“短信测试”用户的权限。下面是一个示例策略,允许IAM用户将任何内容发布到SNS(SMS、主题、端点等)。

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

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

    {
        "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": "*"
            }
        ]
    }
    

    希望能有所帮助。

    -丹尼斯