🌌

AWS CodeCommitの使い方

2023/01/26に公開

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
git config --global --unset credential.helper

3.設定方法:SSHの場合

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プロファイルの設定

.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