AssumeRoleに一時認証情報をリクエストして環境変数に適応するコマンド


はじめに

SQSにメッセージするEC2で動く既存プロダクトをローカルで動作確認しようとしたら、怒られた。

Error in custom provider,
com.amazonaws.services.sqs.model.AmazonSQSException: The security token included in the request is invalid.
(Service: AmazonSQS; Status Code: 403; Error Code: InvalidClientTokenId; Request ID: xxx)

なぜ怒られた?

調査してみると、EC2への認証情報は Instance Profile で提供しているらしいことがわかった。

どうする?

ということで、一時認証情報をリクエストしてローカルに適用することにした。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_temp_use-resources.html

一発で環境変数を適応するコマンド

前提

  • AWS CLI インストール済
  • jq コマンドインストール済
  • 私は fish ユーザーなので bash、zsh の方は良しなに。

実際のコマンド

set aws_secrets (aws sts assume-role \
--role-arn <arn of assume-role> \
--role-session-name "local_session" \
--profile <your profile> \
| jq .Credentials | jq '.AccessKeyId, .SecretAccessKey, .SessionToken' | sed "s/\"//g") \
;and set -x AWS_ACCESS_KEY_ID $aws_secrets[1] \
;and set -x AWS_SECRET_ACCESS_KEY $aws_secrets[2] \
;and set -x AWS_SESSION_TOKEN $aws_secrets[3]

おしまい。