在 Amazon S3 中检查静态数据的对象完整性 - Amazon Simple Storage Service

在 Amazon S3 中检查静态数据的对象完整性

如果您需要验证存储在 Amazon S3 中的数据集的内容,S3 批量操作计算校验和操作会计算静态对象的完整对象或复合校验和。计算校验和操作使用批量操作来异步计算一组对象的校验和值,并自动生成合并的完整性报告,而无需创建数据的新副本,也无需还原或下载任何数据。

使用计算校验和操作,可以通过单个任务请求高效地验证数十亿个对象。对于每个计算校验和任务请求,S3 都会计算校验和值,并将其包含在自动生成的完整性报告(也称为完成报告)中。然后,可以使用此完成报告来验证数据集的完整性。

计算校验和操作适用于存储在 S3 中的任何对象,无论存储类别或对象大小如何。无论您是需要验证对象以作为数据保留最佳实践,还是需要满足合规性要求,计算校验和操作都可以通过执行静态校验和计算,来降低数据验证所需的成本、时间和精力。有关计算校验和定价的信息,请参阅 Amazon S3 定价

然后,可以使用所生成的完成报告的输出来与存储在数据库中的校验和值进行比较,以验证数据集在一段时间内是否保持完好无损。这种方法有助于您保持端到端的数据完整性,以满足业务和合规性需要。例如,可以使用计算校验和操作来提交 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,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在页面顶部的导航栏中,选择当前所显示 AWS 区域的名称。接下来,选择要在其中创建任务的区域。

    注意

    对于复制操作,必须在目标存储桶所在的同一区域中创建任务。对于所有其它操作,必须在与清单中的对象相同的区域中创建任务。

  3. 在 Amazon S3 控制台的左侧导航窗格中选择批量操作

  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,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择批量操作

  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 命令来创建新的批量操作任务并提供对象的列表。然后,指定校验和算法和校验和类型,以及要在其中保存计算校验和报告的目标存储桶。以下示例通过使用 S3 为 AWS 账户 111122223333 生成的清单来创建 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 Command Reference》中的 list-jobs

可以发送 REST 请求,以使用 CreateJob 通过计算校验和来验证对象完整性。可以通过向 DescribeJob API 操作发送 REST 请求来监控计算校验和请求的进度。每个批量操作任务都将逐步经历以下状态:

  • 正在准备

  • 就绪

  • ACTIVE (处于活动状态)

  • 正在暂停

  • 已暂停

  • 完成

  • 正在取消

  • 已失败

API 响应会通知您当前的任务状态。