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 开头的任何存储库的写入权限,因此我可以推送到名为 barbar2 的存储库,但不能推送到存储库命名为 foo-bar 因为它不以 bar 开头,即使它包含它。

对于 MacOS:删除钥匙串中的 code-commit 互联网密码,然后重试。还有:

git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true