使用 AmazonSNSClient 发送短信时的授权
Authorization when sending a text message using AmazonSNSClient
关于 how to send a Textmessage 和 java 中的 aws SDK 的官方 aws 文档非常简单。
但是,当发送如底部示例所示的消息时,我收到错误 User: arn:aws:iam::xxx:user/sms-testing is not authorized to perform: SNS:Publish on resource: +999999999
请注意,+999999999
是传递给 .withPhoneNumber()
调用的 phone 号码,因此 aws api 抱怨我的 IAM 用户没有必要的权限 SNS:Publish
向具有 phone 号码的资源发送消息。
我的问题:如何创建能够通过 java SDK 发送短信通知的 IAM 用户?目前,我似乎必须为每个发送消息的号码创建一个权限,这看起来很奇怪且难以维护。
该错误告诉您您的 IAM 用户 "sms-testing" 没有向 SNS (SNS:Publish) 发布该资源的权限。您的 IAM 用户可能根本没有 SNS:Publish 权限,这意味着您无法发布任何内容。如果是这种情况,您只需将以下 IAM 策略添加到您的用户或将该策略添加到您的 IAM 用户所属的 IAM 组。
下面的 link 应该会将您带到 IAM 控制台以编辑 "sms-testing" 用户的权限。下面还有一个示例策略,允许 IAM 用户将任何内容发布到 SNS(SMS、主题、端点等)。
如果您想稍微锁定权限,您可以修改 "Resource" 并指定特定的 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 资源,您可以做一些 hack,"Deny" 所有 SNS 发布到主题和平台应用程序,然后允许发布到其余部分,只留下 SMS(目前).
这是一个示例策略,仅允许发布到 SMS 并拒绝发布到主题和应用程序(推送通知):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"sns:Publish"
],
"Resource": "arn:aws:sns:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"Resource": "*"
}
]
}
希望对您有所帮助。
-丹尼斯
关于 how to send a Textmessage 和 java 中的 aws SDK 的官方 aws 文档非常简单。
但是,当发送如底部示例所示的消息时,我收到错误 User: arn:aws:iam::xxx:user/sms-testing is not authorized to perform: SNS:Publish on resource: +999999999
请注意,+999999999
是传递给 .withPhoneNumber()
调用的 phone 号码,因此 aws api 抱怨我的 IAM 用户没有必要的权限 SNS:Publish
向具有 phone 号码的资源发送消息。
我的问题:如何创建能够通过 java SDK 发送短信通知的 IAM 用户?目前,我似乎必须为每个发送消息的号码创建一个权限,这看起来很奇怪且难以维护。
该错误告诉您您的 IAM 用户 "sms-testing" 没有向 SNS (SNS:Publish) 发布该资源的权限。您的 IAM 用户可能根本没有 SNS:Publish 权限,这意味着您无法发布任何内容。如果是这种情况,您只需将以下 IAM 策略添加到您的用户或将该策略添加到您的 IAM 用户所属的 IAM 组。
下面的 link 应该会将您带到 IAM 控制台以编辑 "sms-testing" 用户的权限。下面还有一个示例策略,允许 IAM 用户将任何内容发布到 SNS(SMS、主题、端点等)。
如果您想稍微锁定权限,您可以修改 "Resource" 并指定特定的 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 资源,您可以做一些 hack,"Deny" 所有 SNS 发布到主题和平台应用程序,然后允许发布到其余部分,只留下 SMS(目前).
这是一个示例策略,仅允许发布到 SMS 并拒绝发布到主题和应用程序(推送通知):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"sns:Publish"
],
"Resource": "arn:aws:sns:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"Resource": "*"
}
]
}
希望对您有所帮助。
-丹尼斯