IAM策略允许SMS发布,但不能拒绝所有SNS

时间:2018-06-28 15:35:59

标签: amazon-web-services amazon-iam amazon-sns

我想设置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"}}
        }
    ]
}

error message

有没有办法实现这样的政策?

2 个答案:

答案 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 TopicsSubscribers

您想授予AWS用户发布到用户(订户)与他们的SMS一起订阅的主题的权限。

https://docs.aws.amazon.com/sns/latest/dg/SNSMobilePush.html

  

Publish   将消息发送到Amazon SNS主题将文本消息(SMS消息)直接发送到电话号码。

SNS topics do have an ARN

{
    "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

Determining Whether a Request is Allowed or Denied