使用java中的aws SDK对how to send a 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用户?目前,看起来我必须为我发送消息的每个号码创建一个权限,这似乎很奇怪且难以维护。
答案 0 :(得分:30)
错误告诉您,您的IAM用户"短信测试"没有权限向该资源发布SNS(SNS:Publish)。您的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发布到所有资源的示例策略:
Example(s)
由于SNS没有短信资源,你可以做一些黑客攻击"拒绝"所有SNS发布到主题和平台应用程序,然后允许发布到其余只留下SMS(现在)。
这是一个示例政策,只允许发布到SMS并拒绝发布到主题和应用程序(推送通知):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"Resource": "*"
}
]
}
希望有所帮助。
丹尼斯