如何让单个ARN绕过AWS SCP拒绝策略?问题排查求助
问题分析
你当前的SCP策略逻辑是拒绝所有主体执行指定网络操作,仅豁免特定ARN的主体,但实际测试中该ARN仍被拒绝。核心可能出在以下几个方面:
1. Assumed-Role ARN的会话名动态性
当用户通过IAM角色登录时,aws:PrincipalArn的格式为arn:aws:sts::ACCOUNT-ID:assumed-role/ROLE-NAME/SESSION-NAME,其中SESSION-NAME并非固定值——不同登录客户端(如AWS控制台、CLI、SDK)生成的会话名可能不同,若CloudTrail中记录的ARN会话名与策略中写的companyuser@company.com不一致,会触发ArnNotLike条件,导致拒绝。
2. IAM角色权限缺失
SCP仅作为组织层面的权限边界,它只限制哪些操作被允许/拒绝,但账户内的IAM角色必须明确授予对应操作的权限。如果myawsrole角色本身没有允许ec2:CreateVpc等操作的IAM策略,即使SCP不拒绝,IAM的隐式拒绝仍会阻止操作。
3. 条件运算符使用场景不匹配
ArnNotLike用于带通配符的模糊匹配,若你需要精确豁免固定ARN,使用ArnNotEquals更严谨,避免通配符逻辑带来的意外匹配。
修复步骤
1. 确认CloudTrail中的完整ARN
查看CloudTrail日志里对应操作的userIdentity.arn字段,确认是否与策略中的ARN完全一致(包括大小写、会话名):
- 如果会话名是动态变化的,改用通配符匹配该角色下的所有会话;
- 如果会话名固定,确保策略中的ARN与日志完全一致。
2. 修正SCP策略
场景A:允许该角色下所有会话(忽略动态会话名)
{ "Version": "2012-10-17", "Statement": [ { "Sid": "MyCompanyNetworkPolicy", "Effect": "Deny", "Action": [ "ec2:CreateInternetGateway", "ec2:AttachInternetGateway", "ec2:CreateTransitGateway", "ec2:CreateTransitGatewayPeeringAttachment", "ec2:CreateTransitGatewayRoute", "ec2:CreateTransitGatewayRouteTable", "ec2:CreateTransitGatewayVpcAttachment", "ec2:CreateVpc", "ec2:CreateVpcPeeringConnection", "ec2:CreateVpnConnection", "ec2:CreateVpnConnectionRoute", "ec2:CreateVpnGateway", "ec2:DeleteDhcpOptions", "ec2:DeleteRoute", "ec2:DeleteRouteTable", "ec2:DeleteSubnet", "ec2:DeleteTransitGateway", "ec2:DeleteTransitGatewayRoute", "ec2:DeleteTransitGatewayRouteTable", "ec2:DeleteVpc", "ec2:ModifyTransitGateway", "ec2:ModifyTransitGatewayVpcAttachment", "ec2:ModifyVpcPeeringConnectionOptions", "ec2:ModifyVpcTenancy", "ec2:ModifyVpnConnection", "ec2:RejectTransitGatewayPeeringAttachment", "ec2:RejectTransitGatewayVpcAttachment" ], "Resource": "*", "Condition": { "ArnNotLike": { "aws:PrincipalArn": [ "arn:aws:sts::1111111:assumed-role/myawsrole/*" ] } } } ] }
场景B:精确豁免固定ARN
将条件运算符改为ArnNotEquals:
"Condition": { "ArnNotEquals": { "aws:PrincipalArn": [ "arn:aws:sts::1111111:assumed-role/myawsrole/companyuser@company.com" ] } }
3. 补充IAM角色权限
确保myawsrole角色的IAM策略包含允许目标操作的语句,示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateVpc", "ec2:CreateInternetGateway", // 其他需要允许的操作 ], "Resource": "*" } ] }
4. 验证SCP应用范围
确认该SCP已正确关联到目标账户或其所在OU,且没有其他优先级更高的冲突SCP(如全局拒绝策略)。
内容的提问来源于stack exchange,提问作者Sarprit Samra

