タダです.
AWS 外との通信をプロキシサーバーに任せている環境で EC2 から AWS CLI で STS のコマンド aws sts get-caller-identity
がタイムアウトする事象に遭遇しました.他の AWS CLI コマンドは実行できているため,STS 関連の調査を行なったのでこの記事で対応方法をまとめます.
結論
コマンドオプションで --endpoint-url
で東京リージョンを明示的に指定して実行したらタイムアウトの事象が解消しました.
aws sts get-caller-identity --endpoint-url https://sts.ap-northeast-1.amazonaws.com
原因
タイムアウトが発生した環境では AWS CLI がバージョン1だったのですが,ドキュメントを確認したところ STS のサービスのエンドポイントはグローバルエンドポイントを利用するのがデフォルト設定です.
[ドキュメント引用文]
AWS CLI クライアントが AWS Security Token Service (AWS STS) と通信するために使用する AWS サービスエンドポイントを AWS CLI が判別する方法を指定します。
AWS CLI バージョン 1 のデフォルト値は legacy です。
legacy – 以下の AWS リージョンについては、グローバル STS エンドポイント sts.amazonaws.com を使用します: ap-northeast-1、ap-south-1、ap-southeast-1、ap-southeast-2、aws-global、ca-central-1、eu-central-1、eu-north-1、eu-west-1、eu-west-2、eu-west-3、sa-east-1、us-east-1、us-east-2、us-west-1、および us-west-2。他のすべてのリージョンでは、それぞれのリージョンエンドポイントが自動的に使用されます。
そのため,エンドポイントを明示的に --endpoint-url
で指定するか,CLI の config で sts_regional_endpoints
で指定するもしくは AWS_STS_REGIONAL_ENDPOINTS
を指定して対応します.
今回, AWS CLI のコマンドラインオプションで --endpoit-url
を指定してコマンドを実行したところタイムアウトせずにレスポンスが返ってきました.
まとめ
サービスによってはリージョンのエンドポイント指定が必要な場合があることを知る機会になったので,この記事で整理しました.同様にコマンド実行でタイムアウトが起こった時の参考になれば幸いです.