基于SSO用户名匹配实现CodeCommit SSH密钥上传的IAM权限策略需求
基于SSO用户名匹配实现CodeCommit SSH密钥上传的IAM权限策略需求
我完全懂你的烦恼——用SSO统一管控AWS登录,用户都是通过Assume Role访问的,没有独立的IAM用户,但CodeCommit的SSH密钥又必须绑定到IAM用户上,所以不得不给每个开发者建个同名的IAM账号,既怕他们用这个账号绕开SSO,又得让他们能自己上传SSH密钥到对应的IAM用户,确实有点两难。
别担心,你可以通过带条件判断的IAM策略来解决这个问题,核心就是让通过SSO登录的用户,只能对和自己用户名完全匹配的IAM用户执行SSH密钥上传操作。
具体策略示例
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:UploadSSHPublicKey", "Resource": "arn:aws:iam::12345:user/${aws:username}", "Condition": { "StringEquals": { "aws:username": "${aws:ResourceName}" } } } ] }
策略关键点解释
Resource里的${aws:username}会自动替换为当前SSO用户的用户名(比如你例子里的usernameA),确保用户只能操作自己同名的IAM用户资源Condition中的${aws:ResourceName}就是IAM用户的用户名,这个条件会强制验证用户操作的IAM用户名和自己的SSO用户名完全一致,避免越权- 把这个策略附加到你的SSO对应角色
Developers上,所有通过SSO assume这个角色的用户,就能给自己的IAM用户上传SSH密钥了
额外优化建议
- 如果需要让开发者能查看或删除自己的SSH密钥,可以把Action扩展为:
["iam:UploadSSHPublicKey", "iam:ListSSHPublicKeys", "iam:DeleteSSHPublicKey"] - 一定要保证IAM用户名和SSO用户名完全一致(包括大小写),因为IAM用户名是区分大小写的
- 绝对不要给这个策略添加更宽泛的权限(比如允许操作所有IAM用户),避免破坏你的SSO安全管控
你之前遇到的错误就是因为当前SSO角色没有对应的权限:
User: arn:sts::12345:assumed-role/Developers/usernameA is not authorized to perform: iam:UploadSSHPublicKey on resource: user usernameA because no identity-based policy allows the iam:UploadSSHPublicKey action
备注:内容来源于stack exchange,提问作者Malvineous
相关产品推荐
相关产品推荐

