投稿

SSO の一時認証情報を aws configure export-credentials で環境変数に渡す

SSO の一時認証情報を aws configure export-credentials で環境変数に渡す

参考: aws configure export-credentials

これまでのやり方

環境変数 AWS_ACCESS_KEY_ID などから認証情報を読むツールを動かすとき、AWS access portal の「環境変数を設定する」から export の 3 行をブラウザでコピーし、端末に貼っていた。 このやり方だと、一時的なアクセスキーが不用意にログへ残っていた。

SSO の config の書き方は AWS SSO の config を sso-session 形式に寄せる手順と Terraform の対応バージョン に書いた。

コマンド

eval "$(aws configure export-credentials --profile <プロファイル> --format env)"

aws configure export-credentials は、AWS CLI がそのプロファイルで解決した認証情報を出力する。 --format env を付けると export AWS_ACCESS_KEY_ID=... の形で出るので、それを eval でそのまま今のシェルに読み込む。 既定の --format は process(JSON)なので、env を付けないと eval できない。 キーは画面にも出ず、コピーと貼り付けも挟まない。 eval を付けずに実行すると、キーがそのまま画面に出る。

サブシェルで範囲を閉じる

複数のアカウントで順にコマンドを流すときは、( … ) で囲んでサブシェルの中だけに認証情報を入れる。

(
  eval "$(aws configure export-credentials --profile staging-readonly --format env)"
  ./run-check.sh
)
(
  eval "$(aws configure export-credentials --profile production-readonly --format env)"
  ./run-check.sh
)

サブシェルを抜けると環境変数は消えるので、前のアカウントの認証情報が次のコマンドに残らない。