のぴぴのメモ

自分用のLinuxとかの技術メモ

AWS CLIのAssumeRoleするプロファイル設定を使って、AssumeRoleのクレデンシャルを取得し環境変数に設定するシェル芸 ワンライナーを作ってみた

見やすいようにバックスラッシュで行を分けてますが、ワンライナーです。
terraformをローカルマシンで実行する時に、AWSプロバイダーの部分にローカルマシン固有のプロファイルとか埋め込みたくないけど、都度クレデンシャルを手で環境変数に設定するのは手間だということで作ってみたものです。

AWS_BASE_PROFILE="default"; \
AWS_ASSUME_PROFILE="<assume先のプロファイル>"; \
aws --profile ${AWS_BASE_PROFILE} \
    sts assume-role \
        --role-arn $(aws configure get ${AWS_ASSUME_PROFILE}.role_arn) \
        --role-session-name ${AWS_ASSUME_PROFILE}-session \
    --query 'Credentials.{
              AWS_ACCESS_KEY_ID:AccessKeyId,
              AWS_SECRET_ACCESS_KEY:SecretAccessKey,
              AWS_SESSION_TOKEN:SessionToken
    }' | \
jq -r 'to_entries | .[] | [.key + " " + .value]|@tsv' |
while read key value; do export $key=$value; done

1行にするとこんな感じ。

AWS_BASE_PROFILE="default"; AWS_ASSUME_PROFILE="<assume先のプロファイル>"; aws --profile ${AWS_BASE_PROFILE} sts assume-role --role-arn $(aws configure get ${AWS_ASSUME_PROFILE}.role_arn) --role-session-name ${AWS_ASSUME_PROFILE}-session --query 'Credentials.{AWS_ACCESS_KEY_ID:AccessKeyId,AWS_SECRET_ACCESS_KEY:SecretAccessKey,AWS_SESSION_TOKEN:SessionToken}' |jq -r 'to_entries | .[] | [.key + " " + .value]|@tsv' |while read key value; do export $key=$value; done