此頁面僅適用於使用 Vault 和 REST API 2012 年原始版本的 S3 Glacier 服務的現有客戶。
如果您要尋找封存儲存解決方案,建議您在 Amazon S3、S3 Glacier S3 Instant Retrieval、S3 Glacier Flexible Retrieval 和 S3 Glacier Deep Archive 中使用 S3 Glacier 儲存類別。若要進一步了解這些儲存選項,請參閱 Amazon S3
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
簽署請求
S3 Glacier 會要求您簽署請求,對您發送的每個請求進行身分驗證。若要簽署請求,請使用加密雜湊函數來計算數位簽章。加密雜湊是一個函數, 其根據輸入傳回一個唯一的雜湊值。此雜湊函數的輸入包含請求和私密存取金鑰的文字。雜湊函數會傳回一個雜湊值,您將此值包含在請求中做為簽章。該簽章是請求 Authorization
標頭中的一部分。
收到請求後,S3 Glacier 會使用您原先用以簽署請求的相同雜湊函數與輸入,重新計算簽章。如果產生的簽章符合請求中的簽章,則 S3 Glacier 會處理請求。否則,請求會遭到拒絕。
S3 Glacier 支援使用 AWS Signature 第 4 版進行身分驗證。計算簽章的程序可以分成三個任務:
-
將您的HTTP請求重新排列為標準格式。使用標準表單是必要的,因為 S3 Glacier 在重新計算簽章以與所傳送的簽章進行比較時,會使用相同的標準表單。
-
建立一個字串,您會使用此字串做為密碼編譯雜湊函數的其中一個輸入值。此字串,稱為登入字串,是雜湊演算法的名稱、請求日期、登入資料範圍字串和前一個任務的正式請求的串連。認證範圍字串本身就是日期、 AWS 區域和服務資訊的串連。
-
使用接受兩個輸入字串的密碼編譯雜湊函數來建立請求的簽章:您的 登入字串和衍生金鑰。衍生金鑰的計算方式是從您的秘密存取金鑰開始,並使用認證範圍字串建立一系列雜湊型訊息驗證碼 (HMACs)。請注意,此簽署步驟中使用的雜湊函數不是 S3 Glacier APIs 中上傳資料的樹雜湊演算法。
簽章計算範例
以下範例會逐步解說為 建立文件庫 (PUT 文件庫) 建立簽章的詳細資訊 。此範例可用作檢查簽名簽章計算方法的參考。如需詳細資訊,請參閱IAM使用者指南中的簽署 AWS API要求。
該範例假設如下:
-
請求的時間戳記為
Fri, 25 May 2012 00:24:53 GMT
。 -
端點是美國東部 (維吉尼亞北部) 區域 (
us-east-1
)。
一般的請求語法(包括JSON主體)是:
PUT /-/vaults/examplevault HTTP/1.1 Host: glacier.us-east-1.amazonaws.com Date: Fri, 25 May 2012 00:24:53 GMT Authorization:
SignatureToBeCalculated
x-amz-glacier-version: 2012-06-01
對於任務1:建立正式請求計算的請求的正式形式是:
PUT /-/vaults/examplevault host:glacier.us-east-1.amazonaws.com x-amz-date:20120525T002453Z x-amz-glacier-version:2012-06-01 host;x-amz-date;x-amz-glacier-version e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
正式請求的最後一行是請求內文的雜湊值。另外,請注意正式請求中的空的第三行。這是因為沒有查詢參數API。
要為任務 2:建立要簽章的字串 簽章的字串是:
AWS4-HMAC-SHA256 20120525T002453Z 20120525/us-east-1/glacier/aws4_request 5f1da1a2d0feb614dd03d71e87928b8e449ac87614479332aced3a701f916743
登入字串的第一行是演算法,第二行是時間戳記,第三行是登入資料範圍,最後一行是來自任務 1:建立正式請求的正式請求的雜湊。在憑證範圍內使用的服務名稱是 glacier
。
對於任務 3:建立簽章,衍生金鑰可以呈現為:
derived key = HMAC(HMAC(HMAC(HMAC("AWS4" + YourSecretAccessKey,"20120525"),"us-east-1"),"glacier"),"aws4_request")
如果使用私密存取金鑰 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
,則計算簽章是:
3ce5b2f2fffac9262b4da9256f8d086b4aaf42eba5f111c21681a65a127b7c2a
最後步驟是建立 Authorization
標頭。對於示範存取金鑰 AKIAIOSFODNN7EXAMPLE
,標頭 (為了可讀性而新增了換行) 是:
Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20120525/us-east-1/glacier/aws4_request, SignedHeaders=host;x-amz-date;x-amz-glacier-version, Signature=3ce5b2f2fffac9262b4da9256f8d086b4aaf42eba5f111c21681a65a127b7c2a
計算串流操作的簽章
上傳封存 (POST 封存) 和 分段上傳 (PUT uploadID) 是串流操作,需要您在簽章和發送請求時包含附加標頭 x-amz-content-sha256
。串流操作的簽章步驟與其他操作的簽章步驟完全相同,但增加了串流標頭。
串流標頭的計算x-amz-content-sha256
是以要上傳的整個內容 (有效負載) 的SHA256雜湊值為基礎。請注意,此計算與SHA256樹哈希(運算檢查總和)不同。除了簡單的情況下,有效負載數據的 SHA 256 哈希值將與有效負載數據的SHA256樹哈希值不同。
如果有效負載資料指定為位元組陣列,您可以使用下列 Java 程式碼片段來計算SHA256雜湊值。
public static byte[] computePayloadSHA256Hash2(byte[] payload) throws NoSuchAlgorithmException, IOException { BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(payload)); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] buffer = new byte[4096]; int bytesRead = -1; while ( (bytesRead = bis.read(buffer, 0, buffer.length)) != -1 ) { messageDigest.update(buffer, 0, bytesRead); } return messageDigest.digest(); }
同樣,在 C# 中,您可以計算有效負載數據的SHA256哈希值,如下面的代碼片段。
public static byte[] CalculateSHA256Hash(byte[] payload) { SHA256 sha256 = System.Security.Cryptography.SHA256.Create(); byte[] hash = sha256.ComputeHash(payload); return hash; }
串流的簽名計算範例 API
下列範例會逐步引導您建立簽章的詳細資料上傳封存 (POST 封存),這是 S3 Glacier 中兩個串流的其APIs中一個。該範例假設如下:
-
請求的時間戳記為
Mon, 07 May 2012 00:00:00 GMT
。 -
端點是美國東部 (維吉尼亞北部) 區域 (us-east-1)。
-
內容承載是「歡迎使用 S3 Glacier」的字串。
下面的例子中顯示了一般請求語法(包括JSON主體)。請注意,包含 x-amz-content-sha256
標頭。在這個簡化的範例中,x-amz-sha256-tree-hash
和 x-amz-content-sha256
是相同的值。但是,對於大於 1 MB 的封存上傳,情況並非如此。
POST /-/vaults/examplevault HTTP/1.1 Host: glacier.us-east-1.amazonaws.com Date: Mon, 07 May 2012 00:00:00 GMT x-amz-archive-description: my archive x-amz-sha256-tree-hash: SHA256 tree hash x-amz-content-sha256: SHA256 payload hash Authorization:
SignatureToBeCalculated
x-amz-glacier-version: 2012-06-01
對於任務 1:建立正式請求 計算的請求的正式形式如下所示。請注意,串流標頭 x-amz-content-sha256
包含其值。這意味著您必須先讀取有效負載並計算SHA256哈希值,然後計算簽名。
POST /-/vaults/examplevault host:glacier.us-east-1.amazonaws.com x-amz-content-sha256:726e392cb4d09924dbad1cc0ba3b00c3643d03d14cb4b823e2f041cff612a628 x-amz-date:20120507T000000Z x-amz-glacier-version:2012-06-01 host;x-amz-content-sha256;x-amz-date;x-amz-glacier-version 726e392cb4d09924dbad1cc0ba3b00c3643d03d14cb4b823e2f041cff612a628
剩餘的簽章計算遵循 簽章計算範例 中概述的步驟。使用私密存取金鑰Authorization
和存取金鑰 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
的 AKIAIOSFODNN7EXAMPLE
標頭如下所示 (為了可讀性而增加了換行):
Authorization=AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20120507/us-east-1/glacier/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-glacier-version, Signature=b092397439375d59119072764a1e9a144677c43d9906fd98a5742c57a2855de6