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

IAM policy allowing SMS publishing but not denying all SNS

我想设置 IAM 策略以允许用户发布到 SNS 以发送 SMS 并发布到特定的 SNS arn。

我找到了一种允许 SMS 发布但不允许任何 SNS 发布的方法:

{

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

但此策略明确拒绝所有其他 SNS 发布,因此我无法添加允许特定 SNS 的策略。

问题是短信发布没有具体的arn。

所以我正在研究条件以找到一种方法来限制只允许发布 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"}}
        }
    ]
}

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

实际上,为了做到这一点,我找到了一种使用 NotResource JSON 策略元素 (spec) 允许的方法。我使用此 属性 来匹配没有 ARN 的资源:

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

通过这个技巧,我可以允许所有没有 ARN 的 sns 发布(但我不知道除了 SMS 之外是否还有其他服务...)。

这也允许我在另一个策略中允许特定的 ARN。