在 Amazon S3 中的现有对象上启用和验证其他校验和

在数据迁移或数据传输期间验证数据完整性是一种数据持久性最佳实践,可确保您的数据在到达目的地时没有错误且不会损坏。验证数据完整性的一种方法是通过校验和,您基本上可以将其视为数据的数字指纹,可用于跟踪传输期间或静态数据的任何变化。许多媒体和娱乐组织以及政府机构使用校验和进行端到端的数据完整性验证并维护证据保管链。

Amazon S3 校验 和 使您能够在 向 Amazon S3 上传和下载期间验证数据的完整性 ,从而使您能够轻松遵守特定行业的数字保存最佳实践。

在这篇博客中,我们将深入探讨如何向现有 Amazon S3 对象添加额外的校验和,如何向不启用额外校验和而上传的新创建的对象添加额外的校验和,以及如何使用 Amazon S3 计算的校验和信息验证本地文件的完整性,以验证两个文件之间的数据完整性。

借助本指南,您可以使用这些信息自信地验证在 Amazon S3 中传输和存储的数据在整个生命周期内的完整性。此功能很重要,因为您可以验证资产在复制时是否被更改,可以加快数据的完整性检查,并且可以确认每个字节都是在不做更改的情况下传输的,从而可以保持端到端的数据完整性。

为现有 Amazon S3 对象添加和验证校验和

Amazon S3 最近增加了 新的校验和功能 ,允许客户在四种哈希算法之间进行选择:SHA-1、SHA-256、CRC-32 和 CRC-32C。S3 是云中第一个支持一系列校验和算法的存储服务。您可以灵活地选择最适合您业务需求的算法。借助这些功能,客户可以在上传和下载到 Amazon S3 期间提高性能并降低数据完整性检查的成本。这使客户能够验证资产在复制时没有被更改。Amazon S3 将使用该校验和值来验证对象,并在对象的整个生命周期内将其存储在 S3 中。计算出的校验和保存在存储在 S3 中的对象中,并由服务在 生命周期 复制 存储类 转换等操作期间用于验证对象。客户还可以使用校验和将其本地数据与 Amazon S3 中存储的对象进行比较。

这个 亚马逊云科技 新闻博客 解释了客户在通过 Amaz on S3 控制台 上传内容时如何使用新的校验和功能。对于想要大规模自动化上传过程的客户,他们可以参考 这篇关于构建可扩展校验和的博客 ,该博客解释了如何使用新的校验和功能来构建自定义上传器函数来传输数据。但是,许多客户已经构建了解决方案,可以使用 亚马逊云科技 Transfer F amily 和 AW S Storage Gatew ay 等服务提取数据 ,或者使用 亚马逊云科技 命令行接口 (亚马逊云科技 CLI) 等工具和 s 3 cp 命令。这些解决方案中有许多尚不支持新的校验和算法,因此在本博客中,我们将分享如何使用校验和算法。

正如介绍中提到的,在这篇博客文章中,我们重点关注三个关键领域:

  1. 向 Amazon S3 中的现有对象添加校验和。
  2. 集成自动机制,向未指定校验和的后续上传添加校验和。
  3. 根据原始本地数据验证 Amazon S3 中对象的校验和。

接下来,让我们开始吧。

第 1 部分:向 Amazon S3 中的现有对象添加校验和

有两种情况可以在不指定校验和算法的情况下为上传的数据添加校验和。在这两种情况下,我们都将使用 copy-object 函数为每个对象 添加校验和。

第 1a 部分:准备环境

为了准备环境,我们创建了一个新的存储桶并通过 亚马逊云科技 管理控制台上传文件。这只是为了创建一个模拟示例,因此我们可以向对象追溯添加校验和。

  1. 在亚马逊 S3 中创建存储桶。

