先輩方に感謝しながらAssume Roleスクリプト書いてみました

2021.01.27

はじめに

CX事業本部の吉川です。

AWS CLIでAssume Roleするのが手間が多く辛かったので、私もスクリプトを作ってみました。
先輩方の上の記事を参考にさせて頂きました。

MFA必須の設定がされている前提になります。

シェルスクリプト

#!/bin/bash

SERIAL_NUMBER='arn:aws:iam::MY_AWS_ACCOUNT_ID:mfa/MY_USER'
SOURCE_PROFILE='MY_SOURCE_PROFILE'
DATE=`date +%s`

echo 'Profile?'
read PROFILE

echo 'MFA Code?'
read TOKEN_CODE

ROLE_ARN=`aws configure get role_arn --profile $PROFILE`

OUTPUT=`aws sts assume-role \
  --role-arn          ${ROLE_ARN} \
  --serial-number     ${SERIAL_NUMBER} \
  --role-session-name ${DATE}-session \
  --profile           ${SOURCE_PROFILE} \
  --duration-second   3600 \
  --token-code        ${TOKEN_CODE}
`

export AWS_DEFAULT_REGION='ap-northeast-1'
export AWS_ACCESS_KEY_ID=`echo $OUTPUT | jq -r .Credentials.AccessKeyId`
export AWS_SECRET_ACCESS_KEY=`echo $OUTPUT | jq -r .Credentials.SecretAccessKey`
export AWS_SESSION_TOKEN=`echo $OUTPUT | jq -r .Credentials.SessionToken`

今回はAWS CLI以外に依存がないことを目指しました。
コピペするだけで使えます。

使い方

~/.aws/config が下の記述だったとします。

[profile MY_SOURCE_PROFILE]
region = ap-northeast-1
output = json
[profile TARGET_PROFILE]
role_arn = arn:aws:iam::TARGET_AWS_ACCOUNT_ID:role/TARGET_ROLE
source_profile = MY_SOURCE_PROFILE

MY_SOURCE_PROFILEにログインして、TARGET_PROFILEへAssume Roleしたいという想定です。

. ./assume-role.sh # スクリプト実行
Profile?
TARGET_PROFILE # Assume RoleしたいProfile名を入力
MFA Code?
xxxxxx # ワンタイムパスワードを入力

以上でAssume Roleができます。