我的帐户中有一个AWS IAM用户(我们称之为originAccount)可以访问另一个帐户(targetAccount),我正在尝试使用我的Windows机器上的originAccount凭据克隆targetAccount中存在的CodeCommit存储库。
我可以登录并将角色切换到targetAccount就好了,这就是我首先创建存储库的方式。除了结算,我可以完全访问targetAccount。我在IAM用户上启用了MFA。我试过暂时关闭它,但没有帮助。但是,在MFA关闭的情况下,我可以成功aws s3 ls
成功地执行targetAccount。
SSH和HTTPS都不起作用。我可以使用静态凭据克隆它作为测试,但这是长期不可接受的。我很惊讶这个东西在AWS上的难度......
originAccount中的我的用户有以下政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::000000000000:role/Administrator"
]
}
]
}
管理员角色可以访问所有内容。 targetAccount具有此信任关系:
{
"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,但也没有帮助。
我的.aws\credentials
文件包含以下行:
[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
最初使用的是默认配置文件但不起作用。
问题:
不幸的是,我找到的其他问题没有一个对我有用的答案......
我卸载并重新安装了Git for Windows,以确保没有安装凭据管理器(我记不起来),但它仍然不起作用,repository '...' not found
说。我可以通过HTTPS在originAccount中克隆存储库。
答案 0 :(得分:2)
凭证帮助程序是使用临时会话凭证(如从AssumeRole获取的凭据)对CodeCommit进行身份验证的唯一方法。 SSH无法通过验证上传的公钥来完成SSH身份验证,这不是暂时的。
我发现使用AssumeRole进行身份验证时,以下模式很容易理解。在.aws\credentials
文件中:
[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获取临时会话凭据,从而有效地承担Administrator对target_account的角色。
您的.gitconfig
应指定target_account
个人资料。
如果您使用的是msysgit
,则应尝试升级到适用于Windows 2.x的Git。凭证助手将发送:作为用户名和AWS V4签名作为密码。会话密钥通常很长,在msysgit
中,curl会将用户名截断为256个字符,不包括完整的会话密钥。
我希望这有帮助!