🌌
AWS CodeCommitの使い方
0. CodeCommitとは
- AWSが提供するコードリポジトリサービス(AWS版 Github)
- ただし、GithubのようにPublicにリポジトリを公開することはできず、利用するにはIAMで認証を付与する必要がある
1.CodeCommit利用時のアクセス方法の種類
- CodeCommitのユーザアカウントは、IAMユーザと紐づいているため、IAMユーザの発行が必要となります。
- CodeCommitへのアクセス用法は、以下の3種類から選択する必要があります。
アクセス方法 | 説明 |
---|---|
HTTPS | GitHubと同様の通常のHTTPSによるアクセス。IAMユーザから専用のID/PASSを発行して認証する。 |
SSH | クライアント側で秘密鍵と公開鍵を作成し、IAMユーザ側に公開鍵を登録することで、公開鍵認証を行う。 |
HTTPS(GRC) | ・CodeCommit用の拡張版Gitクライアントツール。 ・AWS CLIのProfileと連携させることが可能。 ・Profileを切り替えクロスアカウントでのCodeCommit利用したい場合は必須。 |
HTTPS/SSHはGithubを使用する場合と同じような感じですが、GRC(Git-Remote-Codecommit)はCodeCommit専用にカスタマイズされたGitクライアントツールです。
2.利用までの手順
- 以下の設定を前提として説明します。
CodeCommitのリポジトリ名 | AWS Region |
---|---|
MY-REMOTE-REPOSITORY | ap-northeast-1 |
HTTPSの場合
(1) IAMユーザの認証情報からCodeCommit専用のID/Passwordを発行する
- マネジメントコンソールを以下の順序で操作し、CodeCommitのID/Passwordを生成します。
-
[IAM]
→[ユーザー]
→[<対象のIAMユーザ>]
→[タブ:認証情報]
→[AWS CodeCommit の HTTPS Git 認証情報]
→[認証情報の生成]
- ここで表示される、CodeCommit用の
①ユーザ名
と②パスワード
を次のCodeCommitへのアクセスで使用するために控えておきます。
-
(2) ローカルPCからCodeCommitのリモートリポジトリをClone
-
HTTPSでcloneする場合、CodeCommitのリポジトリは、以下のURLでアクセスできます。
https://git-codecommit.<region>.amazonaws.com/v1/repos/<your_repository_name>
-
git cloneコマンドでCodeCommit上のリポジトリをCloneします。(以下例は、Linuxの場合)
$ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/MY-REMOTE-REPOSITORY
Cloning into 'MY-REMOTE-REPOSITORY'...
Username for 'https://git-codecommit.ap-northeast-1.amazonaws.com': ## ①のユーザ名 ##
Password for 'https://git-codecommit.ap-northeast-1.amazonaws.com': ## ②のパスワード ##
remote: Counting objects: 2068, done.
Receiving objects: 100% (2068/2068), 100.53 MiB | 4.25 MiB/s, done.
Resolving deltas: 100% (491/491), done.
Updating files: 100% (67/67), done.
- 環境/設定により、自己証明書のエラーが出てしまう場合は、以下の設定で回避可能です。
### エラー内容 ###
$ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/MY-REMOTE-REPOSITORY
Cloning into 'MY-REMOTE-REPOSITORY'...
fatal: unable to access 'https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/MY-REMOTE-REPOSITORY/': server certificate
verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
### 自己証明書の許容 ###
$ git config --global http.sslverify false
- しばらしくして、403エラーとなる場合は、以下設定でローカルにストアしたクレデンシャルを無効化することで回避可能です。
git config --global --unset credential.helper
3.設定方法:SSHの場合
- AWS公式の解説にて割愛させていただきます。
4.設定方法:HTTPS(GRC)の場合
Git-Remote-Codecommitが必要となる利用シーン
- 1つのGitクライアント(Cloud9や、EC2 Linux、あるいはPCなど)から、複数のAWSアカウントのCodeCommitを使いたい。
- 各AWSアカウントへのユーザアカウント登録は、IAMユーザを登録している場合や、IAMロールのみでスイッチロールする場合が混在している。
- AWS CLIと同じようにプロファイルを切り替え各CodeCommitのIAM設定に合わせた認証情報でアクセスしたい。
- CodeCommitへのアクセスにおいても、マネジメントコンソールへのアクセスと同様アクセスできるようにする。
- IAMユーザがあるAWSアカウントのCodeCommitへは、そのIAMユーザ権限で認証
- IAMユーザが無く、他のAWSアカウントからスイッチロールしているAWSアカウントのCodeCommitへは、同様にスイッチロールで認証
必要となる設定
- 上記要件を実現するには、Git-Remote-Codecommit以外にAWS CLIが必要となります。
(1)Git-Remote-CodeCommitのインストール
- Git-Remote-CodeCommitのインストール(Ubuntuの場合)
$ sudo apt install python3-pip
$ sudo pip3 install git-remote-codecommit
(2)AWSプロファイルの設定
-
以下Linkの手順に従い、AWS CLIをインストールします。
-
プロファイルの設定
-
account1
は、IAMユーザが登録されているアカウント用 -
account2
は、account1からのスイッチロールでアクセスするアカウント用
-
.aws/config
[profile account1]
region = ap-northeast-1
output = json
[profile account2]
region = ap-northeast-1
output = json
role_arn = arn:aws:iam::111111111111:role/iam-role-for-codecommit
source_profile = account1
- クレデンシャルの登録(値はマスクしてます)
.aws/credentials
[account1]
aws_access_key_id = ***
aws_secret_access_key = ***
(3)動作確認
- 以下の書式でプロファイルとリポジトリ名を指定しCloneします。
git clone codecommit::ap-northeast-1://<プロファイル名>@<リポジトリ名>
- account1のプロファイルからclone(masterブランチを指定)
$ git clone -b master codecommit::ap-northeast-1://account1@MY-REMOTE-REPOSITORY
Cloning into 'MY-REMOTE-REPOSITORY'...
remote: Counting objects: 209, done.
Receiving objects: 100% (209/209), 42.22 KiB | 192.00 KiB/s, done.
Resolving deltas: 100% (125/125), done.
- 別のプロファイルでclone(ブランチ指定なし)
$ git clone codecommit::ap-northeast-1://account2@MY-REMOTE-ACCOUNT2-REPOSITORY
Discussion