我正在尝试编写一个 IAM 策略,该策略仅在安全组是两种类型之一时才允许 AWS 用户启动实例。因为没有安全组条件密钥,所以我选择使用条件语句,这样除非安全组属于这两个类别中的任何一个,否则EC2 实例无法启动/运行。我在下面的策略中引用这些批准的安全组的方式是通过它们的标签。
我遇到的问题是,当我有一个确实等于第一个条件的安全组时,可以启动一个实例。但是,当我使用等于“UCSFInbound”(第二个条件)的安全组时,实例不会启动(即使它应该启动)。
我确实有一个单独的策略,它授予对 EC2 资源的更广泛访问权限,但是,据我了解,AWS 首先在“允许”操作之前注册“拒绝”操作。如果这是我遇到问题的原因,那么这两种情况(安全组)都不应该起作用。
IAM 政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Deny",
"Action": [
"ec2:StartInstances",
"ec2:RunInstances"
],
"Resource": [
"arn:aws:ec2:*:*:subnet/*",
"arn:aws:ec2:*:*:key-pair/*",
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ec2:*::snapshot/*",
"arn:aws:ec2:*:*:launch-template/*",
"arn:aws:ec2:*:*:volume/*",
"arn:aws:ec2:*:*:security-group/*",
"arn:aws:ec2:*:*:placement-group/*",
"arn:aws:ec2:*:*:network-interface/*",
"arn:aws:ec2:*::image/*"
],
"Condition": {
"StringNotLike": {
"ec2:ResourceTag/aws:cloudformation:stack-id": "NetworkResourcesStack"
},
"StringNotEquals": {
"ec2:ResourceTag/Name": "UCSFInbound"
}
}
}
]
}