我想设置IAM策略,以允许用户发布到SNS以发送SMS并发布到特定的SNS arn。
我找到了一种允许SMS发布而不允许任何SNS发布的方法: Authorization when sending a text message using AmazonSNSClient
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"sns:Publish"
],
"Resource": "arn:aws:sns:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"Resource": "*"
}
]
}
但是此政策明确拒绝所有其他SNS发布,因此我无法添加允许特定SNS的政策。
问题是SMS发布没有特定的网址。
因此,我正在寻找条件,以找到一种方法来限制允许仅发布SMS。但是特定的SMS参数(PhoneNumber cf https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SNS.html#publish-property)不能在以下条件下过滤:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "*",
"Condition": {"Null":{"PhoneNumber":"false"}}
}
]
}
有没有办法实现这样的政策?
答案 0 :(得分:1)
实际上,我可以通过使用NotResource
JSON策略元素(spec)的允许方式找到一种方法。我使用此属性来匹配没有ARN的资源:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"NotResource": "arn:aws:sns:*:*:*"
}
]
}
有了这个技巧,我可以允许所有的sns发布都没有ARN(但是我不知道SMS之外是否还有其他服务...)。
这也允许我在其他政策中允许使用特定的ARN。
答案 1 :(得分:0)
我特别允许您也要发布的SNS主题,并依靠默认拒绝。
有SNS Topics和Subscribers。
您想授予AWS用户发布到用户(订户)与他们的SMS一起订阅的主题的权限。
https://docs.aws.amazon.com/sns/latest/dg/SNSMobilePush.html
Publish 将消息发送到Amazon SNS主题或将文本消息(SMS消息)直接发送到电话号码。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"Resource": "arn:aws:sns:us-west-2:111122223333:SMS_TOPIC"
}
]
}
如果策略不直接不适用于请求,则该策略将导致拒绝。
显式拒绝将覆盖任何允许。
https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html