如何解决AWS IAM无MFA只读策略字符超限问题(无需提工单)
解决IAM策略字符数超限的替代方案
以下是几种无需提交支持工单的解决办法,可实现你要的MFA强制逻辑:
1. 拆分策略为两个独立权限
将「MFA验证后管理员访问」和「未验证时只读」拆分为两个独立策略,避免在一个策略里复制大量只读权限内容:
- 自定义管理员策略:仅包含管理员权限及MFA验证条件,字符数极少:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*", "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } } ] } - 直接附加托管只读策略:给用户附加AWS官方托管的
AmazonReadOnlyAccess策略,无需复制其内容。由于IAM权限是累加的,当用户未验证MFA时,管理员策略因条件不生效,仅只读策略生效;验证MFA后,管理员策略生效,效果等同于拥有管理员权限。
2. 用通配符精简只读权限
不复制官方只读策略的所有Action,而是用通配符匹配绝大多数只读操作,大幅减少策略字符数:
将你的自定义策略修改为以下结构,合并MFA条件逻辑:
{ "Version": "2012-10-17", "Statement": [ // MFA验证后授予管理员权限 { "Effect": "Allow", "Action": "*", "Resource": "*", "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } }, // 未验证MFA时授予只读权限(通配符版) { "Effect": "Allow", "Action": [ "*:List*", "*:Describe*", "*:Get*" ], "Resource": "*", "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "false" } } } ] }
这种方式基本覆盖AWS所有服务的只读操作,个别特殊服务若有非只读的List/Describe/Get类Action,可额外添加Deny语句进行排除,整体字符数远低于限制。
3. 利用权限边界控制最大权限
将AmazonReadOnlyAccess设为用户的权限边界,再附加带MFA条件的管理员策略:
- 给用户设置权限边界为
arn:aws:iam::aws:policy/AmazonReadOnlyAccess,这会限制用户的最大权限为只读; - 附加自定义管理员策略(同方法1中的策略),当用户验证MFA后,管理员策略的权限会突破权限边界(权限边界仅限制未被显式允许的权限),从而获得管理员访问权限;未验证MFA时,仅能行使权限边界内的只读权限。
内容的提问来源于stack exchange,提问作者Cloud Wanderer
相关产品推荐
相关产品推荐

