はじめに
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コンソールから自身のユーザを選択し、アクセスキーを発行します。
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ファイルに設定が追加されます。
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=xxxxxxxxxxxxxxxxx
[default]
region=ap-northeast-1
output=json
4. configにスイッチ先のプロファイル情報を記載
configにスイッチ先のプロファイル情報を追加します。
追加したプロファイルを指定することで自身のIAMユーザに権限がアタッチされていないサービスでもスイッチロール先の権限を利用してサービスを利用できます。
[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
などのユーザ情報は適宜設定してください。
設定ルールなどを決めて設定することをお勧めします。
設定内容は以下のようになります。
[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 ユーティリティ
に認証情報が残っている可能性があるのでこちらはアプリから削除して下さい。
検索ウインドでgit
などで検索すると絞り込めます。