如何在AWS IAM策略中配置规则限制用户仅查看指定EC2实例
策略存在的核心错误
Describe*类操作的权限配置完全错误
EC2的所有ec2:Describe*系列API不支持资源级权限控制,必须指定Resource: "*",你编写的Deny语句中使用的arn:aws:ec2:*:*:DescribeInstances/instance-id是完全无效的ARN格式,这条Deny规则不会产生任何作用。
同时ec2:ResourceTag条件此前对ec2:Describe*类API仅支持全局校验逻辑,不会过滤API返回的结果,只要你放开了ec2:DescribeInstances权限,用户默认就可以看到所有实例,单独在全量EC2操作的Allow语句中加标签条件不会自动筛选返回的实例列表。
- 权限逻辑冲突
你第一条语句直接允许了所有ec2:*操作,即使后续Deny规则生效,也会出现权限覆盖逻辑错误,完全不符合最小权限原则。
- 权限逻辑冲突
正确的实现方案
要实现用户在EC2控制台仅能查看带UserName标签且值为自身用户名的实例,可使用以下修正后的策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeImages", "ec2:DescribeKeyPairs", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeVolumes" ], "Resource": "*", "Condition": { "StringEquals": { "ec2:ResourceTag/UserName": "${aws:username}" } } }, { "Effect": "Allow", "Action": [ "ec2:RunInstances", "ec2:StopInstances", "ec2:StartInstances", "ec2:TerminateInstances" ], "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:volume/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/UserName": "${aws:username}" } } }, { "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringEquals": { "ec2:CreateAction": "RunInstances" } } } ] }
注意:配置完成后需要给对应EC2实例添加上
UserName标签,标签值和对应用户的IAM用户名完全一致,权限才会生效。
内容的提问来源于stack exchange,提问作者Jason Ching Yuk
相关产品推荐
相关产品推荐

