LoginSignup
2
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-07-11

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

参考

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

2
3
1

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
2
3