一部の AWS リージョンで IAM エラー「AWS was not able to validate the provided access credentials」が表示されるのはなぜですか?

最終更新日: 2020 年 5 月 14 日

AWS Identity and Access Management (IAM) ロールを引き受けたところ、API 呼び出に対し次のようなエラーが返されるようになりました。

「An error occurred (AuthFailure) when calling the DescribeInstances operation: AWS was not able to validate the provided access credentials. (DescribeInstances オペレーションの呼び出し時に次のエラー (AuthFailure) が発生しました: AWS は提供されたアクセス認証情報を検証できませんでした。)」  

簡単な説明

AWS Security Token Service (AWS STS) において、セッショントークンの形式に更新バージョンがサポートされるようになりました。デフォルトで有効になっていない新しい AWS リージョン (香港やバーレーンなど) では、AWS STS の更新された形式が使用されます。グローバルな AWS STS エンドポイント (sts.amazonaws.com) は、デフォルトで以前の形式のトークンを発行します。このエラーは、以前の形式のセッショントークンを、それがデフォルトで有効になっていない AWS リージョンで使用しようとした場合に発生することがあります。詳細については「AWS リージョンでの AWS STS の管理」をご参照ください。

解決方法

各リージョンのエンドポイントから取得したトークンは新しいバージョンの形式を使用しており、すべての AWS リージョンにおいて有効です。ベストプラクティスは、リージョンごとの STS エンドポイントを使用することです。アプリケーションに地理的に近いエンドポイントを使用することで、低いレイテンシーと速い応答時間で STS サービスにアクセスできるようになることが、その理由です。

ここでの問題を解決するには、次のいずれかの方法を実行します。

各リージョンのエンドポイントからトークンを取得する

次のコマンド例は、AWS SDK for Python (Boto3) を使用しています。

注:

  • your-region の部分は、お使いの AWS リージョンで置き換えます。
  • 各リージョンのエンドポイントで STS クライアントを設定するには、endpoint_url を設定する必要があります。
# Replace existing code to create STS client with the following
sts_client = boto3.client('sts', region_name='your-region', endpoint_url='https://sts.REGION.amazonaws.com')

グローバルエンドポイントのためにセッショントークンのリージョンの互換性を変更する

発行されたトークンをすべての AWS リージョンで使用可能にするために、STS グローバルエンドポイントでも、更新された形式を使用するように設定することができます。

この手順については、「 グローバルエンドポイント (コンソール) に対するセッショントークンの リージョンの互換性を変更するには」をご参照ください。

重要: 新しいトークンには、以前のバージョンよりも多くの文字が含まれています。これは、既存のシステムに一時的にトークンを保存する際、影響を与える可能性があります。