AWSを使っていると、複数のアカウントが必要になるシーンも多いと思います。AWSはこのようなシーンに対して Switch Role を行うことを推奨しています。だいたい以下の流れになるはずです。
- ~/.aws/config にAWS アカウント情報を書く
- ベースとなるアカウントから切り替え先アカウントへの assume role を行う
- awsコマンドを実行することで一時アクセストークンが手に入る
- 一時アクセストークンを環境変数にセット
- 切り替え先のアカウントで aws リソースを操作できるようになる
このプラグインは2,3を自動化するものです。 ~/.aws/config が存在すること前提となりますのでご注意ください。
あらかじめ用意しておくもの
-
aws/aws-cli: Universal Command Line Interface for Amazon Web Services
- assume role の aws コマンドを実行するため使います
-
stedolan/jq: Command-line JSON processor
- assume role の結果パースに使います
インストール
fisher waddyu/aws_swrole
使用方法
aws_swrole [-o] <aws profile>
- -o オプションを指定すると、 AWS_XXX 環境変数をセットするためのコマンドを出力するにとどめます(セットまではしません)。
- -o オプションをつけない場合、AWS_XXX 環境変数をセットした状態で新しいシェルを起動します。
- AWSのアクセストークンは仕様に則り約1時間で無効になります。
使用例
$ aws_swrole
Usage: swrole [-o] <aws profile>
Defined profiles:
development
test
staging
production
$ aws_swrole development
Enter MFA code > 123456
$ aws dynamodb list-tables --region ap-northeast-1
{
"TableNames": [
"Movies"
]
}
$ aws_swrole -o test
Enter MFA code > 123456
set -x AWS_ACCESS_KEY_ID XXXXXXXXXXXXXXXXXX
set -x AWS_SECRET_ACCESS_KEY YYYYYYYYYYYYYYYYYYYYYYYY
set -x AWS_SESSION_TOKEN ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
残課題
fish 2.7.0が待たれます。具体的には以下の課題の解決により、いくつかの追加実装が可能になります。
2017年7月11日現在、fish には 「新しいシェルを対話モードで実行し、新しいシェルでいくつかの事前コマンドを実行する」という機能がありません。bashの場合は
ENV=test \ PASSWORD=123455 \ bash
というように指定することができます。これに相当する機能が fish shell に実装されると
- 新しいシェルのプロンプトを変更し、どのプロファイルを使っているのかをわかりやすくする
- シェルごとに環境変数を設定し、
aws_swrole
の多段利用でもエラーが発生しないようにする
これらに対処できます。fish shell v2.7.0 が公開され次第修正します。また、テストについても順次追加していきます。
参考
以下のプロジェクトを参考にさせていただきました。