Git 克隆在 AWS CodeCommit 中工作,但推送失败并显示 403
Git clone works in AWS CodeCommit but pushing fails with 403
我可以成功克隆我的 CodeCommit 存储库,但是当我尝试推送到它时,我收到 403。但是,抓取和拉取工作正常。好像我有只读权限。
我已将我的 .gitconfig
设置为使用 AWS CLI 作为凭证管理器:
[credential]
helper = !aws --profile builder codecommit credential-helper $@
UseHttpPath = true
问题是错误没有告诉我推送失败的原因:
$ git push origin test-branch
fatal: unable to access 'https://git-codecommit.us-east-1.amazonaws.com/v1/repos/my-example-repo/': The requested URL returned error: 403
互联网上关于他的错误的大多数问题都是在克隆失败时,但克隆对我有用。我在克隆成功和推送失败的地方找到了这个问题,但他的错误是不同的 - .
编辑::查看我的 CodeCommit 策略后,它有 Full: Read Limited: List, Write
:
还有一个 ResourceSpecifier = foo-*
,但它适用于 GitPull
权限和拉取工作,所以我怀疑它是资源说明符。
我想您对只读权限的看法是正确的。作为 docs 状态,您需要 IAM 策略中的 codecommit:GitPush
权限才能将提交从本地存储库推送到 CodeCommit 存储库。
能够提取存储库意味着您的凭据设置正确,否则您根本无法 git pull
/ git fetch
。
@Tom 的回答给了我正确的方向。扩展一下,原因是我的用户仅对名称与包含通配符的特定模式匹配的存储库具有写入权限。
此模式来自策略 JSON,如下所示:
"Resource": "arn:aws:codecommit:*:*:bar*"
此模式将授予我对名称以 bar
开头的任何存储库的写入权限,因此我可以推送到名为 bar
或 bar2
的存储库,但不能推送到存储库命名为 foo-bar
因为它不以 bar
开头,即使它包含它。
对于 MacOS:删除钥匙串中的 code-commit 互联网密码,然后重试。还有:
git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true
我可以成功克隆我的 CodeCommit 存储库,但是当我尝试推送到它时,我收到 403。但是,抓取和拉取工作正常。好像我有只读权限。
我已将我的 .gitconfig
设置为使用 AWS CLI 作为凭证管理器:
[credential]
helper = !aws --profile builder codecommit credential-helper $@
UseHttpPath = true
问题是错误没有告诉我推送失败的原因:
$ git push origin test-branch
fatal: unable to access 'https://git-codecommit.us-east-1.amazonaws.com/v1/repos/my-example-repo/': The requested URL returned error: 403
互联网上关于他的错误的大多数问题都是在克隆失败时,但克隆对我有用。我在克隆成功和推送失败的地方找到了这个问题,但他的错误是不同的 -
编辑::查看我的 CodeCommit 策略后,它有 Full: Read Limited: List, Write
:
还有一个 ResourceSpecifier = foo-*
,但它适用于 GitPull
权限和拉取工作,所以我怀疑它是资源说明符。
我想您对只读权限的看法是正确的。作为 docs 状态,您需要 IAM 策略中的 codecommit:GitPush
权限才能将提交从本地存储库推送到 CodeCommit 存储库。
能够提取存储库意味着您的凭据设置正确,否则您根本无法 git pull
/ git fetch
。
@Tom 的回答给了我正确的方向。扩展一下,原因是我的用户仅对名称与包含通配符的特定模式匹配的存储库具有写入权限。
此模式来自策略 JSON,如下所示:
"Resource": "arn:aws:codecommit:*:*:bar*"
此模式将授予我对名称以 bar
开头的任何存储库的写入权限,因此我可以推送到名为 bar
或 bar2
的存储库,但不能推送到存储库命名为 foo-bar
因为它不以 bar
开头,即使它包含它。
对于 MacOS:删除钥匙串中的 code-commit 互联网密码,然后重试。还有:
git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true