AWSでコード管理をするとなると真っ先に出てくるのはCodeCommitですが、複数のリポジトリを管理しているときに一部ユーザには別のリポジトリを参照させたくない、という場面もあるかと思います。
今回はCodeCommitのリポジトリタグを使用して、アクセス先のリポジトリを制御してみます。
実施作業
リポジトリ作成
まずは別々の値を設定したTESTKEYタグを持つ2つのリポジトリを作成します。
以下のtest-a-repoとtest-b-repoはそれぞれTESTKEYタグを持っており、AとBという異なる値が設定されています。
IAMポリシー作成
次にIAMグループに設定するIAMポリシーを作成していきます。
actionにはcodecommitに対してすべての権限を許可するように設定します。
ただし、ConditionでリソースタグTESTKEYがAを持つリソースにしか操作できないように設定します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "codecommit:*", "Resource": "arn:aws:codecommit:ap-northeast-1:12345678912:*", "Condition": { "StringEquals": { "aws:ResourceTag/TESTKEY": "A" } } } ] }
IAMグループ作成
先ほど作成したIAMポリシーを新しく作成したIAMグループにアタッチします。
IAMユーザ作成
IAMグループまでできたら実際にCodeCommitの操作を行うIAMユーザを作成します。
今回はIAMユーザにはコンソールへのアクセスは不要なので、プログラムによるアクセスに限定します。
アクセス許可の設定では、作成したIAMグループにチェックを入れます
IAMユーザにはタグは設定しないので、そのまま作成します。
※アクセスキーとシークレットキーをメモするのを忘れないようにしてください。
開発端末でのCodeCommitへの接続設定
IAMユーザまで設定出来たら開発端末で設定をしていきます。
gitを使って開発するような方だとMacとかLinux使ってそうな気がしますが、今回は敢えてWindowsでの設定を実施していきます。
CodeCommitへのアクセス方法としてSSH認証かHTTPS認証の2通りありますが、SSH認証だとSSHパブリックキーのアップロードが必要、HTTPS認証だとIAMユーザごとに認証情報を生成が必要、といったように少し手間がかかります。
git-remote-codecommitを使えばIAMユーザのアクセスキーとシークレットキーがあればCodeCommitへアクセスができるようになりますが、前提条件としてPython、pip、Gitのインストールが必須なので設定に少し手間がかかります。
michimani.net
そこで今回はGitとAWS CLIの認証情報ヘルパーを使用してCodeCommitへアクセスするように設定していきます。
nopipi.hatenablog.com
AWS CLIのインストール
最初に設定に必要なAWS CLIを以下の手順に従ってインストールします。
docs.aws.amazon.com
ダウンロードしたMSIインストーラを実行してAWS CLIをインストールします。
※画面に従って進めればインストールできるので割愛ます。
インストールできたらコマンドプロンプトかPowerShellを起動して、以下のコマンドを実行してhelpが表示されることを確認します。
# aws
インストールができたら以下のコマンドを実行して、作成したIAMユーザのアクセスキー、シークレットキー、リージョン、アウトプットフォーマットをAWS CLIの認証情報を設定します
# aws configure --profile test-codecommit AWS Access Key ID [None]: ABCDEFGHIJKLMNOPQRSTUVWXYZ AWS Secret Access Key [None]: ABCDEFGHIJKLMNOPQRSTUVWXYZ Default region name [None]: ap-northeast-1 Default output format [None]: json
Gitのインストール
AWS CLI設定ができたら、次はCodeCommitへのアクセスに必須なGitを以下からダウンロードしてインストールしていきます。
git-scm.com
インストールできたらコマンドプロンプトかPowerShellを起動してgitコマンドを実行し、helpが表示されることを確認します。
git設定
コンソールで以下のコマンドを実行し、gitの設定をします。
# git config --global user.email "xxxx.xxxx@gmail.com" # git config --global user.name "xxxx.xxxx" # git config --global push.default simple # git config --global -l
次に以下のコマンドを実行してgit認証ヘルパーが設定できたらCodeCommitへの接続設定は完了です。
※
git config --global credential.helper '!aws --profile <profile name> codecommit credential-helper $@' git config --global credential.UseHttpPath true
CodeCommitからのgit clone
ここまで設定出来たらCodeCommit上のリポジトリからgit cloneでファイルを取得するのですが、取得したことがわかりやすいようにテストファイルを作成しておきます。
ファイルが作成できたら、git cloneする用のURLを取得します。
今回はHTTPSのクローンを選択します。
クローンしたURLをコンソールで実行したら、対象のリポジトリが取得され...
# git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test-a-repo
あれ?何故か認証ポップアップが出てきてますね。
以下の手順を見ると、Gitインストール時にGit 認証情報マネージャーユーティリティをインストールしていると、AWS CLIの認証情報を確認しにいかずにうまくいかないことがあるそうです。
docs.aws.amazon.com
CodeCommitからのgit clone(2回目)
一度Gitをアンインストールして、インストール時に以下のチェックを外してGitを再インストールします。
Git初期設定をもう一度行って、再度git cloneコマンドを実行します。
何故かもう一度認証情報を聞かれましたが、キャンセルしたらその後にgit cloneが実行されました。
問題なく指定したリポジトリのソースを取得することができているようです。
PS C:\work\test-repo-a> ls ディレクトリ: C:\work\test-repo-a Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2020/07/02 13:58 test-a-repo
※ちなみに認証情報を聞かれた件は、以下の設定を実施したら解消しました。
qiita.com
※既に認証情報を保存してしまった人は以下から対象の認証情報を削除してから再度git cloneを実行してください
コントロールパネル>すべてのコントロール パネル項目>資格情報マネージャー>Windows資格情報
権限のないリポジトリへのアクセス許可設定
作成したIAMユーザが権限的にアクセスできないリポジトリをクローンしようとした場合、403エラーで失敗します。
PS C:\work\test-repo-b> git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test-b-repo Cloning into 'test-b-repo'... fatal: unable to access 'https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/test-b-repo/': The requested URL returned error: 403
そのもう一つのリポジトリにアクセスするためのIAMポリシーを作成します。
作成したIAMポリシーをIAMグループにアタッチし、今回作成・設定していたIAMユーザを追加します。
※追加してから反映されるまで若干のラグがあります。
再度git cloneすると、先ほどクローン出来なかったリポジトリのソースが取得されました。
これでアクセスさせたいリポジトリの権限を付けたIAMグループに、指定のIAMユーザを追加するだけでアクセス先を制御できるようになりました。
感想及び所感
今回はActionにCodeCommitを設定していましたが、同じ設定は他のサービスでも利用できると思うので、応用の幅は広そうです。