AWS Vaultを使ったロールチェインで目的のアカウントのマネコンを開く
こんにちは、データ事業本部のキタガワです。
AWSを使う上で認証情報の保存はどうしてますか?
僕は AWS Vault を使っています。
これはIAM認証情報をOSのキーストア(macOSであればキーチェーン)に保存し、そこから一時的な認証情報を生成して、シェルやアプリケーションに展開するCLIツールです。
これを使うことでローカルの端末に認証情報を書いた ~/.aws/credentials
などのテキストファイルが不要になります。
やっぱり認証情報をテキストに保存しておきたくはないですからね。
そのAWS Vaultですが、実はプロファイルを指定して特定のAWSアカウントのマネージメントコンソール画面(以下マネコン)を開く機能も持っています。
今回はこの機能を利用して、ロールチェインした先にあるアカウントのマネコンを開く方法を書いていきます。
背景
AWSを複数アカウントで利用する場合、スイッチロールを行って別のアカウントを操作するのが一般的かと思います。
このスイッチロールは一回のAssume Roleで行ける範囲であればマネコンから簡単に行えます。
ところが複数回Assume Roleを行ってようやく辿り着けるようなアカウントの場合、マネコンからではスイッチロールができません。
簡単に図に表しますと、パターンAはマネコンでできるがパターンBはマネコンではできない、ということになります。
でもやっぱり組織の規制や諸々の事情でどうしてもこの構成にしないといけない、ということもあると思います。
その場合、アカウントCのマネコンはどうやって開けば良いのでしょうか?
AWS Vault
AWS Vaultを使うと簡単に前項の目的が達成できます。
AWS Vault自体は先頭でも述べた通り、認証情報を安全に利用するためのツールです。
その一環として、指定したプロファイルでマネコンを開くことができるURLを生成する機能があります。
AWS Vaultを使用するにはまずインストールをする必要があります。
例えばmacOSではHomebrewを使って brew install --cask aws-vault
でインストールできます。
詳しくは 公式GitHubページ を参照してください。
AWS Vaultの設定
設定をしていきます。
まず ~/.aws/config
を次のように設定します。
[profile default]
region = ap-northeast-1
[profile demo-user]
region = ap-northeast-1
output = json
mfa_serial = arn:aws:iam::AAAAAAAAAAAA:mfa/demo-user
[profile demo-default]
credential_process = aws-vault exec demo-user --json --prompt=terminal
[profile demo-role1]
region = ap-northeast-1
source_profile = demo-default
role_arn = arn:aws:iam::BBBBBBBBBBBB:role/demo-role1
[profile demo-role2]
region = ap-northeast-1
source_profile = demo-role1
role_arn = arn:aws:iam::CCCCCCCCCCCC:role/demo-role2
それぞれ軽く説明すると、前出の図では demo-user
, demo-role1
, demo-role2
がそれぞれアカウントAのユーザー、アカウントBのIAMロール、アカウントCのIAMロールに対応します。
今回はロールチェインが目的ですので demo-role2
のsource_profileには demo-role1
を設定しています。
IAMユーザーにMFA認証が不必要な場合はmfa_serialの行を削除してください。
また demo-default
を挟むことでMFA認証済みのIAMユーザー情報を取得できるようにしています。
次に aws-vault add demo-user
で demo-user
プロファイルに認証情報を保存します。
❯ aws-vault add demo-user
Enter Access Key ID: AKIAXXXXXXXXXXXXXXXX
Enter Secret Access Key: ****************************************
Added credentials to profile "demo-user" in vault
aws-vault list
で次のように表示されていれば設定完了です。
❯ aws-vault list
Profile Credentials Sessions
======= =========== ========
default - -
demo-user demo-user -
demo-default - -
demo-role1 - -
demo-role2 - -
マネコンを開く
ここまでで設定が済みましたので、あとは目的のマネコンを開くだけです。
コマンドは aws-vault login <profile>
を使用します。
MFAの設定がある場合はワンタイムパスワードが求められるので入力してください。
❯ aws-vault login demo-role2
Enter MFA code for arn:aws:iam::482842011168:mfa/demo-user: 000000
うまく認証が通るとブラウザが立ち上がり、マネコンが開かれると思います。
あとは与えられたロールの権限の範囲で自由に操作が可能となります。
余談
ログインした画面を確認すると、右上のロール名の後にランダムな数字の文字列が付与されていると思います。
これはセッション名に当たります。
特に問題ない場合はこのままでもいいですが、気になる方やセッション名に制限があるような環境ではロールのプロファイルにrole_session_nameを指定してください。
例えば demo-role2
では次のように指定できます。
[profile demo-role2]
region = ap-northeast-1
source_profile = demo-role1
role_arn = arn:aws:iam::CCCCCCCCCCCC:role/demo-role2
role_session_name = demo-role2
最後に
以上です!
AWS Vaultはここに述べた以外にも便利な機能がたくさんあり、また認証情報を安全に扱うこともできるのでぜひ利用してみてください。
この記事で気づいた点や疑問点があればフィードバックをお待ちしております。
それではまた次の記事でお会いしましょう。