如何禁止用户修改AWS EC2安全组?现有IAM策略未生效求助
无法阻止用户修改EC2安全组规则的排查思路
你遇到的问题是IAM Deny策略未生效,用户仍能修改指定安全组的入站/出站规则,以下是几个关键排查方向:
1. 检查用户是否有其他Allow策略覆盖Deny
IAM权限模型中,显式Deny会覆盖所有Allow,但如果用户被附加了其他包含Allow上述安全组操作的策略(比如AmazonEC2FullAccess、自定义EC2权限策略),且这些策略的资源范围包含你的目标安全组,需要确认是否存在权限冲突:
- 查看用户的所有附加策略(包括用户组策略、权限边界),确认没有其他策略允许
ec2:AuthorizeSecurityGroupIngress等操作作用于这些安全组。 - 用AWS CLI模拟权限测试,验证用户执行目标操作时的实际权限:
查看返回结果中的aws iam simulate-custom-policy \ --policy-input-list '{"Version": "2012-10-17", "Statement": [{"Sid": "PreventUpdateOfCoreSecurityGroups", "Effect": "Deny", "Action": ["ec2:AuthorizeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress", "ec2:ModifySecurityGroupRules"], "Resource": ["arn:aws:ec2:us-west-2:************:security-group/sg-1"]}]}' \ --action-names ec2:AuthorizeSecurityGroupIngress \ --resource-arns arn:aws:ec2:us-west-2:************:security-group/sg-1 \ --principal-arn arn:aws:iam::************:user/[目标用户名]EvalDecision,如果是Allowed,说明存在其他Allow策略干扰权限计算。
2. 确认安全组ARN完全正确
检查策略中列出的安全组ARN是否与实际资源一致:
- 核对ARN中的账户ID、区域、安全组ID,确保没有拼写错误(比如
sg-1是否是目标安全组的真实ID,区域us-west-2是否匹配)。 - 可以通过AWS控制台直接复制安全组的ARN,避免手动输入错误。
3. 补充遗漏的操作权限
除了你列出的操作,控制台的“编辑规则”功能可能调用额外的API,建议将以下操作也加入Deny列表:
"ec2:UpdateSecurityGroupRuleDescriptionsIngress", "ec2:UpdateSecurityGroupRuleDescriptionsEgress"
虽然这些操作不修改规则本身,但如果需要完全限制用户对安全组规则的任何编辑行为,建议补充。
4. 验证Terraform的执行权限隔离
确保Terraform使用的IAM身份(角色/用户)与普通用户完全隔离:
- Terraform的执行身份需要单独拥有
Allow这些安全组操作的权限,且该身份未被普通用户复用。 - 避免普通用户被赋予Terraform执行角色的切换权限(比如
sts:AssumeRole)。
5. 检查组织SCP和权限边界
如果你使用AWS Organizations,确认服务控制策略(SCP)没有允许所有账户用户执行这些安全组操作;同时检查用户的权限边界(Permission Boundary)是否包含允许这些操作的规则,权限边界会限制用户的最大权限范围,如果边界允许,可能导致IAM Deny策略失效。
内容的提问来源于stack exchange,提问作者Jamie Nordmeyer
相关产品推荐
相关产品推荐

