AWS CodeCommit 跨账户存储库访问不起作用
AWS CodeCommit cross-account respository access not working
我的账户中有一个 AWS IAM 用户(我们称它为 originAccount)可以访问另一个账户 (targetAccount),我正在尝试使用我的 Windows机.
我可以登录并将角色切换到 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
最初是使用默认配置文件,但也没有用。
问题:
- 这可能吗?我做错了什么?
- SSH和HTTPS都可以跨账户访问吗?文档令人困惑,但似乎表明只有带有凭据助手的 HTTPS 才能工作(据称)。
- 这是否适用于多重身份验证?如果没有,是否可以仅为 CodeCommit 关闭它?
不幸的是 none 我找到的其他问题的答案对我有用...
我为 Windows 卸载并重新安装了 Git 只是为了确保没有安装它的凭据管理器(我不记得了),但它仍然不起作用,说repository '...' not found
。不过,我可以通过 HTTPS 克隆 originAccount 中的存储库。
credential-helper 是使用临时会话凭据(例如从 AssumeRole 获取的凭据)对 CodeCommit 进行身份验证的唯一方法。 SSH 将无法工作,因为 SSH 身份验证是通过验证上传的 public 密钥完成的,这不是临时的。
我发现使用 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 获取临时会话凭证,有效地承担 target_account.[=16= 上的管理员角色]
您的 .gitconfig
应该指定 target_account
配置文件。
如果您正在使用 msysgit
,您应该尝试升级到 Git Windows 2.x。 credential-helper 将发送 : 作为用户名和 AWS V4 签名作为密码。会话密钥通常很长,在 msysgit
中,curl 会将用户名截断为 256 个字符,其中不包括完整的会话密钥。
希望对您有所帮助!
我的账户中有一个 AWS IAM 用户(我们称它为 originAccount)可以访问另一个账户 (targetAccount),我正在尝试使用我的 Windows机.
我可以登录并将角色切换到 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
最初是使用默认配置文件,但也没有用。
问题:
- 这可能吗?我做错了什么?
- SSH和HTTPS都可以跨账户访问吗?文档令人困惑,但似乎表明只有带有凭据助手的 HTTPS 才能工作(据称)。
- 这是否适用于多重身份验证?如果没有,是否可以仅为 CodeCommit 关闭它?
不幸的是 none 我找到的其他问题的答案对我有用...
我为 Windows 卸载并重新安装了 Git 只是为了确保没有安装它的凭据管理器(我不记得了),但它仍然不起作用,说repository '...' not found
。不过,我可以通过 HTTPS 克隆 originAccount 中的存储库。
credential-helper 是使用临时会话凭据(例如从 AssumeRole 获取的凭据)对 CodeCommit 进行身份验证的唯一方法。 SSH 将无法工作,因为 SSH 身份验证是通过验证上传的 public 密钥完成的,这不是临时的。
我发现使用 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 获取临时会话凭证,有效地承担 target_account.[=16= 上的管理员角色]
您的 .gitconfig
应该指定 target_account
配置文件。
如果您正在使用 msysgit
,您应该尝试升级到 Git Windows 2.x。 credential-helper 将发送 : 作为用户名和 AWS V4 签名作为密码。会话密钥通常很长,在 msysgit
中,curl 会将用户名截断为 256 个字符,其中不包括完整的会话密钥。
希望对您有所帮助!