aws-cli
を利用してAssumeRole(スイッチロール)を実施する場合。
下記2つの方法があるかと思います。
-
aws sts assume-role
コマンドを利用する -
.aws/config
と.aws/credentials
を利用する
本記事ではそれぞれの方法をつかったスイッチロールについて説明します。
今回利用するスイッチ元IAMユーザーについて
本記事で利用しているスイッチ元IAMユーザーについて。
スイッチ先のロールは、MFAを必須としているため、スイッチ元のIAMユーザにはMFAを設定し、スイッチ時にトークンを入力するように設定しています。
MFAデバイスのARNはスイッチ元IAMユーザーの認証情報、MFA デバイスの割り当て
に記載があります。
aws sts assume-role
コマンドを利用する
下記の例ではsts assume-role
コマンドでスイッチ先の一時的な資格情報を取得し、それを環境変数に設定することで利用しています。
# スイッチ元の情報確認
aws sts get-caller-identity --profile <<スイッチ元の資格情報>> --region ap-northeast-1
# aws sts assume-roleで一時的な資格情報を取得する
$credentials = aws sts assume-role --role-arn <<スイッチ先のロールARN>> --role-session-name <<任意のセッション名>> --profile <<スイッチ元の資格情報>> --serial-number <<arn:aws:iam::xxxxxxxxxxxx:mfa/xxxxxxxx:MFA割当>> --token-code <<MFAのトークン>> --region ap-northeast-1 --output json | ConvertFrom-Json
# 環境変数に一時的な資格情報を設定する
$Env:AWS_ACCESS_KEY_ID=$credentials.Credentials.AccessKeyId
$Env:AWS_SECRET_ACCESS_KEY=$credentials.Credentials.SecretAccessKey
$Env:AWS_SESSION_TOKEN=$credentials.Credentials.SessionToken
# profileを指定しないので、環境変数にセットした資格情報が利用される
aws sts get-caller-identity --region ap-northeast-1
.aws/config
と.aws/credentials
を利用する
ドキュメントにあるように、credentials
ファイルとconfig
にスイッチ元の資格情報とスイッチ先のロールarnを設定しておくことにより。
cliコマンド実行時に--profile
オプションで設定したプロファイルを指定するだけで、スイッチ先のロールの資格情報を引き受けてコマンドを実行してくれるようになります。
[<<profile名>>]
aws_access_key_id = <<スイッチ元のアクセスキー>>
aws_secret_access_key = <<スイッチ元のシークレットキー>>
[profile <<profile名>>]
role_arn = <<スイッチ先のロールarn>>
source_profile = <<profile alias>>
mfa_serial = <<MFAデバイスのARN>>
credentialsとconfigのサンプル
~/.aws/credentials
~/.aws/config
総評
.aws/config
と.aws/credentials
を利用するケースのほうが手軽かと思います。
またconfig
とcredentials
に記載してprofile指定で各ロールを切り替えられるように設定しておいて、PowerShellから下記で紹介しているPowerShellモジュールを併用するといい感じに切り替える事できます。