添加标签条件后EC2实例启动IAM策略报错排查
解决添加标签条件后EC2 RunInstances及密钥对资源的IAM策略报错问题
问题核心原因
当你给ec2:RunInstances操作添加aws:RequestTag/Key:Value条件时,报错的本质是密钥对资源不支持请求标签(aws:RequestTag)。IAM策略的条件会作用于语句中指定的所有资源,而密钥对本身无法携带请求标签,因此即使你把密钥对正确加入资源列表,条件检查也会失败,导致整个语句的授权被拒绝。
解决方案:拆分策略语句
将支持标签的资源与不支持标签的资源(密钥对)分开,仅在包含支持标签资源的语句中添加标签条件:
- 第一组语句:针对实例、AMI、子网、安全组、EBS卷等支持标签的资源,添加标签条件,强制必须携带指定键值对标签。
- 第二组语句:仅针对密钥对资源,不添加标签条件,确保密钥对的授权正常。
示例策略代码
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:us-east-1::image/ami-1234567890abcdef0", "arn:aws:ec2:us-east-1:123456789012:subnet/subnet-0123456789abcdef0", "arn:aws:ec2:us-east-1:123456789012:security-group/sg-0123456789abcdef0", "arn:aws:ec2:us-east-1:123456789012:instance/*", "arn:aws:ec2:us-east-1:123456789012:volume/*" ], "Condition": { "StringEquals": { "aws:RequestTag/Environment": "Production", "aws:RequestTag/Project": "MyApp" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["Environment", "Project"] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:us-east-1:123456789012:key-pair/MyKeyPair" } ] }
补充说明
- 替换示例中的区域、账号ID、资源ID/名称为你实际的信息,确保ARN格式正确。
ForAllValues:StringEquals用于强制请求中只包含指定的标签键,避免额外标签(可选,可根据需求调整)。- 拆分语句后,IAM会分别检查两组资源的授权,密钥对的语句不受标签条件影响,因此不会再触发报错。
内容的提问来源于stack exchange,提问作者Lior Golan
相关产品推荐
相关产品推荐

