【CodeCommit】CLIを使ったクロスアカウント方法について

記事タイトルとURLをコピーする

こんにちは。AWS CLIが好きな福島です。

はじめに

今回は、CodeCommitへCLIを使ったクロスアカウント方法をブログに記載いたします。

CLIを使ったCodeCommitへのアクセス方法

まず初めにCodeCommitへのアクセスする方法は複数ありますが、クロスアカウントする場合は1つの方法しかございません。

そのため、今までシングルアカウントで運用していたが、アカウントの数が増え、クロスアカウントする必要が出てきた場合に本ブログが参考になるかと存じます。

  • シングルアカウント
    ①Gitクレデンシャルを用いたアクセス
    ②公開鍵/秘密鍵を用いたアクセス
    ③git-remote-codecommitを利用したアクセス
    ④AWS CLIに含まれる認証情報ヘルパーを利用したアクセス
  • クロスアカウント
    ⑤IAMロールを利用したクロスアカウントアクセス (本ブログで記載する内容)

◆各アクセス方法の参考 docs.aws.amazon.com

概要図

概要図は以下の通りです。
今回は、111111111111というAWSアカウントのIAMユーザー(クレデンシャル)を使い、222222222222というAWSアカウントに存在するIAMロールへスイッチロールし、CodeCommitへアクセスいたします。

ポイントなのが、図にも記載の通り、git-remote-codecommitというツールが必要という点になるかと存じます。 ※認証情報ヘルパーを使うことも可能なようですが、git-remote-codecommitを使うことが推奨されています。

前提

  • IAMユーザーおよびIAMロールが既に作成済みであること

作成できていない場合は、以下を参考に作成してください。 今回の例でいうとAccountBは111111111111、AccountAは222222222222となります。

リポジトリへのクロスアカウントアクセス: AccountA の管理者のアクション - AWS CodeCommit

リポジトリへのクロスアカウントアクセス: AccountB の管理者のアクション - AWS CodeCommit

手順

①git-remote-codecommitの導入(既に導入されている場合、対応不要です。)

pipコマンドを使い、git-remote-codecommitの導入します。

pip install git-remote-codecommit

※pipが導入されていない場合、以下を参考に導入します。

Welcome to Python.org

②AWS CLIの導入(既に導入されている場合、対応不要です。)

以下を参考にAWS CLIを導入します。

Installing or updating the latest version of the AWS CLI - AWS Command Line Interface

③Gitの導入(既に導入されている場合、対応不要です。)

以下のどちらかを参考にGitを導入します。

Git - Downloads

Git for Windows

④Gitの設定(既に設定されている場合、対応不要です。)

リポジトリをクローンするディレクトリでuser.nameおよびuser.emailを設定します。

  • 実行例
git config --local user.name "Kazuya Fukushima"
git config --local user.email fukushima@example.com

⑤AWS CLIのProfileの設定

  • ~/.aws/credentialsというファイルを作成し、以下を設定します。

こちらは概要図でいうところの「iam-user」のクレデンシャル情報を設定します。

[【任意の名前1】]
aws_access_key_id = 【アクセスキーID】
aws_secret_access_key = 【シークレットアクセスキー】

※1【】の箇所は適切な値を設定します。【任意の名前1】が思いつかない場合、bastionで良いかと存じます。
※2 クレデンシャルを持っていない場合、以下を参考に作成してください。
IAM ユーザーのアクセスキーの管理 - AWS Identity and Access Management

  • ~/.aws/configというファイルを作成し、以下を設定します。
[profile 【任意の名前1】]
region = ap-northeast-1
output = json

[profile 【任意の名前2】]
region = ap-northeast-1
output = json
account = 【スイッチ先のアカウントID】
role_arn = 【スイッチするロールのARN】
source_profile = 【任意の名前1】
mfa_serial = arn:aws:iam::【スイッチ元ののアカウントID】:mfa/【IAMユーザー名】

※1【】の箇所は適切な値を設定します。
※2 mfa_serialの箇所は、MFA認証が不要な場合、不要です。

  • 設定例
[profile bastion]
region = ap-northeast-1
output = json

[profile MyCrossAccountAccessProfile]
region = ap-northeast-1
output = json
account = 222222222222
role_arn = arn:aws:iam::222222222222:role/CodeCommitRole
source_profile = bastion
mfa_serial=arn:aws:iam::111111111111:mfa/iam-user

以上で準備は完了です!

⑥git cloneの実行

git clone codecommit://【任意の名前2】@【リポジトリ名】
  • 実行例
git clone codecommit://MyCrossAccountAccessProfile@CrossRepository

その他のコマンドは通常のgit操作で同様の操作が可能です。

  • 実行例
# touch NewFile.txt
#
# git add NewFile.txt
#
# git commit -m "Added a file to test cross-account access to this repository"
[master a3001ae] Added a file to test cross-account access to this repository
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 NewFile.txt
#
# git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Writing objects: 100% (3/3), 289 bytes | 289.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To codecommit://CrossRepository
   765eeb8..a3001ae  master -> master
#

終わりに

今回は、CodeCommitへCLIを使ったクロスアカウント方法についてまとめてみました。どなたかのお役に立てれば幸いです。

福島 和弥 (記事一覧)

SRE3課

2019/10 入社

AWS CLIが好きです。