SSO の一時認証情報を aws configure export-credentials で環境変数に渡す
SSO の一時認証情報を 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
)サブシェルを抜けると環境変数は消えるので、前のアカウントの認証情報が次のコマンドに残らない。