如何在 S3 存储桶策略中执行 OR 条件?

Mar*_*bak 5 json amazon-web-services amazon-iam

我正在研究 S3 存储桶策略。这个想法是明确拒绝对账户内所有 IAM 用户的访问,明确授予的用户除外。

我找到了一篇博客文章,解释了如何限制对特定用户的访问。它运作良好。但是,我想扩展语法以包含将允许访问的第二个 IAM 用户。这实际上是一个 OR 条件。

但是,我对 JSON 很陌生,我不确定如何去做。

这是用于限制对单个用户的访问的策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::my-bucket",
                "arn:aws:s3:::my-bucket/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:userId": [
                        "AIDA<obfuscated id>:*",
                        "AIDA<obfuscated id>",
                        "111111111111"
                    ]
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我编辑上面的 JSON 以允许 OR 条件,我可以在其中指定允许访问的附加用户 ID?

提前感谢!

Mar*_*bak 5

好吧,我明白了。

首先,我尝试StringgNotLike向 中添加第二个子句Condition,但这不起作用。

经过更多阅读后,我意识到 Condition 子句接受多个键/值对。事实上,我在问题中展示的原始政策已经做到了这一点。我只需要向已有的数组添加更多值。

有效的策略如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::my-private-bucket",
                "arn:aws:s3:::my-private-bucket/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:userId": [
                        "AIDA<obfuscated-id-1>:*",
                        "AIDA<obfuscated-id-1>",
                        "AIDA<obfuscated-id-2>:*",
                        "AIDA<obfuscated-id-2>",
                        "111111111111"
                    ]
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

当我意识到键已经指定了一个值数组时,我只需将第二个用户 ID 添加到该数组中,效果很好。