🐭

CodeCommitを他アカウントと共有する方法を画像付きで説明してみた

2024/10/20に公開

こんな方向けの記事です。

・自分のAWSアカウントのCodeCommitリポジトリを新たに作成して他のAWSアカウントでも
 編集できるようにしたい。

前提

git cloneしたい環境に「AWS CLI」と「git」がインストールされていること

説明の流れ

自分のアカウントを「MyAccount」、他のアカウントを「OtherAccount」とします。

MyAccountでやること

  1. CodeCommitリポジトリの作成(既存のリポジトリでも可)
  2. IAMポリシーの作成
  3. IAMロールの作成

OtherAccountでやること

  1. IAMポリシーの作成
  2. IAMポリシーのアタッチ
  3. IAMアクセスキーの発行(既存のAWS CLI用のアクセスキーでも可)
  4. IAMアクセスキーを使ったAWS Configureの設定
  5. gitの設定と操作

1. CodeCommitリポジトリの作成

AWSのCodeCommtiのコンソールからリポジトリの作成をします。

リポジトリ名を決めて作成します。

作成したリポジトリの「URLのクローン」→「HTTPSのクローン」から【CodeCommtiのURL】を控えておきます。

設定からリポジトリARNを控えておきます。

2. IAMポリシーの作成

AWS IAM コンソールからIAMポリシーを作成します。

JSONに切り替えます。

ポリシーエディタには下記を入力します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codecommit:BatchGet*",
                "codecommit:BatchDescribe*",
                "codecommit:Create*",
                "codecommit:DeleteBranch",
                "codecommit:DeleteFile",
                "codecommit:Describe*",
                "codecommit:Get*",
                "codecommit:List*",
                "codecommit:Merge*",
                "codecommit:Put*",
                "codecommit:Post*",
                "codecommit:Test*",
                "codecommit:Update*",
                "codecommit:GitPull",
                "codecommit:GitPush"
            ],
            "Resource": [
                "<リポジトリARN>"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "codecommit:ListRepositories",
            "Resource": "*"
        }
    ]
}

任意のポリシー名を入力し作成します。

IAMロールの作成

左メニューペインの「ロール」からロールを作成します。

信頼されたエンティティタイプは「AWS アカウント」を選択
別のAWSアカウントを選択し、「OtherAccount」のAWS IDを入力します。

許可ポリシーは先ほど作成した「test-repository_Operation-Policy」にチェックを入れて次に行きます。

任意のロール名を入力して、ロールを作成します。

作成したIAMロールを表示して【IAMロールのARN】を控えます。

控えていた【CodeCommtiのURL】と【IAMロールのARN】をOtherAccountに連携しましょう。

IAMポリシーの作成

AWS IAM コンソールからIAMポリシーを作成します。

JSONに切り替えます。

ポリシーエディタには下記を入力します。

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "<MyAccountのIAMロールのARNを入力>"
  }
}

任意のポリシー名を入力し作成します。

IAMポリシーのアタッチ

既存のIAMグループの「許可」のタブの「許可の追加」のプルダウンから
もしくは
既存のAIMユーザーの「許可の追加」のプルダウンから
「ポリシーのアタッチ」を押下します。

先ほど作成したIAMポリシーにチェックを入れて次へ行き、許可を追加します。

IAMアクセスキーの発行

ポリシーが付与されているユーザーでアクセスキーを発行します。

ユーザーの「セキュリティ認証情報」のタブから下にスクロールし、「アクセスキーを作成」を押下します。

ユースケースは「コマンドラインインターフェイス(CLI)」を選択します。
確認にチェックを入れて次へ行き、アクセスキーを作成します。

【アクセスキー】と【シークレットアクセスキー】を控えます。

IAMアクセスキーを使ったAWS Configureの設定

git操作をしたいサーバでaws configureのプロファイルを作成します。

$ aws configure --profile test-repository_Operation

「アクセスキーと「シークレットキー」を使用してクレデンシャルを登録をしていきます。

AWS Access Key ID [None]: <アクセスキー>                  
AWS Secret Access Key [None]: <シークレットキー>
Default region name [None]: ap-northeast-1
Default output format [None]: 

クレデンシャル情報を編集していきます。

$ vi ~/.aws/configure

最下行に「role_arn」と「source_profile」を追記します。

role_arn = <MyAccountから受け取った【IAMロールのARN】>
source_profile = test-repository_Operation

最終的にプロファイルの設定が下記のようになっていればOKです。

[profile test-repository_Operation]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXX                  
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
region = ap-northeast-1
role_arn = arn:aws:codecommit:ap-northeast-1:999999999999:test-repository_Operation-Role
source_profile = test-repository_Operation

gitの設定と操作

gitコマンドを使用してconfigの設定をします。

$ git config --global credential.helper '!aws --profile test-repository_Operation codecommit credential-helper $@'
$ git config --global credential.UseHttpPath true

CodeCommitのリポジトリをクローンします。

$ git clone 【MyAccountからもらったCodeCommitのURL】

これで完了です。

他のGitリポジトリと干渉させたくない場合

「.gitconfig」のバックアップを取ります。

$ cp -p ~/.gitconfig ~/.gitconfig.bk

「.gitconfig」を編集します。

$ vi ~/.gitconfig

クレデンシャルが既に登録されている場合はコメントアウトをします。
クレデンシャルの登録がない場合はここのアクションは不要です。

[credential]
#        helper = !aws codecommit credential-helper $@
#        UseHttpPath = true

gitコマンドを使用してconfigの設定をします。

$ git config --global credential.helper '!aws --profile test-repository_Operation codecommit credential-helper $@'
$ git config --global credential.UseHttpPath true

CodeCommitのリポジトリをクローンします。

$ git clone 【MyAccountからもらったCodeCommitのURL】

catコマンドで開いて.gitconfigの[credential]とそのパラメータをコピーします。

$ cat ~/.gitconfig
-----ここからコピー-----
[credential]
        helper = !aws --profile test-repository_Operation codecommit credential-helper $@
        UseHttpPath = true
-----ここまでコピー-----

git cloneで出来たディレクトリに移動します。

$ cd test-repository

git configを編集します。

$ vi ./.git/config

最下部に.gitconfigからコピーした[credential]とそのパラメータを貼り付けます。

[credential]
        helper = !aws --profile test-repository_Operation codecommit credential-helper $@
        UseHttpPath = true

クローンしたディレクトリ配下でgit pullコマンドを実行し
「Already up to date.」が返ってくることを確認します。

$ git pull
Already up to date.

.gitconfigの内容を戻します。

$ cp -p ~/.gitconfig.bk ~/.gitconfig

変わらず、クローンしたディレクトリ配下でgit pullコマンドを実行し
「Already up to date.」が返ってくることを確認します。

$ git pull
Already up to date.

これで完了です。
ディレクトリ(リポジトリ)内のconfigの認証が正しければ
git操作が可能です。

あとがき

2024 年 7 月 25 日をもってCodeCommitの新規利用受け付けが終了し、
より一層需要のない記事になりました。
自己満足です。
CodeCommit終了悲しいですね.....。

この記事は下記AWSドキュメントを参考にしています。

https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/cross-account-user-b.html

https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up-https-unixes.html

https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/security-iam-awsmanpol.html

Discussion