【问题标题】:IAM policy allowing SMS publishing but not denying all SNSIAM 政策允许 SMS 发布但不拒绝所有 SNS
【发布时间】:2018-12-07 18:23:01
【问题描述】:

我想设置 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 发布没有特定的 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"}}
        }
    ]
}

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 你有没有发现这是否允许任何其他不需要的资源?我也试图将短信发布到直接号码,但只允许这样做。是否有一种方法可以定义一个主题,让您可以发布到任意数量,然后您可以在策略中设置一个arn,而不是让策略保持开放状态?
    猜你喜欢
    • 1970-01-01
    • 2020-12-07
    • 2018-01-03
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多