在AWS CodeCommit中,Git clone可以正常工作,但是推送操作失败并出现403错误。

3

我可以成功克隆我的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

大多数关于此错误的互联网问题都是在克隆失败时,但我的克隆是成功的。我发现了这个问题,其中克隆成功但推送失败,但他的错误不同 - aws codecommit cannot push
编辑:查看我的CodeCommit策略后,它具有Full: Read Limited: List, Writeenter image description here 还有一个ResourceSpecifier = foo-*,但那只适用于GitPull权限,而拉取是有效的,因此我怀疑这不是资源说明符。

这是在Mac还是Windows上? - strongjz
我在使用 Windows。 - sashoalm
好的,你在Windows上如何使用Git?你安装了凭据管理器吗?使用Eclipse?Visual Studio?Git Bash还是Cygwin?以及你使用Git的版本。 - strongjz
我使用官方网站提供的 Windows 版本的 Git Bash。但请记住,克隆和拉取已经可以正常工作。你所担心的大多数问题都会阻止我进行克隆,而不仅仅是推送。 - sashoalm
你的用户拥有完整的 IAM 策略是什么? - strongjz
3个回答

4

对于MacOS用户:请在Keychain中删除code-commit的网络密码,然后再尝试。同时:

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

1

我想你对只读权限是正确的。正如文档所述,您需要在IAM策略中具有codecommit:GitPush权限才能允许从本地存储库推送提交到CodeCommit存储库。

能够拉取存储库意味着您的凭据已经正确设置,如果没有设置,您将无法执行git pull/git fetch


我更新了我的问题,并提供了有关我的 IAM 策略的详细信息。 - sashoalm
你能包含你的实际策略吗?这将具有实际特定权限,而不是“有限的”,它可能是任何数量的事情。 - Tom Nijs
1
我发现确实是ResourceSpecifier的问题。在策略中将其更改为与我的存储库名称匹配后,它开始正常工作了。感谢您的回答,因为它引导了我朝着正确的方向前进。 - sashoalm

0

@Tom的回答让我朝着正确的方向前进。为了更详细地解释,原因是我的用户只有对名称匹配包含通配符的特定模式的存储库拥有写入权限。

这个模式来自策略JSON,看起来像这样:

"Resource": "arn:aws:codecommit:*:*:bar*"

这个模式将给我对任何以 bar 开头的仓库写入访问权限,因此我可以向名为 barbar2 的仓库推送,但无法推送到名为 foo-bar 的仓库,因为它虽然包含 bar 但不是以它开头。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接