跳至內容

如何對 Amazon S3 預先簽署網址請求的「SignatureDoesNotMatch」或「403 Forbidden」錯誤進行疑難排解?

1 分的閱讀內容
0

我使用 Amazon Simple Storage Service (Amazon S3) 預先簽署網址向 Amazon S3 儲存貯體發出請求,並收到了「SignatureDoesNotMatch」或「403 Forbidden」錯誤訊息。

簡短說明

當您產生預先簽署的網址時,用戶端會計算一個唯一的簽章來驗證請求。然後,Amazon S3 會根據用戶端在 HTTP 請求中傳送的參數計算簽章,並比較兩個簽章。如果簽章不相符,那麼您會收到「SignatureDoesNotMatch」錯誤。

解決方法

若要解決此問題,請檢查您的 Amazon S3 預先簽署網址請求的下列組態設定。

注意: 如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,則請參閱對 AWS CLI 進行錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

確認 HTTP 方法

當您產生預先簽署的網址時,您會為該網址指派一個 HTTP 動作。確保用戶端在 HTTP 請求中傳送的動作與網址中的 HTTP 動作相符。例如,如果將 GET 動作指派給網址,則請求中的 HTTP 動作也必須是 GET。

檢查私密存取金鑰

檢查用於產生預先簽署網址的私密存取金鑰是否處於不正確無效已關閉狀態。當您為私密存取金鑰新增不符的字元或不正確的空格時,私密存取金鑰將進入其中一種狀態。檢查您是否使用正確的存取金鑰來重新產生預先簽署網址。

驗證網址中的儲存貯體名稱和金鑰名稱

驗證儲存貯體名稱和物件名稱是否正確,並與網址簽章產生中的名稱相符。名稱的大小寫也必須符合。

確認 HTTP 請求中使用的標頭

確保用於產生簽章的 HTTP 標頭,與用戶端在 HTTP 請求中傳送給 S3 的標頭相符。

另外,請確保標題的值與簽章計算期間產生的值相符。

確認 AWS 區域正確

在將預先簽署的網址傳送至 S3 之前,請確認產生網址的 AWS 區域與儲存貯體目前所在的區域相符。

執行 GetBucketLocation API 請求來檢查 S3 儲存貯體的區域。您也可以執行 get-bucket-location AWS CLI 命令:

$ aws s3api get-bucket-location --bucket example-bucket

輸出範例:

{      
"LocationConstraint": "us-west-2"  
}

檢查系統時間有效期限

如果將系統時間設定為數位簽章有效期之後的未來日期,則簽章將顯示為已過期並失敗。如果將系統時間設定為簽章有效期之前的過去日期,則簽章無效並會失敗。

相關資訊

錯誤代碼清單

為什麼 Amazon S3 儲存貯體的預先簽署網址會在我指定的到期時間之前過期?

使用預先簽署網址下載和上傳物件

如在對在嘗試存取 S3 物件時出現的「請求已過期」錯誤進行疑難排解?

AWS 官方已更新 10 個月前