【AWS】aws-vaultを使ってMFAとAssume Roleを行う

2021年3月10日

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でキーチェーンにアクセスキーを登録したユーザからスイッチロールするための設定を行います。

  1. スイッチロール先のロールを作成する。
  2. ユーザにスイッチロールを許可するポリシーを持たせる

スイッチロール先のロールの作成

スイッチロール先のロールを作成します。ここでは例としてS3の読み取り権限のみ持つロールを作成します。

AWSロールの権限設定

このロールへスイッチロール可能なAWSアカウントを信頼関係の編集から指定します。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を追加する

「aws-vault.keychain-db」を選択し追加します。

aws-vaultのデータを追加する

aws-vaultによって登録された情報を確認することができます。

aws-vaultによって登録された情報を確認できる

AWS

Posted by fanfanta