複数のAWSアカウントのCodeCommitからgit cloneでコードを取ってくる必要があった。
その時にssh接続設定をどのように書けば良いか困ったため、調べたことの覚書。
CodeCommitへのssh接続設定
これは公式ドキュメントにある通り。
- ローカルで公開鍵、秘密鍵を生成
- AWSのIAMユーザに生成した公開鍵を登録
- ~/.ssh/configに以下のように設定
Host git-codecommit.ap-northeast-1.amazonaws.com
User *********** #IAMユーザの認証情報ページにある、手順2で登録した公開鍵に対応するSSHキーID
IdentityFile ~/.ssh/id_rsa #手順1で生成した秘密鍵
git clone ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test_app
こう書くことで、Hostで指定したAWSのリージョンのCodeCommitからgit cloneする際に上記ssh設定が利用される。
AWSアカウントが一つだけの場合はこの書き方で問題なし。
複数のAWSアカウントへのssh設定
困るのは複数のAWSアカウントのCodeCommitを利用する場合。
AWSアカウントが違うということはssh認証に使うUser(SSHキーID)も違うことになるので、上記の書き方だと一つのアカウント以外にはssh認証で弾かれてしまう(※登録する公開鍵が違えば、IdentityFileも異なる)
そんな時どうするかと言うと、下記のように書くと良いらしい。
# 1つ目のAWSアカウントに対するssh設定
Host aws1
HostName git-codecommit.ap-northeast-1.amazonaws.com
User *********** #IAMユーザの認証情報ページにある、手順2で登録した公開鍵に対応するSSHキーID
IdentityFile ~/.ssh/id_rsa #手順1で生成した秘密鍵
# 2つ目のAWSアカウントに対するssh設定
Host aws2
HostName git-codecommit.ap-northeast-1.amazonaws.com
User *********** #IAMユーザの認証情報ページにある、手順2で登録した公開鍵に対応するSSHキーID
IdentityFile ~/.ssh/id_rsa #手順1で生成した秘密鍵
# こう書く所を
# git clone ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test_app
# このように書く
git clone ssh://aws1/v1/repos/app
つまり~/.ssh/configのssh設定に任意のHost名を付けた上で、git cloneする際にHost部分を置き換えれば良いということらしい。
終わりに
という訳で、複数AWSアカウントのCodeCommitからgit cloneする際のアカウントの使い分け方でした。
git cloneする度にHost部分を書き換えるのがちょっと面倒なので、他にもっと良い方法がないか知りたいところ。