最近触れる機会があり、ややハマりしたので対処方法のまとめです。
現象
OSXでAWS CodeCommitを使っていると、今までリポジトリへアクセスできていたのに、急に403が返ってきてアクセスできなくなることがあります。
具体的にはこんな感じのエラーです。さっきまでpullできてたのになんで?
$ git pull origin master
fatal: unable to access 'https://git-codecommit.us-east-1.amazonaws.com/v1/repos/awesome-app/': The requested URL returned error: 403
原因
端的に言うと、キーチェーンアクセスに保存したcredentialがすぐに有効期限切れになってしまうことが原因でした。
OSXにプリインストールされているGitは、credentialを保存するのにKeychain Accessを使います。ですが、セキュリティ上の理由からCodeCommitへアクセスするためのcredentialはテンポラリなものであるため、リポジトリに初回アクセスした際に保存されたcredentialは約15分後には使えなくなります。
ではどうするか?
方法は3つあります。
1. keychain をデフォルトで利用しない gitを別途インストールする
brewなどを使えば簡単ですね。gitが2つになっちゃうことを許容できれば一番手軽な回避方法だと思います。
2. Keychain Accessの設定を変更して、CodeCommitを利用する際にはcredentialを使わないようにする。
まず、Keychainを開いてcodecommitなどで検索します。
次に、該当項目を右クリックなどで情報を表示しアクセス制御タブを選択します。
で、git-credentila-osxkeychainをー
ボタンで削除して変更内容を保存します。(このときユーザのパスワードが必要です)
そして、リポジトリに戻って、git pull origin master
などリポジトリへアクセスしてみると以下の様なダイアログがポップアップします。
そこで拒否を押せば、無事アクセスすることが可能です。
だけど、アクセスするたびに拒否するとかまじめんどくさい。。。
3. sshを使ってアクセスする。
httpsではなくsshを使ってリポジトリにアクセスすることもできます。ただ、IAM Roleや公開鍵などやっぱりそれなりに設定が必要です。
詳しくは以下を参照してください。
http://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up-ssh-unixes.html
まとめ
一番手っ取り早いのは、新しくgitを入れることだと思います。
正直な話、AWS CodeCommitはがっつり利用するにはまだまだ機能が足りてい無いと感じています。
ですが、その分今後に期待できると考えることもできます。
GithubやBitbucket等のgitリポジトリのホスティングとしては後発ですが、それらと機能の差がなくなりAWSとの連携に強みをもたせれば利用機会が増える可能性はありそうですね。