You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 10:24:32