fish
fisherman

[fish shell] AWS IAM スイッチロールを行う fisherman プラグインを作成しました

More than 1 year has passed since last update.

AWSを使っていると、複数のアカウントが必要になるシーンも多いと思います。AWSはこのようなシーンに対して Switch Role を行うことを推奨しています。だいたい以下の流れになるはずです。

  1. ~/.aws/config にAWS アカウント情報を書く
  2. ベースとなるアカウントから切り替え先アカウントへの assume role を行う
    • awsコマンドを実行することで一時アクセストークンが手に入る
  3. 一時アクセストークンを環境変数にセット
  4. 切り替え先のアカウントで aws リソースを操作できるようになる

このプラグインは2,3を自動化するものです。 ~/.aws/config が存在すること前提となりますのでご注意ください。

あらかじめ用意しておくもの

インストール

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 が公開され次第修正します。また、テストについても順次追加していきます。

参考

以下のプロジェクトを参考にさせていただきました。