AWS CLI v2 でスイッチロールする

AWS CLI を使って作業する際、スイッチロールする必要が出たのでやり方を調べた。

目次

AWS CLI v2 を前提にする

今回は Mac 環境にインストールした AWS CLI v2 を前提とする。AWS CLI v2 は以下から .pkg ファイルをダウンロードしインストールした。

初期セットアップを行う

まずは aws configure コマンドで初期セットアップを行う。ココで入力する情報はスイッチロール前の IAM ユーザの情報で良い。

$ aws configure
AWS Access Key ID [None]: 【受領したアクセスキー ID を入力する】
AWS Secret Access Key [None]: 【受領したシークレットアクセスキーを入力する】
Default region name [None]: ap-northeast-1
Default output format [None]: json

以下の2ファイルが生成されていることを確認する。

$ cat ~/.aws/config
[default]
region = ap-northeast-1
output = json

$ cat ~/.aws/credentials
[default]
aws_access_key_id = 【アクセスキー ID】
aws_secret_access_key = 【シークレットアクセスキー】

スイッチロールのための情報を取得する

スイッチロール前のユーザで IAM マネジメントコンソールにログインする。

「ユーザー」より自身のユーザ情報を開き、「認証情報」タブから「MFA デバイスの割り当て」欄の情報を取得する。

次に「ロール」よりスイッチロール先のロール名を開き、「ロール ARN」を取得する。

プロファイルを作成する

~/.aws/config を開き、次のように [profile] セクションを追加する。

$ cat ~/.aws/config

[default]
region = ap-northeast-1
output = json

[profile my-profile]
region = ap-northeast-1
mfa_serial = arn:aws:iam::【アカウント ID】:mfa/【ユーザ名】
role_arn = arn:aws:iam::【アカウント ID】:role/【ロール名】
source_profile = default

コマンド利用時に MFA 認証を行う

以上で設定は完了。以降は、1時間に1度、コマンド実行時に MFA 認証が必要になる。以下でプロファイルの切り替えと MFA 認証の手順を参考にされたし。

# Default プロファイルで AWS CLI コマンドを使用している
$ aws sts get-caller-identity
{
    "UserId": "【ユーザ ID】",
    "Account": "【アカウント ID】",
    "Arn": "arn:aws:iam::【アカウント ID】:user/【ユーザ名】"
}

# 追記したプロファイルで AWS CLI コマンドを使用。MFA 認証を行う
$ aws sts get-caller-identity --profile my-profile
Enter MFA code for arn:aws:iam::【アカウント ID】:mfa/【ユーザ名】: 【MFA 認証コードを入力する】
{
    "UserId": "【ユーザ ID】:botocore-session-【セッション ID】",
    "Account": "【アカウント ID】",
    "Arn": "arn:aws:sts::【アカウント ID】:assumed-role/【ロール名】/botocore-session-【セッション ID】"
}

# スイッチロールできていないと次のようにエラーになる
$ aws s3 ls
An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied

以上。