CodeCommitのGitリポジトリへの接続方法

2015.12.25

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

渡辺です。

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ユーザに公開鍵を登録します。

CodeCommit1

CodeCommit2

公開鍵を登録すると、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!