LoginSignup
14
6

More than 3 years have passed since last update.

AWS CLI スイッチロール設定

Last updated at Posted at 2020-02-21

Linux 環境で config を編集

config の確認

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

上記 config にスイッチロールを追記

# エディタを起動し config を編集
$ vi ~/.aws/config

エディタ起動時はコマンドモード
i でカーソル位置から文字の入力が可能(インサートモード)となる

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

[profile 【スイッチロールするプロファイル名】]
role_arn = arn:aws:iam::【スイッチロールするアカウント】:role/【スイッチロール名】
source_profile = default

編集後は Esc でコマンドモードへ戻り、:wq で上書き保存
保存せずに終了する場合は :q
強制終了は :q!

# スイッチロールで aws cli を利用
$ aws 【実行するコマンド等】 --profile 【スイッチロールするプロファイル名】

スイッチロールをデフォルトにしたい場合は credentials を編集

credentials の確認

$ cat ~/.aws/credentials
[default]
aws_access_key_id = ZZZZZZZZZZZZZZZZZZZZ
aws_secret_access_key = 9999999999999999999999999999999999999999

エディタを起動し credentials を編集

$ vi ~/.aws/credentials

デフォルトの aws_access_key_id, aws_secret_access_keydefault 以外のプロファイルを命名
[default]role_arn にスイッチロールを、source_profile にデフォルトのプロファイル名をそれぞれ記載する

[【デフォルトのプロファイル名】]
aws_access_key_id = ZZZZZZZZZZZZZZZZZZZZ
aws_secret_access_key = 9999999999999999999999999999999999999999

[default]
role_arn = arn:aws:iam::【スイッチロールするアカウント】:role/【スイッチロール名】
source_profile =【デフォルトのプロファイル名】

現在使用しているプロファイルの確認

$ aws sts get-caller-identity
{
    "UserId": "XXXXXXXXXXXXXXXXXXXXX",
    "Account": "000000000000",
    "Arn": "arn:aws:iam::000000000000:user/【ユーザ名】"
}

シェルスクリプトで sts assume-role を利用

AWS_STS_CREDENTIALS=`aws sts assume-role \
  --role-arn arn:aws:iam::000000000000:role/【ロール名】\
  --role-session-name【スイッチロールセッション中の名前】\
  --duration-seconds【スイッチロールセッション時間 900秒(15分)~最大はIAMの設定次第】`

AWS_ACCESS_KEY_ID=`echo "${AWS_STS_CREDENTIALS}" | jq -r '.Credentials.AccessKeyId'`
AWS_SECRET_ACCESS_KEY=`echo "${AWS_STS_CREDENTIALS}" | jq -r '.Credentials.SecretAccessKey'`
AWS_SESSION_TOKEN=`echo "${AWS_STS_CREDENTIALS}" | jq -r '.Credentials.SessionToken'`

export AWS_ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY
export AWS_SESSION_TOKEN

【スイッチロール中に実行したいコマンド等】

unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN

【参考】
https://dev.classmethod.jp/etc/cli-switch-role/
https://dev.classmethod.jp/cloud/aws/get-aws-account-id-with-get-caller-identity/
https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role.html

14
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6