我的账户中有一个 AWS IAM 用户(我们称之为 originAccount),该用户有权访问另一个账户 (targetAccount),并且我正在尝试使用 Windows 计算机上的 originAccount 凭证克隆目标账户中存在的 CodeCommit 存储库。
我可以登录并将角色切换到目标帐户,这就是我最初创建存储库的方式。除了计费之外,我拥有对目标帐户的完全访问权限。我确实在我的 IAM 用户上启用了 MFA。我尝试暂时关闭它,但没有帮助。但是,在关闭 MFA 的情况下,我可以成功地执行aws s3 ls
目标帐户而不会出错。
SSH和HTTPS都不起作用。我可以使用静态凭据克隆它作为测试,但从长远来看这是不可接受的。我很惊讶这些东西在 AWS 上的难度......
我在 originAccount 中的用户有此策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::000000000000:role/Administrator"
]
}
]
}
管理员角色有权访问所有内容。 目标帐户具有以下信任关系:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:user/MyUser"
},
"Action": "sts:AssumeRole",
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
}
}
]
}
我尝试删除MFA位; 没有帮助。我什至在我的用户帐户上禁用了 MFA,这也无济于事。
我的.awscredentials
文件包含以下行:
[default]
aws_access_key_id = [originAccountKey]
aws_secret_access_key = [originAccountSecret]
[targetAccount]
aws_access_key_id = [originAccountKey]
aws_secret_access_key = [originAccountSecret]
我正在使用环境变量来设置要使用的配置文件,例如:
set AWS_DEFAULT_PROFILE=targetAccount
我的.gitconfig
包含:
[credential "https://git-codecommit.us-east-1.amazonaws.com"]
helper = !'C:\path\to\git-credential-AWSSV4.exe' --profile='targetAccount'
UseHttpPath = true
最初使用的是默认配置文件,但这也不起作用。
问题:
- 这可能吗?我做错了什么?
- SSH 和 HTTPS 都可以用于跨账户访问吗?这些文档令人困惑,但似乎表明只有带有凭据帮助程序的 HTTPS 才能工作(据称)。
- 这是否适用于多重身份验证?如果不是,是否可以仅对代码提交关闭?
不幸的是,我找到的其他问题都没有适合我的答案......
我卸载并重新安装了适用于 Windows 的 Git,只是为了确保没有安装凭据管理器(我不记得了),但它仍然不起作用,repository '...' not found
说。不过,我可以通过HTTPS克隆原始帐户中的存储库。
凭据帮助程序是使用临时会话凭据(如从 AssumeRole 获取的凭据)向 CodeCommit 进行身份验证的唯一方法。SSH 将不起作用,因为 SSH 身份验证是通过验证上传的公钥来完成的,这不是临时的。
我发现以下模式很容易遵循使用AssumeRole进行身份验证。在.awscredentials
文件中:
[profile target_account]
role_arn = arn:aws:iam::000000000000:role/Administrator
mfa_serial = arn:aws:iam::000000000000:mfa/MFA_DEVICE
source_profile = origin_account
[profile origin_account]
aws_access_key_id = [originAccountKey]
aws_secret_access_key = [originAccountSecret]
这将允许 AWS 客户端工具使用origin_account中的 AssumeRole 从target_account获取临时会话凭证,从而有效地承担target_account管理员的角色。
您的.gitconfig
应指定target_account
配置文件。
如果您使用的是msysgit
,则应尝试升级到 Windows 2.x 版的 Git。凭证帮助程序将发送 : 作为用户名,发送 AWS V4 签名作为密码。会话密钥通常很长,在msysgit
中,curl 会将用户名截断为 256 个字符,其中不包括完整的会话密钥。
我希望这有帮助!