

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

# 檢查 Amazon S3 中靜態資料的物件完整性
<a name="checking-object-integrity-at-rest"></a>

如果您需要驗證儲存在 Amazon S3 中的資料集內容，S3 Batch Operations [運算檢查總和](https://docs.aws.amazon.com//AmazonS3/latest/userguide/batch-ops-compute-checksums.html)作業會計算靜態物件的完整物件，或複合檢查總和。**運算檢查總和**作業使用批次操作來非同步計算一組物件的檢查總和值，並自動產生合併完整性報告，無需建立新的資料複本，或還原或下載任何資料。

藉由**運算檢查總和**作業，您可以透過單一作業請求，有效率地驗證數十億個物件。對於每個**運算檢查總和**任務請求，S3 會計算檢查總和值，並將其包含在自動產生的完整性報告 (也稱為完成報告) 中。然後，您可以使用完成報告來驗證資料集的完整性。

**運算檢查總和**作業適用於儲存在 S3 中的任何物件，無論儲存類別或物件大小。無論您需要將物件驗證為資料保留最佳實務，或是滿足合規要求，**運算檢查總和**作業都會透過執行靜態檢查總和計算，降低資料驗證所需的成本、時間和付出。如需**運算檢查總和**定價的相關資訊，請參閱 [Amazon S3 定價](https://aws.amazon.com/s3/pricing/)上的**管理和洞察**索引標籤。

然後，您可以使用產生的完成報告的輸出，與您儲存在資料庫中的檢查總和值進行比較，確認您的資料集隨著時間推移仍保持不變。此方法可協助您維持端對端資料完整性，以滿足業務和合規需求。例如，您可以使用**運算檢查總和**作業提交 S3 Glacier 儲存類別中儲存物件清單，以進行年度安全稽核。此外，支援的檢查總和演算法範圍可讓您維持在應用程式中使用演算法的連續性。

## 使用支持的檢查總和演算法
<a name="using-additional-checksums-rest"></a>

對於靜態資料，您可以使用任何支援的檢查總和演算法來計算檢查總和：
+ CRC-64/NVME (`CRC64NVME`)：僅支援完整的物件檢查總和類型。
+ CRC-32 (`CRC32`)：支援完整物件與合成檢查總和類型。
+ CRC-32C (`CRC32C`)：支援完整物件與合成檢查總和類型。
+ SHA-1 (`SHA1`)：支援完整物件與合成檢查總和類型。
+ SHA-256 (`SHA256`)：支援完整物件與合成檢查總和類型。
+ MD5 (`MD5`)：僅支援複合檢查總和類型 （不可線性化）。
+ XXHash64 (`XXHASH64`)：僅支援複合檢查總和類型 （不可線性化）。
+ XXHash3 (`XXHASH3`)：僅支援複合檢查總和類型 （不可線性化）。
+ XXHash128 (`XXHASH128`)：僅支援複合檢查總和類型 （不可線性化）。
+ SHA-512 (`SHA512`)：僅支援複合檢查總和類型 （不可線性化）。

## 使用**運算檢查總和**
<a name="Compute-checksums"></a>

對於儲存在 Amazon S3 中的物件，您可以搭配使用**運算檢查總和**作業和 S3 Batch Operations，檢查儲存的靜態資料內容。您可以使用 Amazon S3 主控台、 AWS Command Line Interface (AWS CLI)、REST API 或 AWS SDK [來建立Compute checksum批次操作任務](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-create-job.html)。當**運算檢查總和**任務完成時，您會收到完成報告。如需有關如何使用完成報告的詳細資訊，請參閱[追蹤任務狀態和完成報告](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-job-status.html)。

在建立**運算檢查總**和任務之前，您必須建立 S3 批次操作 AWS Identity and Access Management (IAM) 角色，以授予 Amazon S3 代表您執行動作的許可。您需要授予權限來讀取資訊清單檔案，並將完成報告寫入 S3 儲存貯體。如需詳細資訊，請參閱[運算檢查總和](batch-ops-compute-checksums.md)。

### 使用 S3 主控台
<a name="Compute-checksum-console"></a>

**使用**運算檢查總和**作業**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 在頁面頂端的導覽列中，選擇目前顯示的名稱 AWS 區域。​接下來，選擇您要在其中建立作業的區域。
**注意**  
對於複製操作，您必須在與目的地儲存貯體相同的區域中建立作業。對於所有其他操作，您必須在與資訊清單中的物件相同的區域中建立作業。

1. 在 Amazon S3 主控台的左側導覽窗格上，選擇 **Batch Operations**。

1. 選擇**建立任務**。

1. 檢視您要建立任務 AWS 區域 的 。
**注意**  
對於複製操作，您必須在與目的地儲存貯體相同的區域中建立作業。對於所有其他操作，您必須在與資訊清單中的物件相同的區域中建立作業。

1. 在 **Manifest format** (資訊清單格式) 下，選擇要使用的資訊清單物件類型。
   + 如果您選擇 **S3 庫存報告 (manifest.json)**，請輸入 `manifest.json` 物件的路徑；如果您想要使用特定物件版本時，則可選擇**資訊清單物件版本 ID**。或者，您可以選擇**瀏覽 S3**，並選擇資訊清單 JSON 檔案，該檔案會自動填入所有資訊清單物件欄位項目。
   + 如果您選擇 **CSV**，請選擇資訊清單位置類型，然後輸入 CSV 格式資訊清單物件的路徑，或選擇**瀏覽 S3** 以選取資訊清單物件。資訊清單物件必須遵循主控台中所描述的格式。如果您想要使用資訊清單物件的特定版本，也可以指定物件版本 ID。
   + 如果您選擇**使用 S3 複寫組態建立資訊清單**，則可使用複寫組態產生物件清單，並選擇性地儲存至您選擇的目的地。使用複寫組態產生資訊清單時，唯一可用的操作是**複寫**。

1. 選擇**下一步**。

1. 在**操作**下，選擇**運算檢查總和**作業，以計算資訊清單中列出之所有物件的檢查總和。選擇您任務的**檢查總和類型**和**檢查總和函數**。然後選擇**下一步**。

1. 填寫**設定其他選項**的資訊，然後選擇**下一步**。

1. 在**設定其他選項**頁面上，填寫**運算檢查總和**任務的資訊。
**注意**  
在**完成報告**下，務必確認收到資訊。確認收到資訊表示您已了解完成報告包含檢查總和值，並且用於驗證儲存在 Amazon S3 中的資料的完整性。因此，應謹慎分享完成報告。此外，請注意，如果您要建立運算檢查總和請求，並指定外部帳戶擁有者的儲存貯體位置來存放完成報告，請務必指定外部儲存貯體擁有者的 AWS 帳戶 ID。

1. 選擇**下一步**。

1. 在**檢視**頁面上，檢視和確認您的設定。

1. (選用) 如果您需要變更，請選擇**上一步**以返回上一頁，或選擇**編輯**以更新特定步驟。

1. 確認變更後，選擇**建立任務**。

**列出和監控所有**運算檢查總和**請求的進度**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 開啟 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇 **Batch Operations** (批次操作)。

1. 在**批次操作**頁面上，您可以檢閱任務詳細資訊，例如任務優先順序、任務完成率和物件總數。

1. 如果您想要管理或複製特定的**運算檢查總和**任務，請按一下**任務 ID** 來檢閱其他任務資訊。

1. 在特定**運算檢查總和**任務頁面上，檢閱任務詳細資訊。

每個批次操作任務都會經歷不同的[任務狀態](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-job-status.html#batch-ops-job-status-table)。您也可以在 S3 主控台[啟用 AWS CloudTrail 事件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-cloudtrail-logging-for-s3.html)，以在發生任何任務狀態變更時收到提醒。對於作用中任務，您可以在**任務詳細資訊**頁面上檢閱執行中的任務和完成率。

### 使用 AWS SDKs
<a name="Compute-checksum-sdk"></a>

------
#### [ Java ]

**Example 範例：建立**運算檢查總和**任務**  
下列範例說明如何建立**運算檢查總和**任務 (做為**建立任務**請求的一部分)，以及如何指定資訊清單：  

```
// Required parameters
String accountId = "{{111122223333}}";
String roleArn = "arn:aws:iam::{{111122223333}}:role/BatchOperations";
String manifestArn = "arn:aws:s3:::{{my_manifests/manifest}}.csv";
String manifestEtag = "{{60e460c9d1046e73f7dde5043ac3ae85}}";
String reportBucketArn = "arn:aws:s3:::{{amzn-s3-demo-completion-report-bucket}}";
String reportExpectedBucketOwner = "{{111122223333}}";
String reportPrefix = "{{demo-report}}";

// Job Operation
S3ComputeObjectChecksumOperation s3ComputeObjectChecksum = S3ComputeObjectChecksumOperation.builder()
    .checksumAlgorithm(ComputeObjectChecksumAlgorithm.{{CRC64}})
    .checksumType(ComputeObjectChecksumType.{{COMPOSITE}})
    .build();

JobOperation operation = JobOperation.builder()
    .s3ComputeObjectChecksum(s3ComputeObjectChecksum)
    .build();

// Job Manifest
JobManifestLocation location = JobManifestLocation.builder()
    .eTag(manifestEtag)
    .objectArn(manifestArn)
    .build();

JobManifestSpec spec = JobManifestSpec.builder()
    .format(JobManifestFormat.S3_BATCH_OPERATIONS_CSV_20180820)
    .fields(Arrays.asList(JobManifestFieldName.BUCKET, JobManifestFieldName.KEY))
    .build();

JobManifest manifest = JobManifest.builder()
    .location(location)
    .spec(spec)
    .build();

// Completion Report
JobReport report = JobReport.builder()
    .bucket({{reportBucketArn}})
    .enabled({{true}}) // Must be true
    .expectedBucketOwner({{reportExpectedBucketOwner}})
    .format({{JobReportFormat.REPORT_CSV_20180820}})
    .prefix({{reportPrefix}})
    .reportScope({{JobReportScope.ALL_TASKS}})
    .build();

// Create Job Request
CreateJobRequest request = CreateJobRequest.builder()
    .accountId({{accountId}})
    .confirmationRequired({{false}})
    .manifest({{manifest}})
    .operation({{operation}})
    .priority({{10}})
    .report({{report}})
    .roleArn({{roleArn}});

// Create the client
S3ControlClient client = S3ControlClient.builder()
    .credentialsProvider(new ProfileCredentialsProvider())
    .region(Region.{{US_EAST_1}})
    .build();

// Send the request
try {
    CreateJobResponse response = client.createJob(request);
    System.out.println(response);    
} catch (AwsServiceException e) {
    System.out.println("AwsServiceException: " + e.getMessage());
    throw new RuntimeException(e);
} catch (SdkClientException e) {
    System.out.println("SdkClientException: " + e.getMessage());
    throw new RuntimeException(e);
}
```

**Example 範例：檢視**運算檢查總和**任務詳細資訊**  
下列範例說明如何指定任務 ID，以檢視**運算檢查總和**任務請求的任務詳細資訊 (例如任務完成率)：  

```
DescribeJobRequest request = DescribeJobRequest.builder()
        .accountId("1234567890")
        .jobId("a16217a1-e082-48e5-b04f-31fac3a66b13")
        .build();
```

------

### 使用 AWS CLI
<a name="Compute-checksum-cli"></a>

您可以使用 [https://docs.aws.amazon.com/cli/latest/reference/s3control/create-job.html](https://docs.aws.amazon.com/cli/latest/reference/s3control/create-job.html) 命令建立新的批次操作任務，並提供物件清單。然後，指定檢查總和演算法和檢查總和類型，以及您要儲存**運算檢查總和**報告的目的地儲存貯體。下列範例會針對 AWS 帳戶 {{111122223333}} 使用 S3 產生的資訊清單，建立 Batch Operations **運算檢查總和**任務。

若要使用此命令，請以您自己的資訊取代{{使用者輸入預留位置}}。

```
aws s3control create-job \
    --account-id {{111122223333}} \
    --manifest '{"Spec":{"Format":"{{S3BatchOperations_CSV_20180820}}","Fields":["Bucket","Key"]},"Location":{"ObjectArn":"arn:aws:s3:::{{my-manifest-bucket/manifest}}.csv","ETag":"{{e0e8bfc50e0f0c5d5a1a5f0e0e8bfc50}}"}}' \
    --manifest-generator '{
        "S3JobManifestGenerator": {
          "ExpectedBucketOwner": "{{111122223333}}",
          "SourceBucket": "arn:aws:s3:::{{amzn-s3-demo-source-bucket}}",
          "EnableManifestOutput": {{true}},
          "ManifestOutputLocation": {
            "ExpectedManifestBucketOwner": "{{111122223333}}",
            "Bucket": "arn:aws:s3:::{{amzn-s3-demo-manifest-bucket}}",
            "ManifestPrefix": "{{prefix}}",
            "ManifestFormat": "{{S3InventoryReport_CSV_20211130}}"
          },
          "Filter": {
            "CreatedAfter": "{{2023-09-01}}",
            "CreatedBefore": "{{2023-10-01}}",
            "KeyNameConstraint": {
              "MatchAnyPrefix": [
                "{{prefix}}"
              ],
              "MatchAnySuffix": [
                "{{suffix}}"
              ]
            },
            "ObjectSizeGreaterThanBytes": {{100}},
            "ObjectSizeLessThanBytes": {{200}},
            "MatchAnyStorageClass": [
              "STANDARD",
              "STANDARD_IA"
            ]
          }
        }
      }' \
    --operation '{"S3ComputeObjectChecksum":{"ChecksumAlgorithm":"{{CRC64NVME}}","ChecksumType":"{{FULL_OBJECT}}"}}' \
    --report '{"Bucket":"arn:aws:s3:::{{my-report-bucket}}","Format":"{{Report_CSV_20180820}}","Enabled":{{true}},"Prefix":"{{batch-op-reports}}/","ReportScope":"{{AllTasks}}","ExpectedBucketOwner":"{{111122223333}}"}' \
    --priority {{10}} \
    --role-arn arn:aws:iam::{{123456789012}}:role/{{S3BatchJobRole}} \
    --client-request-token {{6e023a7e-4820-4654-8c81-7247361aeb73}} \
    --description "{{Compute object checksums}}" \
    --region {{us-west-2}}
```

提交**運算檢查總和**任務後，您會收到任務 ID 做為回應，並顯示在 S3 Batch Operations 清單頁面上。Amazon S3 會處理物件清單，並計算每個物件的檢查總和。任務完成後，S3 會在指定的目的地提供合併**運算檢查總和**報告。

若要監控**運算檢查總和**任務的進度，請使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3control/describe-job.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3control/describe-job.html) 命令。此命令會檢查指定批次操作任務的狀態。若要使用此命令，請以您自己的資訊取代{{使用者輸入預留位置}}。

例如：

```
aws s3control describe-job --account-id {{111122223333}} --job-id {{1234567890abcdef0}}
```

若要[取得](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-list-jobs.html)所有**作用中**和**完成**批次操作任務的清單，請參閱《AWS CLI 命令參考》**中的[列出任務](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-list-jobs.html)或 [list-jobs](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3control/list-jobs.html)。

### 使用 REST API
<a name="Compute-checksum-api"></a>

您可以使用 [CreateJob](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html)，透過**運算檢查總和**傳送 REST 請求，以驗證物件完整性。您可以透過將 REST 請求傳送至 [DescribeJob](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html) API 操作，監控**運算檢查總和**請求的進度。每個批次操作任務都會執行下列狀態：
+ **新**
+ **準備**
+ **就緒**
+ **ACTIVE**
+ **暫停**
+ **已暫停**
+ **完成**
+ **取消**
+ **失敗**

API 回應會通知您目前的任務狀態。