我擔任了 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.」
簡短描述
預設情況下,AWS 不會啟用新的 AWS 區域,而新的區域僅接受第 2 版權杖。當第 1 版權杖對 AWS 尚未啟用的區域之服務端點提出請求時,就會發生以下錯誤:
「An error occurred (AuthFailure) when calling the DescribeInstances operation: AWS was not able to validate the provided access credentials.」
最佳實務是使用 AWS Security Token Service (AWS STS) 區域端點,因為來自 STS 區域端點的工作階段權杖是第 2 版權杖,且可在所有區域中使用。或者,您也可以變更全域端點工作階段權杖的區域相容性設定。
解決方法
從區域端點取得權杖
**重要:**對於 AWS 預設啟用的區域,無論是哪個帳戶發出請求,您必都須在產生臨時憑證的 AWS 帳戶中啟用 STS 區域端點。對於您手動啟用的區域,請在提出請求的帳戶與產生憑證的帳戶中都啟用該區域。如果未在兩個帳戶中啟用區域,那麼您會收到「InvalidClientTokenId」錯誤。
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
您可以使用 AWS SDK 或 AWS CLI 來取得權杖。
例如,您可以執行以下 AWS SDK for Python (Boto3) 命令:
# Replace existing code to create STS client with the following:
sts_client = boto3.client('sts', region_name='your-region', endpoint_url='https://sts.your-region.amazonaws.com')
**注意:**請將 your-region 替換為您的區域,並將 endpoint_url 替換為您的端點。
或者,執行以下 assume-role 命令:
aws sts assume-role --role-arn arn:aws:iam::444455556666:role/RoleName --role-session-name RoleName --region your-region --endpoint-url https://sts.your-region.amazonaws.com
**注意:**請將 your-region 替換為您的區域、將 role-arn 替換為您的 IAM Amazon Resource Name (ARN),並將 endpoint_url替換為您的端點。
變更全域端點工作階段權杖的區域相容性設定
預設情況下,您對全域端點提出的 STS 呼叫會產生第 1 版權杖。若要在所有區域中使用工作階段權杖,請設定 STS 全域端點以產生第 2 版權杖。
**重要:**第 2 版權杖的字元數量比第 1 版更多。權杖大小的增加可能會影響暫存工作階段權杖的既有系統。請確認儲存您權杖的系統能夠處理增加後的權杖大小。