CodeCommitのGitリポジトリへの接続方法
渡辺です。
AWS CodeCommitを利用していますか? AWS CodeCommitは、AWS環境でGitリポジトリを利用できるサービスです。 GitHubのようなソーシャルコーディングの機能はありませんが、AWS環境にプライベートなgitリポジトリを構築できます。 しかし、カジュアルにGitリポジトリとして利用するためには若干のモヤモヤがあると思います。 今回は、そのモヤモヤをスッキリさせたいと思います。
IAMユーザによるアクセス
AWS CodeCommitでは、Gitリポジトリのアクセス権限もIAM(Identity and Access Management)で管理されます。 AWSのサービスのひとつということを考えれば当然ですが、Gitリポジトリを利用するにはIAMユーザを作成しなければなりません。 CodeCommitの権限は、管理ポリシーのCodeCommitFullAccessを付与すると簡単です。
IAMについては、AWS再入門 AWS IAM (Identity and Access Management) 編を参照ください。
Gitリポジトリへの接続方法
AWS CodeCommitでは、GitHubやBacklogと同様に、リポジトリの接続方法として、SSHとHTTPSが提供されています。 このどちらを利用するかによって、設定が異なるので注意が必要です。
SSHで接続する場合は、IAMユーザに公開鍵を登録します。 HTTPSで接続する場合は、AWS CLIとIAMユーザのアクセスキー/シークレットキーを利用します。
IAMユーザに登録した公開鍵によるSSH接続
CodeCommitのGitリポジトリにSSH接続する場合は、IAMユーザに公開鍵を登録します。
公開鍵を登録すると、SSHアクセス用のユーザID(SSHキーID)が作成されます。
CodeCommitのGitリポジトリにアクセスする場合にはIAMユーザ名ではなく、このSSHキーIDを使用してください。 次のような設定を ~/.ssh/configなどに追加しましょう。
Host git-codecommit.*.amazonaws.com User APKXXXXXXXXXXXXXXXXXXX IdentityFile ~/.ssh/id_rsa
以上で設定は完了です。 コマンドラインやGUIツールを利用して、gitコマンドを実行すればCodeCommitのGitリポジトリにアクセスできるようになります。
なお、CodeCommitのGitリポジトリはAWSアカウントやリポジトリ毎にサブドメインが切られているわけではありません。 このため、複数のIAMアカウントからCodeCommitのGitリポジトリを利用する場合は、次のように、Host名を別名で登録して運用してください。
Host hoge.git-codecommit.us-east-1.amazonaws.com HostName git-codecommit.us-east-1.amazonaws.com User AXXXXXXXXXXXXXXXXXXXXX IdentityFile ~/.ssh/hoge.pem
IAMユーザのアクセスキーを利用したHTTPS接続
CodeCommitのGitリポジトリにHTTPSで接続する場合は、AWS CLIを利用します。 IAMユーザのアクセスキーが必要となるため、予め払い出しておいてください。
はじめにIAMユーザのアクセスキーとシークレットキーを~/.aws/credentialsファイルに設定します。
[CodeCommitProfile] aws_access_key_id=AKIXXXXXXXXXXXXXXXXX aws_secret_access_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ここではCodeCommitProfileという名前のプロファイルで登録しました。
AWS CLIのcodecommit credential-helperコマンドは、CodeCommitのGitリポジトリにHTTPS接続を行う場合の認証をサポートします。 このコマンドをgitのcredential.helperオプションに設定します。 また、あわせてcredential.UseHttpPathオプションを設定します。
# git config --global credential.helper '!aws --region us-east-1 --profile CodeCommitProfile codecommit credential-helper $@' # git config --global credential.UseHttpPath true
awsコマンドの--regionオプションと--profileオプションに注意してください。 なお、コマンドを実行すると~/.gitconfigに次のようなオプションが追加されることになります。
[credential] helper = !aws --region us-east-1 --profile CodeCommitProfile credential-helper $@ UseHttpPath = true
以上で設定は完了です。 コマンドラインやGUIツールを利用して、gitコマンドを実行すればCodeCommitのgitリポジトリにアクセスできるようになります。
まとめ
このように、CodeCommitのGitリポジトリへのアクセス許可はIAMユーザを利用して行われます。 したがって、コードをPushする開発者毎にはIAMユーザを作成しなければなりません。 HTTPS接続にはアクセスキーが必要となるため運用上のリスクも考慮しなければならないでしょう。 また、CodeCommitではBacklogのように課題とコミットを紐付ける機能や、GitHubのようなソーシャルコーディングの機能があるわけではありません。
このようにイマイチぱっとしないCodeCommitですが、実はAWS環境で他のサービスなどと組み合わせると効果的です。 次回は、EC2インスタンスからアクセスキーもSSH公開鍵も使わずに、CodeCommitのGitリポジトリに接続する方法を紹介しましょう。
See you!