CodeCommit リポジトリに対して git clone コマンドを実行して 403 エラーになったときの対処方法

2022.02.02

困っていた内容

CodeCommit リポジトリからgit cloneを実行するとfatal: unable to access 'https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test-repository/': The requested URL returned error: 403というエラーが返ってきました。
詳細なエラーメッセージを確認する方法はありますか?

どう対応すればいいの?

CodeCommit リポジトリに対してgit pushgit pullコマンドを実行すると、CloudTrail に記録されます。
そのため、CloudTrail のイベント履歴からイベント名GitPushGitPullを検索することで、詳細なエラー内容が分かります。

実際に確認してみた

自身のグローバル IP アドレスからのGitPullを明示的に拒否した IAM ロールを使用してgit cloneコマンドを実行し、CloudTrail を確認してみます。

% git clone codecommit::ap-northeast-1://test-repository
Cloning into 'test-repository'...
fatal: unable to access 'https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test-repository/': The requested URL returned error: 403

403 エラーが確認できたため CloudTrail を見ると、以下のとおり AccessDenied が表示されていることがわかります。

イベント名をクリックしてイベントレコードを確認すると、以下のエラーメッセージが確認できました(関係箇所のみ抜粋)。
以下のエラーメッセージを参考に IAM ロールなどのポリシーを確認し、問題箇所を修正すればエラー解決です。

{
    "eventName": "GitPull",
    "userAgent": "git/2.33.0",
    "errorCode": "AccessDenied",
    "errorMessage": "User: arn:aws:sts::111111111111:assumed-role/xxxx is not authorized to perform: codecommit:GitPull on resource: arn:aws:codecommit:ap-northeast-1:111111111111:test-repository with an explicit deny in an identity-based policy",
}

参考資料

AWS CodeCommit による AWS CloudTrail API 呼び出しのログ記録