IAM策略配置问题:限制用户查看指定EC2实例时授权失败
解决IAM用户仅查看特定EC2实例的权限报错问题
我之前也碰到过一模一样的情况,你的问题根源出在EC2控制台的工作逻辑上:当你查看实例列表时,控制台不仅仅调用ec2:DescribeInstances,还会触发一系列额外的Describe类API(比如ec2:DescribeVpcs、ec2:DescribeSubnets、ec2:DescribeSecurityGroups等)来加载实例的关联元数据,而这些API大多不支持资源级权限——你原策略里把资源限定为特定实例ID,导致这些操作没有合法的资源可以作用,自然就触发了权限错误,同时策略审核的提示也是因为这些不支持资源级权限的操作和你指定的资源不匹配。
另外,ec2:DescribeInstances本身虽然支持资源级权限,但控制台的列表查询是批量发起的,如果你只允许该操作作用于特定实例ID,控制台的查询请求可能无法正确过滤并返回你有权限的实例,这也会导致加载失败。
修正后的自定义策略
你需要把策略拆分成两部分:一部分针对特定实例授予全量EC2操作权限,另一部分允许必要的Describe类操作作用于所有资源(这样控制台能正常加载元数据,同时只会显示你有权限的实例)。替换后的策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:*", "Resource": [ "arn:aws:ec2:eu-west-1:ACCOUNT_ID:instance/i-INSTANCE_ID1", "arn:aws:ec2:eu-west-1:ACCOUNT_ID:instance/i-INSTANCE_ID2" ] }, { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeKeyPairs", "ec2:DescribeRegions", "ec2:DescribeAvailabilityZones" ], "Resource": "*" } ] }
关键说明
- 第一部分保留了你原本的需求:允许对指定实例执行所有EC2操作。
- 第二部分的Describe操作是控制台加载实例列表必需的基础权限,因为这些操作要么不支持资源级权限,要么需要全局权限才能让控制台正确筛选出你有权限的实例。
- 策略审核的提示可能还会存在,这是正常的——因为第一部分里的某些
ec2:*操作(比如ec2:DescribeVpcs)不支持资源级权限,但这不影响策略的实际生效,只要第二部分单独允许了这些操作即可。
验证步骤
- 把原自定义策略替换为上面的新策略
- 使用该IAM用户重新登录AWS控制台,进入EC2实例列表页面,此时应该能正常看到指定的两个实例,且无法查看其他实例
内容的提问来源于stack exchange,提问作者Bogdan Alexandru Militaru
相关产品推荐
相关产品推荐

