こんにちは。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が導入されていない場合、以下を参考に導入します。
②AWS CLIの導入(既に導入されている場合、対応不要です。)
以下を参考にAWS CLIを導入します。
Installing or updating the latest version of the AWS CLI - AWS Command Line Interface
③Gitの導入(既に導入されている場合、対応不要です。)
以下のどちらかを参考にGitを導入します。
④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を使ったクロスアカウント方法についてまとめてみました。どなたかのお役に立てれば幸いです。
福島 和弥 (記事一覧)
2019/10 入社
AWS CLIが好きです。
AWS資格12冠。2023 Japan AWS Partner Ambassador/APN ALL AWS Certifications Engineer。