檢查 Amazon S3 中靜態資料的物件完整性 - Amazon Simple Storage Service

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

檢查 Amazon S3 中靜態資料的物件完整性

如果您需要驗證存放在 Amazon S3 中的資料集內容,S3 批次操作運算檢查總和操作會計算靜態物件的完整物件或複合檢查總和。運算檢查總和操作使用批次操作來非同步計算一組物件的檢查總和值,並自動產生合併完整性報告,而無需建立新的資料副本,或還原或下載任何資料。

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

運算檢查總和操作適用於存放在 S3 中的任何物件,無論儲存類別或物件大小。無論您需要將物件驗證為資料保留最佳實務,還是符合合規要求,運算檢查總和操作都會透過執行靜態檢查總和計算來降低資料驗證所需的成本、時間和精力。如需運算檢查總和定價的資訊,請參閱 Amazon S3 定價

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

使用支持的檢查總和演算法

對於靜態資料,您可以使用任何支援的檢查總和演算法,計算 Amazon S3 中的完整物件和複合檢查總和類型:

  • CRC-64/NVME (CRC64NVME)

  • CRC-32 (CRC32)

  • CRC-32C (CRC32C)

  • SHA-1 (SHA1)

  • SHA-256 (SHA256)

  • MD5 (MD5)

完整物件與複合檢查總和類型

Amazon S3 支援下列完整物件和複合檢查總和演算法類型:

  • CRC-64/NVME (CRC64NVME):僅支援完整的物件檢查總和類型。

  • CRC-32 (CRC32):支援完整物件和複合檢查總和類型。

  • CRC-32C (CRC32C):支援完整物件和複合檢查總和類型。

  • SHA-1 (SHA1):支援完整物件和複合檢查總和類型。

  • SHA-256 (SHA256):支援完整物件和複合檢查總和類型。

  • MD5 (MD5):支援完整物件和複合檢查總和類型。

使用運算檢查總和

對於存放在 Amazon S3 中的物件,您可以使用運算檢查總和操作搭配 S3 批次操作來檢查靜態儲存資料的內容。您可以使用 Amazon S3 主控台、 AWS Command Line Interface (AWS CLI)、REST API 或 AWS SDK 建立Compute checksum批次操作任務。當運算檢查總和任務完成時,您會收到完成報告。如需如何使用完成報告的詳細資訊,請參閱追蹤任務狀態和完成報告

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

使用運算檢查總和操作
  1. 登入 AWS Management Console 並開啟位於 https://https://console.aws.amazon.com/s3/ 的 Amazon S3 主控台。

  2. 在頁面頂端的導覽列中,選擇目前顯示的名稱 AWS 區域。​接下來,選擇您要在其中建立作業的區域。

    注意

    對於複製操作,您必須在與目的地儲存貯體相同的區域中建立作業。對於所有其他操作,您必須在與資訊清單中的物件相同的區域中建立作業。

  3. 在 Amazon S3 主控台的左側導覽窗格上,選擇 Batch Operations

  4. 選擇建立作業

  5. 檢視您要建立任務 AWS 區域 的 。

    注意

    對於複製操作,您必須在與目的地儲存貯體相同的區域中建立作業。對於所有其他操作,您必須在與資訊清單中的物件相同的區域中建立作業。

  6. Manifest format (資訊清單格式) 下,選擇要使用的資訊清單物件類型。

    • 如果您選擇 S3 清查報告 (manifest.json),請輸入manifest.json物件的路徑,以及 (選用) 如果您想要使用特定物件版本時的清單物件版本 ID。或者,您可以選擇瀏覽 S3 並選擇資訊清單 JSON 檔案,該檔案會自動填入所有資訊清單物件欄位項目。

    • 如果您選擇 CSV,請選擇資訊清單位置類型,然後輸入 CSV 格式資訊清單物件的路徑,或選擇瀏覽 S3 以選取資訊清單物件。資訊清單物件必須遵循主控台中所描述的格式。如果您想要使用資訊清單物件的特定版本,您也可以指定物件版本 ID。

    • 如果您選擇使用 S3 複寫組態建立資訊清單,則會使用複寫組態產生物件清單,並選擇性地儲存至您選擇的目的地。使用複寫組態產生資訊清單時,唯一可用的操作是複寫

  7. 選擇下一步

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

  9. 填寫設定其他選項的資訊,然後選擇下一步

  10. 設定其他選項頁面上,填寫運算檢查總和任務的資訊。

    注意

    完成報告下,請務必確認確認陳述式。此確認陳述式確認您了解完成報告包含檢查總和值,用於驗證存放在 Amazon S3 中的資料的完整性。因此,應謹慎分享完成報告。此外,請注意,如果您要建立運算檢查總和請求,並指定外部帳戶擁有者的儲存貯體位置來存放完成報告,請務必指定外部儲存貯體擁有者的 AWS 帳戶 ID。

  11. 選擇下一步

  12. 檢閱頁面上,檢閱並確認您的設定。

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

  14. 確認變更後,請選擇建立任務

列出和監控所有運算檢查總和請求的進度
  1. 登入 AWS Management Console 並開啟位於 https://https://console.aws.amazon.com/s3/ 的 Amazon S3 主控台。

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

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

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

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

每個批次操作任務都會進行不同的任務狀態。您也可以在 S3 主控台中啟用 AWS CloudTrail 事件,以接收任何任務狀態變更的提醒。對於作用中任務,您可以在任務詳細資訊頁面上檢閱執行中的任務和完成率。

Java
範例:建立運算檢查總和任務

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

// 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); }
範例:檢視運算檢查總和任務詳細資訊

下列範例示範如何指定任務 ID,以檢視運算檢查總和任務請求的任務詳細資訊 (例如任務完成率):

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

您可以使用 create-job命令建立新的批次操作任務,並提供物件清單。然後,指定檢查總和演算法和檢查總和類型,以及您要儲存運算檢查總和報告的目的地儲存貯體。下列範例使用 S3111122223333 的 AWS 帳戶 S3 產生資訊清單,建立 S3 批次操作運算檢查總和任務。

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

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 批次操作清單頁面上。Amazon S3 會處理物件清單,並計算每個物件的檢查總和。任務完成後,S3 會在指定的目的地提供合併運算檢查總和報告。

若要監控運算檢查總和任務的進度,請使用 describe-job命令。此命令會檢查指定批次操作任務的狀態。若要使用此命令,請以您自己的資訊取代使用者輸入預留位置

例如:

aws s3control describe-job --account-id 111122223333 --job-id 1234567890abcdef0

若要取得所有作用中和完成批次操作任務的清單,請參閱《 AWS CLI 命令參考》中的列出任務list-jobs

您可以使用 CreateJob 透過運算檢查總和傳送 REST 請求來驗證物件完整性。您可以透過將 REST 請求傳送至 DescribeJob API 操作來監控運算檢查總和請求的進度。每個批次操作任務都會進行下列狀態:

  • 準備

  • 就緒

  • ACTIVE

  • 暫停

  • 已暫停

  • 完成

  • 取消

  • 失敗

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