AWS CodeCommit 跨账户存储库访问不起作用



我的账户中有一个 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

最初使用的是默认配置文件,但这也不起作用。

问题:

  1. 这可能吗?我做错了什么?
  2. SSH 和 HTTPS 都可以用于跨账户访问吗?这些文档令人困惑,但似乎表明只有带有凭据帮助程序的 HTTPS 才能工作(据称)。
  3. 这是否适用于多重身份验证?如果不是,是否可以仅对代码提交关闭?

不幸的是,我找到的其他问题都没有适合我的答案......

我卸载并重新安装了适用于 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 个字符,其中不包括完整的会话密钥。

我希望这有帮助!

相关内容

  • 没有找到相关文章