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

标签 java aws-sdk amazon-sns

how to send a Textmessage 上的官方 aws 文档在 Java 中使用 aws SDK 非常简单。

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

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

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

最佳答案

该错误告诉您您的 IAM 用户“sms-testing”没有向 SNS (SNS:Publish) 发布该资源的权限。您的 IAM 用户可能根本没有 SNS:Publish 权限,这意味着您无法发布任何内容。如果是这种情况,您只需将以下 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 没有 SMS 资源,您可以做一些修改并“拒绝”所有 SNS 发布到主题和平台应用程序,然后允许发布到仅留下 SMS 的其余部分(目前)。

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

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

希望对您有所帮助。

-丹尼斯

关于java - 使用 AmazonSNSClient 发送短信时的授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38871201/

相关文章:

java - 缩放面板但滚动条不起作用

java - 没有找到适合 jdbc :sqlite:database. db 的驱动程序

java - 在android的服务中调用位置管理器两次

amazon-web-services - 从 Cloudformation 设置 QueuePolicy 在堆栈创建时不会生效 - 但在创建后设置相同的策略会生效

java - 如何通过电子邮件使用电子邮件端点订阅 Amazon SNS 主题?

java - NTP 时间戳转 UTC; 32 位无符号秒 + 32 位小数字段

node.js - 为什么 changeResourceRecordSets 没有被授权访问这个资源?

amazon-web-services - 使用 DynamoDB 和 docClient,是否可以在使用 transactWrite 时获取返回值?

amazon-web-services - storagegateway.ListGateways() 返回 "Invalid resource",状态码为 : 400

python - 客户端错误 : An error occurred (InternalFailure) when calling the Publish operation (reached max retries: 4)