逻辑或策略条件 AWS

Mic*_*vel 7 scp amazon-web-services amazon-iam

我想要在 AWS 策略之间有一个逻辑或,然后需要将其附加到 SCP。动机是添加一项在满足两个条件之一的情况下适用的政策。

{
        "sid": "OnlyT1T2Micro",
        "Effect": "Deny",
        "Action": ["ec2:RunInstances"],
        "Resource": ["arn:aws:ec2:us-east-1:accountid:instance/*"],
        "Condition": {
            "StringEquals": {
                "ec2:InstanceType": ["t1.micro","t2.micro"]
            },
            "StringEquals": {
                "ec2:Region": "us-east-1"
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果类型是 t1 或 t2 micro 之一或区域是 us-east-1,我想拒绝 Ec2 运行实例 API。但在这个片段中,它是条件之间的逻辑“和”,这意味着该策略将适用于(t1.micro 或 t2.micro)和(us-east-1 区域)的情况,我希望添加“或者”

为了将文本保存在SCP中(由于限制),我正在寻找用“或”在1个策略2个条件中一起收缩,以防有一个选项

希望这个例子很清楚

Chr*_*ams 6

一个 SCP 可以包含多个策略,目前您的单个策略将要求满足所有条件(以及资源​​模式)才能拒绝。

如果您尝试拒绝其他 AWS 区域中的这些实例类的访问,您应该为每个条件创建单独的语句,同时删除资源模式。

也许像下面这样的东西更合适。

{
    "sid": "OnlyT1T2Micro",
    "Effect": "Deny",
    "Action": ["ec2:RunInstances"],
    "Resource": ["*"],
    "Condition": {
        "StringEquals": {
            "ec2:InstanceType": ["t1.micro","t2.micro"]
        }
    }
},
{
    "sid": "NotInUsEast1",
    "Effect": "Deny",
    "Action": ["ec2:RunInstances"],
    "Resource": ["*"],
    "Condition": {
        "StringEquals": {
            "ec2:Region": "us-east-1"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,它将评估实例类型是否为 at1.microt2.micro,或者该区域是否us-east-1拒绝该操作。

唯一的OR条件是每个语句之间,如果您想减少语句的大小,请尝试将相似的语句分组。例如,在同一语句中禁用常见操作,或者如果您想要拒绝多个区域,请将它们全部添加到同一语句中,而不是每个语句中。