如何配置AWS IAM权限实现“拒绝通配符X匹配的所有操作,仅排除Y”
AWS IAM权限规则排除指定操作的解决方案
可行解决方案
- 方案1:结合Deny语句加Condition条件实现排除
在原有Denyec2:*Vpn*的语句中新增Condition规则,仅当请求的操作不是要放行的ec2:DescribeVpnGateways时才触发拒绝,即可绕开显式拒绝优先级高于允许规则的限制,示例语句片段如下:
该方案无需改动原有Allow规则,也不用拆分现有通配符拒绝规则,适合仅需要排除少量操作的场景。{ "Effect": "Deny", "Action": "ec2:*Vpn*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:RequestedAction": "ec2:DescribeVpnGateways" } } } - 方案2:拆分粗粒度通配符拒绝规则
把原来过于宽泛的ec2:*Vpn*拆分为多个更细粒度的拒绝条目,明确列出所有需要限制的Vpn相关操作,刚好避开要放行的ec2:DescribeVpnGateways即可,例如:
该方案逻辑更直观,后续新增需要限制的操作时也更容易维护,适合需要排除的操作较多的场景。{ "Effect": "Deny", "Action": [ "ec2:Create*Vpn*", "ec2:Delete*Vpn*", "ec2:Modify*Vpn*", "ec2:Accept*Vpn*", "ec2:Attach*Vpn*", "ec2:Detach*Vpn*" ], "Resource": "*" }
权限体系架构建议
从长期运维的安全性和可维护性角度,更建议重构为最小权限先行的模式:即预先仅给用户分配经核准的必要权限,而非先授予全量权限再通过拒绝语句限制。原因如下:
- 显式拒绝的优先级高于所有允许规则,一旦规则配置疏漏很容易导致正常操作被拦截,或是危险操作被漏过
- 全量Allow加Deny的模式会随着AWS服务更新迭代持续出现新的操作需要调整规则,运维成本会越来越高
- 最小权限模式下权限边界更清晰,审计、排查权限问题的效率也更高
如果当前业务场景确实需要给用户开放尽可能多的EC2操作权限,也可以保留现有模式,但建议尽量缩小通配符的使用范围,优先用细粒度的Action列表代替宽泛的通配符,降低规则冲突概率。
内容的提问来源于stack exchange,提问作者Godot-Dev
相关产品推荐
相关产品推荐

