継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

プロキシ環境で AWS CLI の STS コマンドタイムアウトを回避する方法

タダです.

AWS 外との通信をプロキシサーバーに任せている環境で EC2 から AWS CLISTS のコマンド 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 を指定して対応します.

docs.aws.amazon.com

今回, AWS CLIコマンドラインオプション--endpoit-url を指定してコマンドを実行したところタイムアウトせずにレスポンスが返ってきました.

まとめ

サービスによってはリージョンのエンドポイント指定が必要な場合があることを知る機会になったので,この記事で整理しました.同様にコマンド実行でタイムアウトが起こった時の参考になれば幸いです.