

 **此頁面僅適用於使用 Vaults 和 2012 年原始 REST API 的 Amazon Glacier 服務的現有客戶。**

如果您要尋找封存儲存解決方案，建議您在 Amazon Glacier Instant Retrieval、S3 Glacier Flexible Retrieval 和 S3 Glacier Deep Archive 中使用 Amazon Glacier 儲存類別。 Amazon S3 若要進一步了解這些儲存選項，請參閱 [Amazon Glacier 儲存類別](https://aws.amazon.com/s3/storage-classes/glacier/)。

Amazon Glacier （原始獨立保存庫型服務） 不再接受新客戶。Amazon Glacier 是一項獨立服務，具有自己的 APIs，可將資料存放在保存庫中，並與 Amazon S3 和 Amazon S3 Glacier 儲存類別不同。您現有的資料將在 Amazon Glacier 中無限期保持安全且可存取。不需要遷移。對於低成本、長期的封存儲存， AWS 建議使用 [Amazon S3 Glacier 儲存類別](https://aws.amazon.com/s3/storage-classes/glacier/)，透過 S3 儲存貯體型 APIs、完整 AWS 區域 可用性、降低成本 AWS 和服務整合，提供卓越的客戶體驗。如果您想要增強功能，請考慮使用我們的解決方案指南，將資料從 Amazon S3 Glacier 保存庫傳輸至 Amazon S3 Glacier 儲存類別，以遷移至 Amazon S3 Glacier 儲存類別。 [AWS Amazon Glacier Amazon S3 ](https://aws.amazon.com/solutions/guidance/data-transfer-from-amazon-s3-glacier-vaults-to-amazon-s3/)

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 簽署請求
<a name="amazon-glacier-signing-requests"></a>

Amazon Glacier 要求您透過簽署請求來驗證您傳送的每個請求。若要簽署請求，請使用加密雜湊函數來計算數位簽章。加密雜湊是一個函數, 其根據輸入傳回一個唯一的雜湊值。此雜湊函數的輸入包含請求和私密存取金鑰的文字。雜湊函數會傳回一個雜湊值，您將此值包含在請求中做為簽章。該簽章是請求 `Authorization` 標頭中的一部分。

收到請求後，Amazon Glacier 會使用您用來簽署請求的相同雜湊函數和輸入來重新計算簽章。如果產生的簽章符合請求中的簽章，Amazon Glacier 會處理請求。否則，請求會遭到拒絕。

Amazon Glacier 支援使用 [AWS Signature 第 4 版](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)進行身分驗證。計算簽章的程序可以分成三個任務：

 
+   [任務 1：建立正式請求](https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html)

  將 HTTP 請求重新編排為正式格式。使用正式表單是必要的，因為 Amazon Glacier 在重新計算簽章以與您傳送的簽章進行比較時，會使用相同的正式表單。
+   [任務 2：建立登入字串](https://docs.aws.amazon.com/general/latest/gr/sigv4-create-string-to-sign.html)

  建立一個字串，您會使用此字串做為密碼編譯雜湊函數的其中一個輸入值。此字串，稱為*登入字串*，是雜湊演算法的名稱、請求日期、*登入資料範圍*字串和前一個任務的正式請求的串連。*登入資料範圍*字串本身是日期、 AWS 區域和服務資訊的串連。
+   [任務 3：建立簽章](https://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html)

  使用接受兩個輸入字串的密碼編譯雜湊函數來建立請求的簽章：您的 *登入字串*和*衍生金鑰*。藉由從您的私密存取金鑰開始來計算此*衍生金鑰*和使用*登入資料範圍* 字串來建立一系列雜湊型訊息身分驗證代碼 (HMAC)。請注意，此簽署步驟中使用的雜湊函數不是用於上傳資料的 Amazon Glacier APIs 的樹雜湊演算法。

**Topics**
+ [簽章計算範例](#example-signature-calculation)
+ [計算串流操作的簽章](#signature-calculation-streaming)

## 簽章計算範例
<a name="example-signature-calculation"></a>

以下範例會逐步解說為 [建立保存庫 (PUT 保存庫)](api-vault-put.md) 建立簽章的詳細資訊 。此範例可用作檢查簽名簽章計算方法的參考。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[簽署 AWS API 請求](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html)。

該範例假設如下：
+ 請求的時間戳記為 `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：建立正式請求](#SignatureCalculationTask1)計算的請求的正式形式是：

 

```
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：建立要簽章的字串* [簽章的字串](#SignatureCalculationTask2)是：

 

```
AWS4-HMAC-SHA256
20120525T002453Z
20120525/us-east-1/glacier/aws4_request
5f1da1a2d0feb614dd03d71e87928b8e449ac87614479332aced3a701f916743
```

 

*登入字串*的第一行是演算法，第二行是時間戳記，第三行是*登入資料範圍*，最後一行是來自[任務 1：建立正式請求](#SignatureCalculationTask1)的正式請求的雜湊。在憑證範圍內使用的服務名稱是 `glacier`。

對於[任務 3：建立簽章](#SignatureCalculationTask3)，*衍生金鑰*可以呈現為：

 

```
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
```

 

## 計算串流操作的簽章
<a name="signature-calculation-streaming"></a>

[上傳封存 (POST 封存)](api-archive-post.md) 和 [分段上傳 (PUT uploadID)](api-upload-part.md) 是串流操作，需要您在簽章和發送請求時包含附加標頭 `x-amz-content-sha256`。串流操作的簽章步驟與其他操作的簽章步驟完全相同，但增加了串流標頭。

串流標頭 `x-amz-content-sha256` 的計算是依據要上傳的整個內容 (承載) 的 SHA256 雜湊。請注意，這個計算不同於 SHA256 樹狀雜湊 ([運算檢查總和](checksum-calculations.md))。除了微不足道的情況外，承載資料的 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 的簽章計算範例
<a name="example-signature-calculation-streaming"></a>

下列範例會逐步解說為 建立簽章的詳細資訊[上傳封存 (POST 封存)](api-archive-post.md)，這是 Amazon Glacier 中兩個串流 APIs 的其中之一。該範例假設如下：
+ 請求的時間戳記為 `Mon, 07 May 2012 00:00:00 GMT`。
+ 端點是美國東部 (維吉尼亞北部) 區域 (us-east-1)。
+ 內容承載是字串「歡迎使用 Amazon 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：建立正式請求](#SignatureCalculationTask1) 計算的請求的正式形式如下所示。請注意，串流標頭 `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
```

剩餘的簽章計算遵循 [簽章計算範例](#example-signature-calculation) 中概述的步驟。使用私密存取金鑰`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
```

 