【AWS】aws-vaultを使ってMFAとAssume Roleを行う
aws-vaultのインストール
Macの場合はbrew caskでインストールできます。
$ brew install --cask aws-vault
aws-vaultで使用するユーザを作成し、アクセスキーの登録を行います。
$ aws-vault add プロファイル名
Enter Access Key Id:xxxxx
Enter Secret Key:xxxx
Macの場合キーチェーンにaws-vaultが使用する領域を作成します。そして、そのキーチェーンへアクセスするためのパスワードを設定します。
Assume Roleの準備
aws-vaultでキーチェーンにアクセスキーを登録したユーザからスイッチロールするための設定を行います。
- スイッチロール先のロールを作成する。
- ユーザにスイッチロールを許可するポリシーを持たせる
スイッチロール先のロールの作成
スイッチロール先のロールを作成します。ここでは例としてS3の読み取り権限のみ持つロールを作成します。
このロールへスイッチロール可能なAWSアカウントを信頼関係の編集から指定します。AWSアカウントは異なるアカウントでも、スイッチロール先と同じアカウントでも指定可能です。
以下のように記述します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::{スイッチロール元のAWSアカウントID}:root"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
スイッチロールするユーザに付与するポリシー
ユーザが作成したロールへスイッチロールできるようにポリシーを作成します。下記JSONのResourceにはスイッチロール先のロールのARNを指定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::xxxxxxxxxx:role/{スイッチロール先のロール名}"
}
]
}
ユーザにMFAを必須とするためのポリシーも作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"NotAction": [
"iam:*"
],
"Resource": "*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false"
}
}
}
]
}
この2つのポシリーをaws-vaultで使用するユーザに付与します。
aws configの設定
.aws/config ファイルにスイッチロールするための設定を追加します。MFAを必須とするためにスイッチロール先のプロファイルへmfa_serialを指定します。
# aws-vaultにアクセスキーを登録した際に生成される。
# アクセスキーはキーチェーンに保存されるためconfigファイルには記述されない。
[profile cli-s3-user]↲
↲
# スイッチロール先のロールのプロファイル
[profile cli-s3-read]↲
source_profile = cli-s3-user↲ # スイッチロールするユーザのプロファイル
role_arn = arn:aws:iam::xxxxxxx:role/S3ReadOnlyRole↲ # スイッチロール先ロールのARN
mfa_serial = arn:aws:iam::xxxxxxxx:mfa/cli-s3-user↲ # スイッチロールするユーザのMFAデバイスのARN
動作確認
以下のようにしてexecの後ろにスイッチロール先のプロファイル名を指定し、– の後ろに実行するコマンドを指定します。MFAの認証コードをキーチェーンのパスワードを入力後にS3のバケット名一覧が取得できます。
$ aws-vault exec cli-s3-read -- aws s3 ls
Enter token for arn:aws:iam::xxxxxxx:mfa/cli-s3-user: # MFAの認証コードを入力する
# キーチェーンのパスワード入力を求められる。
キーチェーンを確認
aws-vaultによってキーチェーンに追加された内容を確認します。キーチェーンを開き左側に「aws-vault」が表示されていない場合、以下の手順で追加します。
キーチェーンのファイル→「キーチェーンを追加」をクリックします。
「aws-vault.keychain-db」を選択し追加します。
aws-vaultによって登録された情報を確認することができます。