如何通过AWS SCP仅允许特定OpenID Connect提供商?SCP条件失效排查
AWS SCP策略排查:允许特定OIDC提供商但条件规则未生效
我需要限制AWS账户添加新身份提供商的权限,同时通过Bitbucket Pipelines借助OpenID Connect(OIDC)安全部署应用。我创建了一条SCP策略,拒绝IAM用户的创建/删除操作以及身份提供商的增删操作,但设置了例外规则:允许所有账户创建/删除特定URL的OIDC提供商。目前这条SCP的条件规则未生效,请提供排查思路。
对应的SCP策略代码:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Deny", "Action": [ "iam:CreateGroup", "iam:CreateLoginProfile", "iam:CreateOpenIDConnectProvider", "iam:CreateSAMLProvider", "iam:CreateUser", "iam:DeleteAccountPasswordPolicy", "iam:DeleteSAMLProvider", "iam:UpdateSAMLProvider" ], "Resource": [ "*" ], "Condition": { "StringNotEquals": { "iam:OpenIDConnectProviderUrl": [ "https://api.bitbucket.org/2.0/workspaces/my-workspace-name/pipelines-config/identity/oidc" ] } } } ] }
排查思路
- 拆分操作与条件的关联:
iam:OpenIDConnectProviderUrl条件键仅对iam:CreateOpenIDConnectProvider和iam:UpdateOpenIDConnectProvider生效,当前策略中混排了不支持该条件的操作(如iam:CreateUser、iam:CreateGroup等),这些操作会直接被拒绝,不受条件限制。建议将两类操作拆分到独立的Statement:- 一个Statement无条件拒绝不需要例外的IAM操作(创建/删除用户、组等);
- 另一个Statement仅针对OIDC提供商的创建/更新操作,设置条件拒绝非指定URL的请求。
- 校验OIDC URL的精确性:确认Bitbucket OIDC URL的大小写、路径参数(如
my-workspace-name)完全匹配实际值,AWS条件匹配为精确匹配,任何细微差异都会导致条件不触发。 - 确认SCP的应用范围与优先级:检查SCP是否已正确关联到目标OU或账户,且未被其他优先级更高的SCP(如允许同类操作的SCP)覆盖。
- 单独测试权限效果:分别测试以下场景验证策略逻辑:
- 使用指定的Bitbucket OIDC URL尝试创建提供商,确认是否允许;
- 使用其他任意URL尝试创建OIDC提供商,确认是否被拒绝;
- 尝试创建IAM用户,确认是否被拒绝。
- 查看CloudTrail日志定位问题:在CloudTrail中查找对应操作的日志,检查请求参数中的
url字段是否与策略一致,同时查看errorCode和errorMessage字段,获取明确的拒绝或生效失败原因。
内容的提问来源于stack exchange,提问作者kapale
相关产品推荐
相关产品推荐