a. 登录 亚马逊云科技 管理控制台 并访问 S3 控制台
b. 然后,选择 创建存储桶
c. 在 “ 常规配置 ” 部分的 “ 存储桶名称 ” 框中,键入存储桶名称。

    • 在 Amazon S3 的所有现有存储桶名称中,您选择的存储桶名称必须是唯一的。帮助确保唯一性的一种方法是使用组织名称作为存储桶名称的前缀。存储桶名称必须符合某些规则。有关更多信息,请查看 Amazon S3 用户指南中的 存储桶限制和限制

d. 选择 A WS 区域
e. 向下浏览页面并保持所有其他默认选项不变。
f. 选择 “ 创建存储桶 ” 按钮。Amazon S3 成功创建您的存储桶后,控制台会在存储桶 面板中显示您的空 存储桶

  1. 创建文件夹。

a. 在 Bucket s 部分中,选择您刚刚创建的新存储桶的名称。
b. 然后,在 “ 对象 ” 部分中,选择 “ 创建” 文件夹
c. 在 “文件夹 ” 部分的 “文件夹名称” 区域中,命名新的文件夹 数据
d. 将 服务器端加密 选项保留为 Amazon S3 托管密钥 (SSE-S3) , 然后选择 创建文件夹。

3。将一些数据文件上传到新的 Amazon S3 存储桶。

a. 在 “ 对象 ” 部分中,选择数据文件夹 的 名称
b. 然后,选择 “上 ” 按钮。
c. 在 “上 ” 页面上,选择 “ 添加文件 ” 。
d. 按照 Amazon S3 控制台的说明上传本地文件
e. 文件上传完毕后,选择 “上 ” 按钮。
f. 然后,您将看到 Uplo a d: 状态 页面,显示您的上传是否已成功完成。如果上传成功,请选择 “关 ” 按钮。

将数据上传到新存储桶后,请在您使用的同一 S3 控制台 的 “ 对象 ” 部分中选择 该对象。要选择对象,必须将鼠标悬停在对象名称上并直接选择对象名称。注意,仅选择文件名旁边的单选按钮不会执行选择。

Amazon S3 Console showing a red arrow pointing to object newly uploaded.

然后,您将看到另一个页面,其中包含有关您的对象的其他细节。 向下导航到 “ 其他校验和 ” 部分,您将看到 “ 其他校验和 ” 已设置为 关闭。

Amazon S3 console checksum off

第 1b 部分:向现有对象添加校验和

现在,我们将设置一些资源,以便在接下来的演练中使用。例如,我们将设置一个 IAM 角色 和一个 A WS Lambda 函数,我们将使用它们向 Amazon S3 中的对象添加校验和。

运行:

git clone 
        
        
        
         
         
         https://github.com/aws-samples/amazon-s3-checksum-verification
        
        
        
        
        
        
cd amazon-s3-checksum-verification

这会将代码下载到您的本地计算机。 按照此文档 部署名为 s3-ch ecksum.yaml 的 亚马逊云科技 CloudFormation 堆栈。 按照文档步骤操作将带您进入 亚马逊云科技 CloudFormation 控制台 。 当您到达 “ 指定堆栈参数 ” 部分时,在 S3Bucket 参数中输入您为存储桶 指定的名称。

为了向所有现有的 Amazon S3 对象添加校验和,我们使用 Amazon S3 批量操作 。在本演练中,我们创建了一个 CSV 清单文件供 Amazon S3 批量操作使用。

  1. 创建包含以下详细信息的 CSV 文件:
Examplebucket,objectkey1

例如

s3-integrity-demo,data/filename.img
  1. 准备环境时,将文件上传到您在上文第 1a 部分中创建的存储桶的根目录。

注意: 如果您要大规模执行此操作,我们建议您 按照文档设置 Amazon S3 库存报告 ,自动为您创建清单文件。 亚马逊 S3 库存 是亚马逊 S3 提供的帮助管理存储的工具之一。您可以使用它来审计和报告对象的复制和加密状态,以满足业务、合规性和监管需求。您还可以使用 Amazon S3 清单简化和加快业务工作流程和大数据任务,它为 Amazon S3 同步列表 API 操作提供了一种定时替代方案。您可能需要等待长达 24 小时才能生成报告。

