為什麼我在某些 AWS 區域收到 IAM 錯誤「AWS 無法驗證提供的存取憑證」?

1 分的閱讀內容
0

我承擔了 AWS 身分和存取管理 (IAM) 角色,而我的 API 呼叫傳回類似下列內容的錯誤: 「調用 DescribeInstances 操作時發生錯誤 (AuthFailure): AWS 無法驗證提供的存取憑證。」

簡短描述

AWS Security Token Service (AWS STS) 支援工作階段權杖的更新版本,版本 2。依預設,新的 AWS 區域不會啟用,而且只接受更新版本的工作階段權杖。如果版本 1 版工作階段權杖向 AWS 區域中預設為未啟用的服務端點發出請求,則會發生此錯誤。如需詳細資訊,請參閱管理 AWS 區域中的 AWS STS

解決方法

從區域 AWS STS 端點取得的工作階段權杖是版本 2,且在所有 AWS 區域都有效。使用區域 AWS STS 端點是最佳實務。

請使用下列其中一種方法來解決此問題。

從區域端點獲取權杖

下列範例命令使用 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-regionAccountIDRoleName
  • 若要為區域端點設定 STS 用戶端,必須設定 endpoint_url。

要使用區域端點,確保在現有的 bash 命令中包含區域和端點網址選項。

命令範例:

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

**重要:**對於預設啟用的區域,您必須在產生暫時憑證的帳戶中啟用區域 STS 端點。無論使用者在提出請求時是否使用相同或是不同的帳戶都不重要。對於手動啟動的區域,請在提出請求的帳戶和產生憑證的帳戶中啟用區域。如果您沒有這樣做,則可能會收到 InvalidClientTokenId 錯誤。如需詳細資訊,請參閱在 AWS 區域中啟用和停用 AWS STS

變更全域端點工作階段權杖的區域相容性

依預設,AWS STS 呼叫全域端點會發出使用版本 1 的工作階段權杖。版本 1 權杖僅在預設啟用的 AWS 區域中有效。不過,您也可以設定 STS 全域端點,在版本 2 中發出可在所有 AWS 區域使用的權杖。

如需詳細資訊,請參閱管理全域端點工作階段權杖

**重要:**版本 2 權杖包含比版本 1 更多的字元。這可能會影響您暫時存儲權杖的現有系統。

相關資訊

管理 AWS 區域中的 AWS STS

區域和端點