针对 AWS CodeCommits 运行 git clone 得到 403 错误
Posted
技术标签:
【中文标题】针对 AWS CodeCommits 运行 git clone 得到 403 错误【英文标题】:running git clone against AWS CodeCommits gets me a 403 error 【发布时间】:2016-04-03 17:17:11 【问题描述】:我的本地笔记本电脑是 Mac。
-
ssh 密钥配置正确。这是~/.ssh/config的内容
Host barthea
Hostname git-codecommit.us-east-1.amazonaws.com
User AVVVVVVVVVVVVVVVVVQ
IdentityFile ~/.ssh/aws-aws.pem
运行 ssh barthea 让我受益匪浅
You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit. Interactive shells are not supported.Connection to git-codecommit.us-east-1.amazonaws.com closed by remote host.
我创建了一个包含密码和访问密钥的 IAM 用户 bruce666,使该用户成为“团队”组的一部分。然后我创建了一个包含“AWSCodeCommitPowerUsers”的策略并将该策略分配给“团队”。最后将 bruce666 分配给“团队”。此时,bruce666 可以通过管理控制台访问 CodeCommit 中的任何 repo。
我运行了 aws config --profile bruce666,输入了他的访问和密钥、他的区域并指定了 json 格式。此时,我可以通过运行 aws codecommit get-repository --repository-name rekha --profile bruce666
在 CodeCommmit 中创建 rekha 存储库我可以创建几个虚拟文件,运行 git init、git add .、git commit -m "1"、git add origin https://git-gitcode.amzonaws.com/repos/v1/rekha , git push -u origin master 这样操作就成功了。
但是,当我运行 git clone ssh://git-gitcode.amazonaws.com/repos/v1/rekha 时,我得到“致命:无法访问'https://git- codecommit.us-east-1.amazonaws.com/v1/repos/barthia/':请求的 URL 返回错误:403“什么给出?
【问题讨论】:
【参考方案1】:在 MAC 上,如果上述技巧不起作用,请执行以下操作:
-
打开钥匙串访问
搜索 CodeCommit。你应该找到这个:
-
选择“git-codecommit....”并按删除
确认删除。
现在再试一次。它应该工作。当您遇到错误 403 时,您可能还需要再次执行此操作。
此问题的一个可能原因是钥匙串密码与您 MAC 上的登录密码不同。
【讨论】:
由于某种原因已停止工作。有什么想法吗? 钥匙串访问这样一个讨厌的功能 为我工作。我无法再推动我的回购了。我不得不再次重新提交密码。【参考方案2】:在 Windows 中使用 git push 命令时,我也遇到了同样的 403 错误。我完成了 AWS 文档中提到的所有设置,但没有解决我的问题。在我通过 Windows 凭据查看 git 凭据集后,如屏幕所示。我发现它不是 git https 凭据,而是设置访问密钥/秘密密钥(不知道如何)。
点击编辑链接,使用为 AWS 用户生成的正确 git 凭证更新凭证,一切正常。
【讨论】:
投票给这个,是 Windows 10 的修复 投票给这个! 在我的例子中,它将 URL 列为用户名 - 不知道这是怎么发生的。在那里插入用户和密码直接修复它。 我没有更新凭据,只是将其删除。然后windows再次询问登录名和密码,我取消了它,最后git开始使用credential-helper并成功克隆aws repo。 我需要和@IlyaSheroukhov 做同样的事情,不知道为什么,但这有效:\ 真的很伤心这个错误【参考方案3】:This helpful text is found on the AWS documentation for codecommit and Windows integration
如果您安装的适用于 Windows 的 Git 包含 Git 凭证 Manager 实用程序,您将看到 403 错误或提示提供 在前几个之后将凭据放入凭据管理器实用程序 连接尝试。解决这个问题最可靠的方法是 卸载然后重新安装 Git for Windows 没有选项 Git Credential Manager 实用程序,因为它与 AWS 不兼容 代码提交。
如果您想保留 Git Credential Manager 实用程序, 您必须执行额外的配置步骤才能同时使用 AWS CodeCommit,包括手动将 .gitconfig 文件修改为 指定 AWS CodeCommit 时使用凭证帮助程序 连接到 AWS CodeCommit。
从 凭据管理器实用程序(您可以在 Control 中找到此实用程序 控制板)。
删除所有存储的凭据后,添加 跟随您的 .gitconfig 文件,保存它,然后尝试连接 再次从新的命令提示符窗口:
[credential "https://git-codecommit.us-east-1.amazonaws.com"]
helper = !aws codecommit credential-helper $@
UseHttpPath = true
此外,您可能需要通过指定 --system 而不是 --global 或 --local 在所有连接按预期工作之前。
最后一部分适用于我的情况,尽管当我运行 git config --system 时它没有按预期运行,而是在 aws codecommit 命令之前附加了 aws configure。
所以我不得不在 git 中运行它来找到系统配置文件的位置。
git config --list --show-origin
然后我将 AWS 的建议部分添加到我的 c:/users/username/.gitconfig 和我的 c:/ProgramData/Git/config 文件中。
在那之后 git push 开始工作-即使我在
的响应之前得到了虚假错误"git: 'credential-aws' is not a git command. See 'git --help'."
【讨论】:
这是最有用的答案(至少对我而言)。我犯的错误是使用凭据管理器实用程序安装 git。要解决此问题,请卸载 git,然后安装它并取消选中凭证管理器实用程序。在那之后,它就像一个魅力。谢谢。 在linux上修改.gitconfig:sudo nano ~/.gitconfig
不需要 sudo @GabrielPetersson【参考方案4】:
运行以下命令后,我必须将以下提到的策略添加到我的 IAM 用户以解决此问题。 refrence
git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true
政策:
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Action": [
"codecommit:*"
],
"Resource": "*"
]
【讨论】:
【参考方案5】:我解决了。
403 错误消息是专门的 Git 错误消息。我添加了两个 AWS 指定的辅助命令:
git config --global credential.helper '!aws --profile bruce666 codecommit credential-helper $@'
git config --global credentials.helper UseHttpPath=true
这就解决了这个问题。
您本地目录中的 .git/config 文件(在克隆您刚刚创建的 Codecommit 存储库之前应该如下所示:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = false
[credential]
helper = !aws --profile bruce666 codecommit credential-helper $@
UseHttpPath = true
[remote "origin"]
url = https://git-codecommit.us-east-1.amazonaws.com/v1/repos/barthea
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
正如 .git/config 文件中所指定的,您正在使用 https 而不是 ssh 进行克隆。我一定没有使用 OSX 附带的默认版本的 git,因为我没有遇到任何工具链问题。
【讨论】:
无需添加 aws 配置文件 (--profile bruce666),只需!aws codecommit credential-helper $@
即可。 +1【参考方案6】:
对我来说,出现错误的根本原因是无论我在 OSX 上使用哪个版本的 git,GIT 总是从文件中获取使用 osxkeychain 的 credential.helper 配置:
/Applications/Xcode.app/Contents/Developer/usr/share/git-core/gitconfig
摆脱它为我解决了问题并且没有破坏任何东西。
【讨论】:
谢谢!在我的情况下,第一次克隆和提交出于某种原因工作 - 但后来不行。【参考方案7】:我在 OSX 中的情况。
第一步:
git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credentials.helper UseHttpPath=true
但是,验证git config --list --show-origin
file:/usr/local/etc/gitconfig credential.https://git-codecommit.eu-west-1.amazonaws.com.helper=!aws codecommit credential-helper $@
file:/usr/local/etc/gitconfig credential.helper=osxkeychain
file:/Users/mine/.gitconfig user.name=my-user
file:/Users/mine/.gitconfig user.email=my@gmail.com
file:/Users/mine/.gitconfig filter.lfs.clean=git-lfs clean -- %f
file:/Users/mine/.gitconfig filter.lfs.smudge=git-lfs smudge -- %f
file:/Users/mine/.gitconfig filter.lfs.process=git-lfs filter-process
file:/Users/mine/.gitconfig filter.lfs.required=true
file:/Users/mine/.gitconfig credential.helper=!aws codecommit credential-helper $@
file:/Users/mine/.gitconfig credential.usehttppath=true
第一行之前不存在,git优先使用osxkeychain
。因此,我不得不做git config --system ...
cat /usr/local/etc/gitconfig
[credential "https://git-codecommit.eu-west-1.amazonaws.com"]
helper = !aws codecommit credential-helper $@
UseHttpPath = true
[credential]
helper = osxkeychain
因此指定 URL 是为了在存储其他凭据时回退。
更新 https://docs.aws.amazon.com/codecommit/latest/userguide/troubleshooting-ch.html
由于某种原因,有时似乎没有添加 UseHttpPath = true。所以它可以(应该)添加到 [credential] 下
【讨论】:
【参考方案8】:以下解决方案适用于少数在 Windows 10 上使用 Git Bash 的开发人员。
如果您在“连接到您的存储库”选项卡上选择 Windows 作为您的操作系统,则命令格式如下:
git config --global credential.helper "!aws codecommit credential-helper $@"
git config --global credential.UseHttpPath true
但是,如果您使用 Git Bash,请选择“Linux、MacOS 或 Unix”选项。 注意第一行的单引号而不是双引号。
git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true
祝你好运。
参考: https://forums.aws.amazon.com/thread.jspa?threadID=198356 发布者:mwhardesty
【讨论】:
【参考方案9】:致命:无法访问“https://git-codecommit.yourregion.amazonaws.com/v1/yourrepositoryname/”:请求的 URL 返回错误:403
由于以下地区而发生
-
确保您的用户附加了
codecommitfullaccess
政策。
确保本地 aws cli 配置中的默认区域和创建存储库的区域相同。如果未在 aws cli 命令中重置默认区域,如下所示
aws 配置
-
确保那里是否存在存储库。
【讨论】:
【参考方案10】:问题(在 Ubuntu 上)
$ git 克隆 https://git-codecommit.ap-southeast-1.amazonaws.com/v1/repos/xx 克隆到 'xx'... 致命:无法访问“https://git-codecommit.ap-southeast-1.amazonaws.com/v1/repos/xx/”: 请求的 URL 返回错误:403
解决方案:
第 1 步:
git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true
检查:
cat ~/.gitconfig
[user]
email = your-email
name = your-name
[credential]
helper = !aws codecommit credential-helper $@
UseHttpPath = true
第 2 步:
-
服务 > IAM
点击用户(左侧面板)
点击您的用户名(主面板)
点击
Add permissions
点击Attach existing policies directly
打开Filter policies
,输入AWSCodeCommitFullAccess
选中策略旁边的复选框,然后单击Next: Review
点击Add permissions
结果
$ git 克隆 https://git-codecommit.ap-southeast-1.amazonaws.com/v1/repos/xx 克隆到 'xx'... 远程:计数对象:3,完成。 拆包对象:100% (3/3),223 字节 | 223.00 KiB/s,完成。
参考
-
Getting started with Git and AWS CodeCommit
【讨论】:
【参考方案11】:我的默认 aws 凭据有问题,我在没有配置文件的情况下再次运行 aws configure
,重新启动终端并且它工作了。
【讨论】:
【参考方案12】:您需要确保您的 AWS 凭证不仅具有访问 CodeCommit 的权限,而且还没有附加一揽子拒绝策略。在我们的组织中,我们要求对所有控制台帐户进行 MFA,这确实会导致程序访问出现问题。
一个好的解决方案(如果这是您的问题)是创建另一个没有控制台访问权限的 IAM 用户,并直接附加 codecommit 策略(在我们的例子中,MFA 全面拒绝来自用户所属的 IAM 组)。
澄清:此答案适用于您使用 IAM 凭证和 CodeCommit Git 扩展(而不是 IAM Git 凭证)时,尽管我怀疑在这种情况下也是如此。
【讨论】:
【参考方案13】:当它在尝试从 AWS 克隆或提取代码时要求输入用户名和密码时,而不是复制密码,通过键入每个字母手动输入密码。这解决了我的问题。
【讨论】:
【参考方案14】:就我而言,我遇到了权限问题。
您需要将 AWSCodeCommitFullAccess 政策附加到您的 IAM 用户,以授予您对 CodeCommit 的访问权限。
【讨论】:
【参考方案15】:对我来说,唯一可行的选择是将 git clone 与 HTTPS (GRC) 选项一起使用 它给出了一个以:
开头的 URLgit clone codecommit::
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于针对 AWS CodeCommits 运行 git clone 得到 403 错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 Amazon AWS Elastic Beanstalk 运行具有多个 git 存储库的平台的最佳方式是啥?
git aws.push 返回“错误:RPC 失败;结果=22,HTTP 代码 = 400”
问题。未加载 AWS DevTools (git aws.push)