有了清单文件(无论是我们在上面创建的 CSV 还是亚马逊 S3 清单清单)后,我们就会使用以下步骤创建一个 Amazon S3 批量操作任务。

  1. 登录 亚马逊云科技 管理控制台并打开 Amaz on S3 控制台
  2. 在 Amazon S3 控制台中, 在左侧导航窗格中选择 批量操作 。然后,选择 “ 创建作业 ” 按钮。接下来,选择要 在其中创建任务的 亚马逊云科技 区域
  3. 清单 格式下的 清单 部分中 ,选择 CSV 作为清单格式的类型。如果您选择 亚马逊 S3 库存报告 ,请输入亚马逊 S3 作为 CSV 格式库存报告的一部分生成的清单.json 对象的路径。或者,如果您想使用 最新版本以外的版本,则可以 为清单对象添加所需的 清单对象版本 ID 。如果您选择 CSV ,请在 清单对象 部分输入 CSV 格式的清单对象的路径。清单对象必须遵循控制台中描述的格式,有关更多详细信息,请参阅 有关支持格式的 文档 。如果您想使用最新版本以外的版本,则可以选择包含清单对象的版本 ID。然后,选择 “ 下一步 ” 。
  4. 按如下方式填写表格:

a. 在 “ 操作 ” 下 ,选择 “ 复制 ” 。
b. 在 “ 复制 目标 ” 区域的 “目标 ” 中,输入您之前创建的不带前缀的存储桶名称,例如 s3://your-bucket-name/data。
c. 检查, 我确认同名的现有对象将被覆盖
d. 在 “ 其他校验和” 部分 下选择 “ 用新的校验 和函数替换 ”,然后选择您选择的算法, 例如 SHA256。 然后,选择 “ 下一步 ” 。

5。取消选中 “ 生成完成报告 ”。
6。 选择从现有 IAM 角色
中选择, 然后选择包含 s3batch Role 的角色... 7. 要 查看 ,请验证设置。如果需要进行更改,请选择 “ 上一 步” 。否则,请选择 创建作业

创建作业后,将其选中,然后选择 “ 运行作业 ” 。任务完成后,您可以通过选择最初在 Amazon S3 控制台中上传的对象来验证结果。在这里,您将能够看到该对象启用了其他校验和,使用了哪种算法来计算校验和,以及计算了哪些校验和值。

text: Amazon S3 console checksum enabled and displaying a SHA256 checksum base64 encoded.

第 2 部分:在新上传的对象上自动启用校验和

为了向新上传的数据添加校验和,我们配置了一个 Amazon S3 事件,为添加到存储桶中的任何对象调用我们之前创建的 Lambda 函数。

  1. 登录 亚马逊云科技 管理控制台并打开 Amaz on S3 控制台
  2. Bucket s 部分中,选择要为其启用事件的存储桶的名称。注意,必须直接选择对象名称,而不是单选按钮。然后,选择 “ 属性 ” 。
  3. 向下导航到 事件通知 部分,然后选择 创建事件通知
  4. 在 “ 常规配置 ” 部分中, 为您的 事件通知指定描述性事件名称 。输入您为 前缀 创建的文件夹名称 ,例如 数据
  5. 在 “ 事件类型 ” 部分中,选择 pu t 和 p os t 。通过做出这些选择,这将仅对新的和更新的 Amazon S3 对象启用校验和。
  6. 在页面上进一步向下导航至 目的地 部分。保持该部分的默认值不变。 Lambda 函数 下拉菜单中,选择包含 checksumLambda 的 Lambda 函数...

Amazon S3 specify lambda for event section, showing Lambda function selected as the destination

7。选择 “ 保存更改 ” 。

现在,当对象上传到 Amazon S3 时,Lambda 函数将执行复制对象操作,在此期间,它将根据在上文第 1b 部分中部署初始 CloudFormation 脚本期间指定的算法添加额外的校验和。您可以通过将新文件上传到数据文件夹并检查校验和是否成功启用来对此进行测试。

