使用AWS CLI创建IAM默认策略版本遇AccessDenied错误求助
先看你遇到的具体错误提示:
An error occurred (AccessDenied) when calling the CreatePolicyVersion operation: User: arn:aws:iam::150083650231:user/erwim-api is not authorized to perform: iam:CreatePolicyVersion on resource: policy arn:aws:iam::150083650231:policy/erwim-api
虽然你的策略里已经包含了iam:CreatePolicyVersion且Resource设为*,但还是触发权限拒绝,大概率是以下几个细节没处理到位,按顺序排查:
1. 先确认执行命令的IP是否符合策略的SourceIp限制
你的所有Allow语句都加了ForAnyValue:IpAddress的Condition,只允许从10.10.10.73/32、10.10.10.153/32、160.180.22.22/32这三个IP发起的请求获得授权。
- 先检查你执行AWS CLI的机器IP:公网IP可以用
curl ifconfig.me查看,内网IP直接看系统网络配置 - 如果当前IP不在列表里,要么把IP添加到Condition的SourceIp数组,要么暂时移除这个Condition做测试(测试通过后再补回限制)
2. 验证策略是否正确关联到目标用户erwim-api
有时候容易犯低级错误:策略创建了,但没通过Attach操作关联到目标用户。
- 执行命令查看用户已关联的策略:
aws iam list-attached-user-policies --user-name erwim-api - 如果看不到你配置的这个策略,执行关联命令补全:
aws iam attach-user-policy --user-name erwim-api --policy-arn <你的策略ARN>
3. 检查用户是否被设置了「权限边界(Permission Boundary)」
如果用户被配置了Permission Boundary,即使你给了Allow策略,边界也会限制用户能执行的操作范围。
- 查看用户的权限边界配置:
aws iam get-user --user-name erwim-api - 输出里如果有
PermissionsBoundary字段,检查这个边界策略是否允许iam:CreatePolicyVersion操作,或者在测试阶段暂时移除边界(如果业务允许的话)
4. 排查AWS组织的SCP(服务控制策略)限制
如果你的账号属于AWS组织,组织级别的SCP可能会覆盖IAM用户的权限配置。
- 登录AWS Organizations控制台,查看当前账号对应的SCP规则,确认是否存在拒绝
iam:CreatePolicyVersion的语句,或者是否缺少允许该操作的配置
5. 确认策略的生效版本和时间
新创建的IAM策略可能需要1-2分钟才会生效,或者你可能关联了旧版本的策略。
- 查看策略的默认版本:
aws iam get-policy --policy-arn arn:aws:iam::150083650231:policy/erwim-api - 确认关联到用户的是最新版本的策略,如果不是,更新策略的默认版本
额外验证:用管理员权限快速定位问题
如果以上排查都没解决,可以创建一个临时的管理员策略关联到用户,测试是否能执行命令:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] }
如果用这个策略能成功执行,说明之前的策略确实存在某个未注意到的限制;如果还是失败,那可能是账号级别的全局限制(比如组织SCP或AWS侧的特殊配置)
内容的提问来源于stack exchange,提问作者Erwin

