首页 > 解决方案 > IAM 政策允许 SMS 发布但不拒绝所有 SNS

问题描述

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

我找到了一种允许 SMS 发布而不允许任何 SNS 发布的方法: 使用 AmazonSNSClient 发送文本消息时的授权

{

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

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

问题是 SMS 发布没有特定的 arn。

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

错误信息

有没有办法完成这样的政策?

标签: amazon-web-servicesamazon-iamamazon-sns

解决方案


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

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

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

这也允许我在另一个策略中允许具体的 ARN。


推荐阅读