[Python] 環境変数の指定でboto3がSTSのリージョナルエンドポイントを使用するか確認してみた

[Python] 環境変数の指定でboto3がSTSのリージョナルエンドポイントを使用するか確認してみた

Clock Icon2024.08.31

こんにちは。サービス開発室の武田です。

先日のSTS障害を受けて、あらためてSTSのベストプラクティスが社内でも共有されていました。

https://dev.classmethod.jp/articles/why-aws-sts-regional-endpoints-are-recommended/

具体的にリージョナルエンドポイントを使用する方法はAWSブログが詳しいです。

https://aws.amazon.com/jp/blogs/security/how-to-use-regional-aws-sts-endpoints/

実はAWS_STS_REGIONAL_ENDPOINTS=regionalを指定する方法を知らなかったのですが、次のドキュメントにもまとめられています。

https://docs.aws.amazon.com/sdkref/latest/guide/feature-sts-regionalized-endpoints.html

このページ、ちゃんと見てみるとSDK for Python (Boto3)SupportedがYes となっていますね。clientの引数に指定する方法以外にもあるんだ!ということで、次のようなLambda関数を用意して確認してみました。

なお関数は東京リージョンに作成しました。

import logging

import boto3

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

def lambda_handler(event, context):    
    sts = boto3.client("sts")
    res = sts.assume_role(RoleArn="arn:aws:iam::123456789012:role/test-role", RoleSessionName="test")

環境変数での指定なし

まずはデフォルトの状態を確認してみましょう。直近の動作を見ても、グローバルエンドポイントを使用するはずです。

[DEBUG]	2024-08-31T09:00:00.000Z	8d6f3478-223f-4d95-80c5-947717f390ba	Calling endpoint provider with parameters: {'Region': 'ap-northeast-1', 'UseDualStack': False, 'UseFIPS': False, 'UseGlobalEndpoint': True}
[DEBUG]	2024-08-31T09:00:00.000Z	8d6f3478-223f-4d95-80c5-947717f390ba	Endpoint provider result: https://sts.amazonaws.com

パラメーターがUseGlobalEndpoint: Trueとなっており、エンドポイントはhttps://sts.amazonaws.comです。これはグローバルエンドポイントを使用していますね。

環境変数でAWS_STS_REGIONAL_ENDPOINTS=regionalを指定する

続いて、同じ関数に環境変数を設定しましょう。設定するのはAWS_STS_REGIONAL_ENDPOINTS=regionalです。

aws-sts-using-reginal-endpoint-envvar-boto3_1.png

結果はこちら。

[DEBUG]	2024-08-31T09:00:00.000Z	8a70e1e6-7ca0-4b68-89bc-8f9e3dd46667	Calling endpoint provider with parameters: {'Region': 'ap-northeast-1', 'UseDualStack': False, 'UseFIPS': False, 'UseGlobalEndpoint': False}
[DEBUG]	2024-08-31T09:00:00.000Z	8a70e1e6-7ca0-4b68-89bc-8f9e3dd46667	Endpoint provider result: https://sts.ap-northeast-1.amazonaws.com

パラメーターがUseGlobalEndpoint: Falseになっています。エンドポイントはhttps://sts.ap-northeast-1.amazonaws.comで、Lambda関数が動いているリージョンと同じリージョナルエンドポイントを使用しています。

問題なく、環境変数の値が動作していることが確認できました。

まとめ

他のAWS SDKもサポート表を見る限り大部分がこの方法をサポートしているようです。今回はboto3の環境で確認してみました。AWS_STS_REGIONAL_ENDPOINTS=regionalを環境変数で指定するだけでリージョナルエンドポイントに切り替えらます。コードの修正も必要ないため、手軽な方法ではないでしょうか。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.