AWS IAM权限提升防护:如何阻止用户/角色通过创建策略升级权限?
如何阻止IAM角色/用户创建包含特定权限的策略以防止权限提升
这个问题刚好戳中了IAM权限管控里的一个常见风险点——防止权限提升,而解决它的最佳方案就是利用IAM的**权限边界(Permission Boundary)**功能。下面我一步步给你拆解怎么做:
核心原理:权限边界的作用
权限边界是给IAM实体(用户/角色)设置的最大权限上限。哪怕这个实体拥有创建策略、角色的权限,它创建的任何策略都不能突破这个边界;同时,实体自身的权限也会被边界限制,无法执行边界里拒绝的操作。
步骤1:创建权限边界策略
你需要编写一个策略,实现两个核心目标:
- 保留该角色/用户原本的创建策略、角色的权限;
- 拒绝它使用
s3:PutObject权限,同时禁止它创建/修改包含该权限的策略。
这里是一个示例策略(直接复制到IAM控制台创建即可):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:CreatePolicy", "iam:CreateRole", "iam:AttachRolePolicy", "iam:PutRolePolicy" ], "Resource": "*" }, { "Effect": "Deny", "Action": "s3:PutObject", "Resource": "*" }, { "Effect": "Deny", "Action": [ "iam:CreatePolicy", "iam:PutPolicyVersion", "iam:PutRolePolicy" ], "Resource": "*", "Condition": { "StringLike": { "iam:PolicyDocument": "*s3:PutObject*" } } } ] }
策略细节解释:
- 第一部分:允许角色/用户执行创建策略、角色、附加策略到角色等原本的操作;
- 第二部分:直接拒绝该实体自身使用
s3:PutObject权限,从根源上限制它的操作; - 第三部分:通过
iam:PolicyDocument条件判断,拒绝它创建或修改任何包含s3:PutObject的策略(包括托管策略和内联策略)。
步骤2:将权限边界关联到目标角色/用户
- 登录IAM控制台,找到需要限制的用户或角色;
- 进入该实体的详情页,切换到权限边界标签;
- 点击编辑权限边界,选择你刚才创建的权限边界策略,保存即可。
步骤3:验证效果
完成设置后,你可以做两个测试:
- 尝试用该角色创建一个包含
s3:PutObject的策略,会收到权限拒绝的错误; - 尝试执行
s3:PutObject操作(比如上传文件到S3),同样会被拒绝; - 创建不包含
s3:PutObject的其他策略,则可以正常执行。
额外注意事项
- 权限边界是叠加限制,它和实体的直接权限、附加策略共同作用,取最严格的限制;
- 如果你需要禁止多个权限,可以在
Condition的iam:PolicyDocument里添加多个字符串匹配,比如"iam:PolicyDocument": ["*s3:PutObject*", "*ec2:RunInstances*"]; - 别忘了限制
PutPolicyVersion和PutRolePolicy,否则用户可能通过修改现有策略来添加敏感权限。
内容的提问来源于stack exchange,提问作者user6634768
相关产品推荐
相关产品推荐

