gitでのCodeCommitへの操作が403エラーになった原因を調査した記録

OSX環境にてCodeCommitを利用して常に403が返ってくる状況に陥り、その原因を調査した記録となります。
2019.02.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

OSX環境でCodeCommitを利用した際に、しばらく時間が経過すると何をしてもステータスコードが403になる現象に遭遇するケースがあります。

最終的にGitlabでの管理という結論に至りましたが、どのような前提だと発生するのかを備忘録でまとめておきました。

発生する前提

環境が以下の前提である場合、時間経過で遭遇すると思われます。

  • OSX環境である
  • CodeCommitにHTTPSのみ接続できる
  • GitがKeyChainを使う前提にある
  • ポリシーにIAMUserSSHKeysが適当されていない

発生する原因

AWS CLI 認証情報ヘルパーを使用して Linux, macOS, or Unix 上で CodeCommit リポジトリへの HTTPS 接続のセットアップステップ

セキュリティ対策のために、CodeCommit リポジトリへのアクセス用に生成されるパスワードは一時的なものなので、約 15 分後にキーチェーンに保存されている認証情報は機能しなくなります。

「そんな一時情報を毎回参照されるKeyChainに記録しないでくれよ」とも言いたくなりますが、あくまでGit側の動作に依存するため制御し難いようです。

一時的な回避対応

以下の対応が主になります。

  • KeyChainから認証情報を削除
  • Git側でKeyChainを無効にする

KeyChainから認証情報を削除

手順としては以下のURL先に沿ったものとなりました。

AWS CodeCommitで急に403が返ってくるようになった時の対処方法

Git側でKeyChainを無効にする

unsetすることでダイアログの出現が抑えられるようになります。

% git config --local --unset credential.helper

disable git credential-osxkeychain

恒久的な解消方法

ポリシーとしてIAMUserSSHKeysを適用します。SSH Keyを登録した上でssh接続にて利用しましょう。

まとめ

CodeCommitそのものを初めて扱ってみましたが、帰ってくるエラーからは原因が想定し難く時間が大幅にかかってしまいました。HTTPS接続を利用すると誰もが遭遇する壁のようですが、原因判明への時間短縮になれば幸いです。