第 3 部分:验证本地文件是否与 Amazon S3 生成的哈希值相匹配

现在,我们已经完成了两个应用额外校验和的程序。

  1. 使用批处理向现有对象添加校验和。
  2. 添加自动机制,无需指定校验和即可向上传的新采集数据添加校验和。

现在,我们将介绍如何使用校验和信息对照数据的本地副本验证 Amazon S3 中的数据。

在此示例中,我们使用简单的 python 脚本查询 Amazon S3 中的校验和详细信息,并使用此信息对本地文件执行相同的操作以验证数据匹配。

  1. 从 Github 克隆代码并进入存储库:
git clone 
        
        
        
         
         
         https://github.com/aws-samples/amazon-s3-checksum-verification
        
        
        
        
        
        
cd amazon-s3-checksum-verification
  1. 安装脚本所需的 python 软件包:
pip install -r requirements.txt
  1. 按照 本指南 配置 亚马逊云科技 cli 证书 。
  2. 运行以下命令检查文件完整性。
./integrity-check.py  --bucketName <your bucketname> --objectName <prefix/objectname-in-s3> --localFileName <local file name>
  1. 您应该会看到确认数据匹配的确认信息。例如:
PASS: Checksum match! - s3Checksum: GgECtUetQSLtGNuZ+FEqrbkJ3712Afvx63E2pzpMKnk= | localChecksum: GgECtUetQSLtGNuZ+FEqrbkJ3712Afvx63E2pzpMKnk=

integrity-check.py 函数使用 getObj ectAttributes API 调用查询亚马逊 S3 对象元数据。返回的信息包含对象部分的数量和大小及其校验和详细信息(算法和哈希值)。它使用这些信息来拆分本地文件并计算每个部分的哈希值。然后,它将本地文件哈希值与从 Amazon S3 返回的文件哈希值进行验证。

正在清理

本练习产生的唯一持续费用是 S3 中文件的 Amazon S3 存储费用,以及如果您继续上传更多对象,则会收取 Lambda 调用的费用。如果您不想产生任何额外费用,则应删除为测试创建的 S3 存储桶和 CloudFormation 脚本。

结论

在跨工作流程迁移和使用资产时,客户希望确保文件不会因网络损坏、硬盘故障或其他意外问题而被更改。将大量数据迁移到 Amazon S3 的客户应执行数据完整性检查,以此作为持久性最佳实践。

在这篇文章中,我们向您展示了如何:

  1. 向现有的 Amazon S3 对象添加额外的校验和。
  2. 在不启用其他校验和的情况下向上传的新创建的对象添加额外的校验和。
  3. 使用 Amazon S3 计算的校验和信息验证本地文件的完整性,以验证两个文件之间的数据完整性。

总而言之,Amazon S3 使用校验和值来验证您上传到 Amazon S3 或从 Amazon S3 下载的数据的完整性。我们鼓励您使用这些信息自信地验证 Amazon S3 中传输和存储的数据在整个生命周期内的完整性,以保持端到端数据的完整性。

有关附加校验和功能的更多详细信息,我们建议您阅读 技术文档 , 并遵循这篇便捷的 入门教程,介绍如何使用额外的校验 和检查 S3 中数据的完整性

感谢您阅读这篇文章。如果您有任何意见或问题,请将其留在评论部分。

Charlie Llewellyn

Charlie Llewellyn

Charlie Llewellyn 是一名解决方案架构师,在亚马逊网络服务公共部门团队工作。他专门研究数据分析,喜欢帮助客户使用数据做出更好的决策。在业余时间,他热衷于骑山地自行车和烹饪。

Muhammad Khas

穆罕默

德·哈斯穆罕默德·哈斯是英国中小型企业(SMB)的解决方案架构师。他喜欢支持客户使用人工智能和机器学习来增强他们的决策。工作之余,穆罕默德喜欢游泳和骑马。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。