逻辑或政策条件 AWS

Logical or in policy condition AWS

我想要一个逻辑或之间的 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"
            }
        }
    }

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

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

希望这个例子很清楚

一个 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"
        }
    }
}

有了这个,它将评估实例类型是否是 t1.microt2.micro,或者如果区域是 us-east-1 则拒绝该操作。

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