AWS CLIのスイッチロール、もっと楽でいいじゃないか(assume-roleツールを使おう)


前書き

  • 先輩に教えてもらって便利!!ってなったので紹介

そもそもAssumeRoleとは

  • ロールを引き受けられる機能。ロールを引き受けることにより、ロール側で定義している権限での操作が可能になる。

下記のはっちゃけた記事がおもしろくわかりやすかったです。

https://dev.classmethod.jp/articles/iam-role-passrole-assumerole/

“assume-role” is 何?

  • 一時クレデンシャルをシェルの環境変数にセットしてコマンド実行してくれるいいやつ。

https://github.com/remind101/assume-role

何が良いか

  • そもそも—profileオプションに対応していないコマンドにおいても便利になる。
  • evalなどでクレデンシャルをセットすればコマンドごとにprofileを指定してMFAの認証コード打って...という手間がなくなる。
  • スイッチロールでいろいろアカウントまたいで作業しなきゃならないときに楽。

Assuむってみる

※適当にprofileは作っておいてください。

  • evalコマンドで、引数に与えたクレデンシャル情報をシェルに実行させる。

eval $(assume-role {profile名})

hogehoge$ eval $(assume-role hogehoge)
MFA code: xxxxxx
hogehoge$ 

これでクレデンシャルがシェルにセットされたので、いつものようにCLIを実行できます。

ちなみに assume-role profile名export AWS_ACCESS_KEY_ID... のような形式の出力で返してくるのでそのままevalコマンドの引数に与えるとクレデンシャル情報をシェルにセットするという挙動になっているっぽいですね。

https://github.com/remind101/assume-role#:~:text=If no command,assume-role prod)

If no command is provided, assume-role will output the temporary security credentials:
`$ assume-role prod
export AWS_ACCESS_KEY_ID="ASIAI....UOCA"export AWS_SECRET_ACCESS_KEY="DuH...G1d"export AWS_SESSION_TOKEN="AQ...1BQ=="export AWS_SECURITY_TOKEN="AQ...1BQ=="export ASSUMED_ROLE="prod"# Run this to configure your shell: