4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS CodeCommit をスイッチロールで利用する

Last updated at Posted at 2021-01-12

はじめに

CodeCommitリポジトリをスイッチロール権限でローカルにgit cloneすることを目的とします。
スイッチロールについてや設定方法については本記事では言及しません。

使用環境とバージョン

  • macOS Catalina
  • git version 2.24.3 (Apple Git-128)
  • aws-cli/2.0.28

記事の対象

  • ある程度AWSとGitの知識がある方
  • CodeCommitを利用して開発を行いたい方
  • CodeBuild、CodePipelineを使用したCI/CDに興味がある方

※ CodeCommitとGitの違いについて公式ドキュメントのQ&A
AWS CodeCommit のよくある質問

事前準備

  • Git 1.7.9 以降がインストールされていること(Macではプリインストールされているはず)
  • スイッチロールを作成済み。スイッチロール先にCodeCommit操作権限が付与されていること

1. AWS CLIのインストール

以下のコマンドを実行し、AWS CLIをインストールします。

$ brew install awscli  // 更新の場合: brew upgrade awscli
...

$ aws --version
aws-cli/2.0.28 Python/3.8.3 Darwin/19.5.0 botocore/2.0.0dev32

2. IAMユーザのアクセスキーとシークレットキーを発行

AWS CLIを使用するためにはIAMユーザを紐づける必要があります。
事前にAWSコンソールから自身のユーザを選択し、アクセスキーを発行します。
screencapture-002.png

3. configおよびcredentialsを設定

aws configureコマンドを使用して、AWS CLIに事前に取得したアクセスキーシークレットキーを設定します。

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

上記コマンドを実行することで以下の2ファイルに設定が追加されます。

~/.aws/credentials
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=xxxxxxxxxxxxxxxxx
~/.aws/config
[default]
region=ap-northeast-1
output=json

4. configにスイッチ先のプロファイル情報を記載

configにスイッチ先のプロファイル情報を追加します。
追加したプロファイルを指定することで自身のIAMユーザに権限がアタッチされていないサービスでもスイッチロール先の権限を利用してサービスを利用できます。

~/.aws/config
[default]
region=ap-northeast-1
output=json

+ [profile switchrole]
+ role_arn = arn:aws:iam::{スイッチ先のAWSアカウントID}:role/{ロール名}
+ source_profile = default
+ region=ap-northeast-1
+ output=json

5. 認証情報ヘルパーを設定

Gitでは認証情報ヘルパーを利用して先ほど追加したプロファイルを指定します。
以下のコマンドで認証情報ヘルパーにプロファイル情報を設定してください。

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

$ git config --global user.name "kazuki.kano"
$ git config --global user.email kano@xxxx

user.nameなどのユーザ情報は適宜設定してください。
設定ルールなどを決めて設定することをお勧めします。

設定内容は以下のようになります。

~/.gitconfig
[credential]
	helper = !aws --profile switchrole codecommit credential-helper $@
	UseHttpPath = true
[user]
	name = kazuki.kano
	email = kano@xxxx

6. CodeCommitからclone

あとはGitリポジトリと同様にcloneすれば完了です。

$ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/demo-api

しばらくすると以下のようなエラーが発生する場合があります。

fatal: unable to access 'https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/demo-api/': The requested URL returned error: 403

これはAWS公式のドキュメントにもあるように、macOSではKeychain Access ユーティリティによりCodeCommitリポジトリへのアクセスは15分で無効になります。

OS X および macOS でリリースされているデフォルトバージョンの Git では、Keychain Access ユーティリティを使用して、生成された認証情報を保存します。セキュリティ上の理由により、CodeCommit リポジトリにアクセスするために生成されるパスワードは一時パスワードであるため、15 分経過すると、キーチェーンに保存されている認証情報は無効になります。

認証情報ヘルパーと AWS CodeCommit への HTTPS 接続のトラブルシューティング

対処法は以下のようにhelper = osxkeychainをコメントアウトして下さい。

$ git config -l --show-origin | grep credential
file:/Library/Developer/CommandLineTools/usr/share/git-core/gitconfig   credential.helper=osxkeychain
file:/usr/local/etc/gitconfig	credential.helper=osxkeychain
...

$ sudo vi /Library/Developer/CommandLineTools/usr/share/git-core/gitconfig
[credential]
        # helper = osxkeychain  // コメントアウトします

上記だけで認証できない場合は、Keychain Access ユーティリティに認証情報が残っている可能性があるのでこちらはアプリから削除して下さい。
スクリーンショット 2021-01-12 11.22.51.png
検索ウインドでgitなどで検索すると絞り込めます。
スクリーンショット 2021-01-12 11.23.25.png

参考記事

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?