为何IAM用户无AssumeRole权限可切换指定角色?解析权限差异
IAM角色信任策略的权限差异解析
场景回顾
你拥有一个具备完整EC2访问权限的IAM角色,其初始信任策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::AccountA:user/dev" ] }, "Action": "sts:AssumeRole" } ] }
出现两种不同的权限表现:
- 当信任策略主体为具体IAM用户
arn:aws:iam::AccountA:user/dev时,该用户未关联任何AssumeRole权限策略,仍能切换至该角色。 - 当将信任策略中的主体扩展为账号ID时,必须为用户附加显式的
sts:AssumeRole权限才能切换角色。
原因解析
这是AWS IAM权限评估逻辑在两种场景下的差异导致的:
指定具体IAM用户作为信任主体:
这种情况下,信任策略直接明确了"允许这个特定用户执行sts:AssumeRole操作",相当于一次性完成了"主体范围"和"操作权限"的双重授权。用户发起角色切换请求时,AWS仅通过信任策略的校验即可放行,无需额外检查用户自身的权限策略。指定账号ID作为信任主体:
当信任策略开放给整个账号时,它只完成了"允许该账号内的实体访问角色"的范围性授权,但无法确定账号内具体哪个用户有权执行sts:AssumeRole。此时就需要用户自身的权限策略来补充明确授权——只有当用户的权限策略允许其调用sts:AssumeRole,同时信任策略允许该用户所在账号,请求才会通过校验。
简言之,精准到个体的信任策略自带操作权限授权;范围性的账号级信任策略,必须搭配用户自身的权限策略才能完成完整的权限校验。
内容的提问来源于stack exchange,提问作者Mann564
相关产品推荐
相关产品推荐

