配置IAM策略限制EC2访问后,用户无法查看任何EC2实例,求排查
IAM策略问题分析:为什么用户看不到任何EC2实例?
你的策略确实存在问题,导致iam-test-user在EC2控制台看不到任何实例,根源在于对AWS控制台操作的权限逻辑理解不到位,下面给你拆解清楚:
问题出在哪?
AWS EC2控制台在初始化加载时,会自动执行一堆列表查询操作,比如ec2:DescribeInstances、ec2:DescribeRegions、ec2:DescribeVpcs等等。这些操作属于「全局查询类」,没办法通过资源标签做权限限制——因为标签是绑定在单个实例上的,而列表操作是要拉取全量资源的元数据,根本不会针对单个实例检查标签。
你当前的策略只允许了「带Purpose:Test标签的EC2资源上的所有操作」,但完全没给控制台必需的列表查询权限,所以用户连实例列表都加载不出来,自然看不到任何实例。
修正后的策略方案
我们需要把权限拆成两部分,既满足控制台加载需求,又能限制用户只能操作测试实例:
{ "Version": "2012-10-17", "Statement": [ // 第一部分:允许控制台必需的所有查询类操作 { "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" }, // 第二部分:限制所有实例操作仅能在带Test标签的实例上执行 { "Effect": "Allow", "Action": "ec2:*", "Resource": "*", "Condition": { "StringEquals": { "ec2:ResourceTag/Purpose": "Test" } } } ] }
额外说明
- 关于实例可见性:添加
ec2:Describe*权限后,用户会看到所有EC2实例的列表,但只能对带Purpose:Test标签的实例执行操作(比如启动、停止、查看详情),无权限的实例点击后会提示权限不足。如果想让用户只看到测试实例,仅靠IAM策略做不到,需要结合EC2资源组或者AWS Organizations的SCP来实现。 - 最小权限原则:如果不想给所有
ec2:Describe*权限,也可以列出具体需要的查询操作,比如ec2:DescribeInstances、ec2:DescribeKeyPairs等,但ec2:Describe*是最省心的方式,且这类查询操作本身没有修改权限,风险很低。
内容的提问来源于stack exchange,提问作者keisuke
相关产品推荐
相关产品推荐

