我承擔了 AWS 身分和存取管理 (IAM) 角色,而我的 API 呼叫傳回類似下列內容的錯誤: 「調用 DescribeInstances 操作時發生錯誤 (AuthFailure): AWS 無法驗證提供的存取憑證。」
簡短描述
AWS Security Token Service (AWS STS) 支援工作階段權杖的更新版本,版本 2。新的 AWS 區域(例如:Bahrain)預設不會啟用,只接受更新版本的工作階段權杖。如果使用版本 1 工作階段權杖向 AWS 區域中未預設啟用的服務端點發出請求,則可能會發生此錯誤。如需詳細資訊,請參閱管理 AWS 區域中的 AWS STS。
解決方法
從區域 AWS STS 端點取得的工作階段權杖是版本 2,且在所有 AWS 區域都有效。最佳作法是建議使用區域 STS 端點。使用地理位置較接近應用程式的端點可減少延遲並提供更好的回應時間。
請使用下列其中一種方法來解決此問題。
從區域端點獲取權杖
下列範例命令使用適用於 Python 的 AWS SDK (Boto3)。
注意:
- 根據您的環境替換 your-region、AccountID 和 RoleName。
- 若要為區域端點設定 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.your-region.amazonaws.com')
在現有的 bash 指令碼/命令中包含區域和端點 url 選項以使用區域端點。
aws sts assume-role --role-arn arn:aws:iam::AccountID:role/RoleName --role-session-name RoleName --region your-region --endpoint-url https://sts.your-region.amazonaws.com
變更全域端點工作階段權杖的區域相容性
根據預設,AWS STS 呼叫全域端點會發出版本 1 的工作階段權杖。版本 1 權杖僅在預設啟用的 AWS 區域中有效。不過,您也可以設定 STS 全域端點,在版本 2 中發出可在所有 AWS 區域使用的權杖。
如需指示,請參閱變更全域端點工作階段權杖的區域相容性。
**重要:**版本 2 權杖包含比版本 1 更多的字元。這可能會影響您暫時存儲權杖的現有系統。
相關資訊
AWS Security Token Service (STS) 現在支援讓全球 STS 端點發出與所有 AWS 區域相容的工作階段權杖
區域和端點