使用 S3 版本控制、S3 对象锁定和 S3 复制保护 Amazon S3 上的数据免遭意外删除或应用程序错误

教程

概览

Amazon S3 是一种对象存储服务,具有业界领先的可扩展性、数据可用性、安全性、性能和 99.999999999%(11 个 9)的数据持久性。但是,即使是最耐用的存储设备也无法防范人为错误或软件错误,这些错误可能会导致应用程序损坏或意外删除数据。随着勒索软件事件的增加,各种规模的客户都在评估其他保护选项,以避免其在 Amazon S3 中的关键数据遭到恶意篡改。

对于任何数据而言,最佳实践都是做好备份,并采取保护措施,防止恶意或意外删除。本 Amazon S3 入门指南将为您展示如何遵循 Amazon S3 版本控制最佳实践,从而保留、检索和恢复 Amazon S3 存储桶中存储的每个对象的每个版本。然后,您可以在 S3 版本控制上添加 Amazon S3 对象锁定,以在固定时间内或无限期地防止数据被删除或覆盖。为了在另一个 AWS 区域创建更多数据副本以实现多区域保护,Amazon S3 复制可与 S3 版本控制和 S3 对象锁定配合使用,自动在 AWS 区域和单独的 AWS 账户之间复制对象。最后,您可以借助 Amazon S3 Storage Lens 存储统计管理工具,将当前数据保护级别和这些功能使用情况的可见性整合到单个控制面板中。

您将学到的内容

  • 创建 Amazon S3 存储桶
  • 启用 S3 版本控制以防止对象被覆盖
  • 配置 S3 对象锁定以防止意外删除对象
  • 使用 S3 Storage Lens 查看 S3 存储桶的数据保护状态

先决条件

您需要一个 AWS 账户才能完成本教程。访问此支持页面,了解有关如何创建和激活新 AWS 账户的详细信息

注意:由于我们正在演示 S3 对象锁定,因此本实验中的数据要等到创建 1 天后才能删除。

 AWS 使用经验

新手

 完成时间

30 分钟

 所需费用(使用免费指标)

低于 1 美元(Amazon S3 定价页面

 需要

AWS 账户

 使用的服务

 上次更新日期

2022 年 10 月 3 日

实施

步骤 1:创建 Amazon S3 存储桶

1.1 — 登录 Amazon S3 控制台

  • 如果您尚未创建 AWS 账户,请先创建一个账户。
  • 使用您的账户信息登录 AWS 管理控制台
  • 在 AWS 管理控制台服务搜索栏中,输入 S3。 在服务搜索结果部分下,选择 S3。

单击本教程中的屏幕截图可放大图像。

1.2 — 创建 S3 存储桶

  • 在左侧的导航窗格中,选择 Buckets(存储桶),然后在 Buckets(存储桶)部分中选择 Create bucket(创建存储桶)。

1.3

  • 为您的存储桶输入一个描述性名称。存储桶名称在所有 AWS 账户中都是全局唯一的。如果您选择的名称出现错误,请尝试其他组合。接下来,选择您希望在其中创建存储桶的 AWS 区域

1.4

  • 接下来,在 Object Ownership(对象所有权)部分中,保留 ACLs disabled(已禁用 ACL)的默认设置。我们建议您禁用 ACL(访问控制列表),除非在特殊情况下需要单独控制每个对象的访问权限。借助“对象所有权”,您可以禁用 ACL 并依靠策略进行访问控制。有关更多信息,请访问 Amazon S3 用户指南

 1.5

  • 在此存储桶的阻止公共访问设置部分中,默认的阻止公共访问设置适用于此工作负载,因此保留默认设置。

1.6 — 启用版本控制

  • 接下来,在Bucket Versioning(存储桶版本控制)部分中,确保 Enable Bucket Versioning(启用存储桶版本控制)。 Amazon S3 中的版本控制是一种将一个对象的多个变体保存在同一个存储桶中的方法。您可以使用 S3 版本控制功能来保留、检索和还原您的存储桶中存储的每个对象的每个版本。借助 S3 版本控制,您可以更轻松地从意外的用户操作和应用程序故障中恢复。为存储桶启用版本控制后,如果 Amazon S3 同时收到针对同一对象的多个写入请求,则会存储所有这些对象。

1.7 – 启用默认加密

  • 现在,在默认加密部分为存储桶启用默认加密。这些设置将应用于上传到存储桶中的任何对象,在此存储桶中,您未在上传过程中定义静态加密详细信息。对于此工作负载,在 Server-side encryption(服务器端加密)下选择 Enable(启用)。然后,在 Encryption key type(加密密钥类型)下,选择 Amazon S3-managed keys (SSE-S3)(Amazon S3 托管密钥 (SSE-S3))。如果 SSE-S3 无法满足您的工作负载要求,您还可以利用 AWS Key Management Service (AWS KMS)。有关 Amazon S3 如何使用 AWS KMS 的更多信息,请参阅 AWS Key Management Service 开发人员指南

1.8

  • 接下来,在 Advanced settings(高级设置)部分的 Object Lock(对象锁定)下,选择 Enable(启用)。
  • 您可以使用 S3 对象锁定通过“一次写入多次读取”(WORM) 模式存储对象。S3 对象锁定可帮助在固定时间内或无限期地防止对象被删除或覆盖。您可以使用 S3 对象锁定来满足需要 WORM 存储的法规要求,或者添加额外的一层保护以防止对象被更改和删除。
  • 请注意,此步骤只是在存储桶上启用了对象锁定。我们将在本教程的后面进行具体设置,例如保留模式保留期
  • 通过选择 Create bucket(创建存储桶)来创建 S3 存储桶。

步骤 2:设置 S3 版本控制

2.1 — 上传对象

  • 在您的工作站,创建一个包含词语 Version 1(版本 1)的文本文件并将其保存到您的工作站。

2.2

  • 接下来,选择 Objects(对象)选项卡。然后在 Objects(对象)部分中,选择 Upload(上传)。

2.3

  • 接着,在 Upload(上传)部分中选择 Add files(添加文件)。导航到本地文件系统,找到您在上面创建的测试文件。选择适当的文件,然后选择 Open(打开)。您的文件将在 Files and folders(文件和文件夹)部分列出。保留其余选项的默认设置,然后选择 Upload(上传)按钮。

2.4

  • 文件上传操作完成后,您将看到一条状态消息,指示上传是否成功。下面这种情况表示文件已成功上传。然后,选择 Close(关闭)。
  • 现在,您可以在 S3 控制台中看到该对象。

2.5

  • 在您的工作站上编辑您创建的文件。将文字更改为 Version 2(版本 2),然后使用相同的文件名进行保存。重复步骤 2.2 到 2.4,将更新后的文件上传到 Amazon S3。

2.6

  • 要查看存储桶中对象的版本列表,请选择 Show versions(显示版本)选项。对于每个对象版本,控制台都会显示唯一的版本 ID、对象版本的创建日期和时间以及其他属性。 

现在您已经启用了 S3 对象版本控制,该对象的所有版本将继续保留在您的 Amazon S3 存储桶中,可以检索或恢复。启用 S3 版本控制后,只有 Amazon S3 存储桶的拥有者才能永久删除某个版本。对对象执行 DELETE 操作时,后续的简单(无版本控制)请求将不再检索该对象,但它仍作为之前的版本保留在 S3 中。

启用版本控制后,简单的 DELETE 无法永久删除对象。相反,Amazon S3 会在存储桶中插入删除标记,该标记将成为具有新 ID 的对象的当前版本。 

保留对象的非当前版本会增加存储成本。您可以设置生命周期规则来管理生命周期和存储对象的多个版本的成本。您可以将生命周期规则配置为永久删除这些旧版本,或者以较低的存储成本提供额外的保护窗口。您还可以设置生命周期规则,将所有以前的版本存档到成本较低的 Amazon S3 Glacier Instant RetrievalAmazon S3 Glacier Flexible Retrieval 存储类,并在 100 天后删除它们,从而给您 100 天的时间来回滚对数据的任何更改,同时降低存储成本。

选中顶级对象左侧的复选框,然后选择 Open(打开)。此对象表示文件的最新版本,应显示 Version 2(版本 2)。在对象的旧版本上重复该过程,并确认它显示的是 Version 1(版本 1)。

2.7 — 演示删除对象

  • 关闭 Show versions(显示版本)可折叠版本列表。 

文本输入字段输入 delete(删除),然后选择 Delete objects(删除对象)按钮。

  • 选择 Close(关闭)。
  • 然后,在 Objects(对象)选项卡上,您将看到该对象似乎已被删除。
  • 打开 Show versions(显示版本)。 请注意,顶级对象现在作为 Type(类型)列下的 Delete marker(删除标记)列出,但该对象的两个版本仍然可用。

2.8 — 演示恢复对象

  • 要恢复对象,请选中顶级对象的复选框以删除 Delete marke(删除标记)。然后选择 Delete(删除)。
  • 文本输入字段中输入 permanently delete(永久删除),然后选择 Delete objects(删除对象)。
  • 选择 Close(关闭)。
  • 删除“删除”标记已恢复该对象。
  • 选中顶级对象左侧的复选框,然后选择 Open(打开)。此对象应作为 Version 2(版本 2)打开。
  • 选中对象旧版本左侧的复选框,然后选择 Open(打开)。此对象应作为 Version 1(版本 1)打开。

2.9 — 永久删除对象的特定版本

我们也可以在不创建删除标记的情况下删除对象的特定版本。在下一步中,我们将删除该对象的最新版本。

  • 打开 Show versions(显示版本)开关后,选中顶级对象左侧的复选框,然后选择 Delete(删除)。
  • 文本输入字段中输入 permanently delete(永久删除),然后选择 Delete objects(删除对象)。
  • 现在,我们已经删除了该对象的最新版本。
  • 要确认这一点,请选中其余对象左侧的复选框,然后选择 Open(打开)。 
  • 做出上述选择将在浏览器中打开一个新选项卡,其中包含文本 Version 1(版本 1)。

步骤 3:设置 S3 对象锁定

3.1

  • 在存储桶级别显示详细功能。在您的存储桶中,选择 Properties(属性)。

3.2

  • 向下导航到 Object Lock(对象锁定)部分。然后选择 Edit(编辑)。

3.3

  • Default retention(默认保留)部分中,选择 Enable(启用)。
  • Default retention mode(默认保留模式)设置为 Compliance(合规)。
  • 对于 Default retention period(默认保留期),在文本输入字段中输入 1,并将下拉框保留为 Days(天数)。然后选择 Save changes(保存更改)。

现在,我们已经为上传到存储桶的任何新对象设置了默认的对象锁定设置。存储桶中的现有对象不受这些设置的影响。要锁定现有对象,可以使用 S3 批量操作

治理模式下,除非拥有 s3:BypassGovernanceRetention 权限,否则无法覆盖或删除对象版本或更改其锁定设置。默认情况下,S3 控制台包含 x-amz-bypass-governance-retention:true 标头。如果您尝试删除受治理模式保护的对象并拥有 s3:BypassGovernanceRetention 权限,则操作将成功。因此,我们在本教程中使用的是合规模式。

使用合规模式锁定对象时,在保留期到期之前,任何用户(包括根用户)都无法删除该对象版本。此外,它的保留模式无法更改,其保留期也无法缩短。

本教程将演示即使是具有管理权限的用户也无法删除受合规模式保护的对象。请注意,被锁定且无法删除的对象将继续计费。为了最大限度地降低本教程的成本,请确保将默认保留期设置为仅 1 天,并且仅上传小文件。

3.4 — 上传新对象

  • Objects(对象)选项卡中,选择 Upload(上传)。 

3.5

  • 然后,在 Upload(上传)部分的 Files and folders(文件和文件夹)下,选择 Add files(添加文件)。导航到本地文件系统并选择任何要用于测试的小文件,然后选择 Open(打开)。您的文件将在 Files and folders(文件和文件夹)部分列出。保留其余选项的默认设置,然后选择 Upload(上传)。

3.6

  • 文件上传操作完成后,您将看到一条状态消息,指示上传是否成功。下面这种情况表示文件已成功上传。然后,选择 Close(关闭)。

3.7

  • Objects (对象)选项卡中,选择您上传的新测试对象。

在对象 Properties(属性)选项卡上,查看 Object management overview(对象管理概述)部分。请注意,我们设置的对象锁定默认值已应用于该对象。您还可以在上传新对象时覆盖这些默认值,并延长(但不能缩短)应用于锁定对象的保留日期。

3.8 — 尝试删除对象

在本节中,我们将探讨另一种无需创建删除标记即可永久删除对象特定版本的方法。 

  • 选择 Versions(版本)选项卡。  
  • 选中对象左侧的复选框,然后选择 Delete(删除)。

文本输入字段中输入 permanently delete(永久删除),然后选择 Delete objects(删除对象)。

  • 您应该会收到一条错误消息,指出该对象无法删除。这是在合规模式下使用对象锁定时的预期行为。您需要等到保留期(我们设置为 1 天)到期后才能删除此对象。
  • 然后,选择 Close(关闭)退出此窗口。

第 4 步:探索其他 S3 数据保护功能

尽管不在本教程范围内,但您应该注意另外两个 S3 数据保护主题:

S3 复制支持跨 Amazon S3 存储桶自动以异步方式复制对象。为对象复制配置的存储桶可以属于相同的 AWS 账户,也可以属于不同的 AWS 账户。您可以将对象复制到单个目标存储桶或多个目标存储桶。目标存储桶可以与源存储桶位于不同的 AWS 区域,也可以位于同一 AWS 区域。

S3 复制要求在源存储桶和目标存储桶上都启用 S3 版本控制。  

如果源存储桶启用了 S3 对象锁定,则目标存储桶也必须启用 S3 对象锁定。要在启用了对象锁定的存储桶上启用复制,您必须先联系 AWS Support。当 Amazon S3 复制应用了保留信息的对象时,它会对副本应用相同的保留控制,从而覆盖目标存储桶上配置的默认保留期。如果您没有对源存储桶中的对象应用保留控制,并将其复制到设置了默认保留期的目标存储桶,则目标存储桶的默认保留期将应用于您的对象副本。 

日志记录选项

Amazon S3 与 AWS CloudTrail 服务集成,后者提供用户、角色或 Amazon S3 中的 AWS 服务所执行操作的记录。CloudTrail 将 Amazon S3 的 API 调用子集捕获为事件,包括来自 Amazon S3 控制台的调用和对 Amazon S3 API 的代码调用。

服务器访问日志记录功能提供对存储桶发出的请求的详细记录。服务器访问日志对许多应用都很有用。例如,访问日志信息可用于安全和访问审计。它还可以帮助您了解您的客户群并了解您的 Amazon S3 账单。

使用 AWS Backup 集中和自动执行各种 AWS 服务和混合工作负载的数据保护。AWS Backup 提供了一种经济高效、完全托管且基于策略的服务,可进一步简化大规模数据保护。AWS Backup 还可帮助您满足有关数据保护的监管合规要求或业务政策要求。  

Amazon S3 是众多支持的 AWS Backup 资源之一。AWS Backup 还利用 S3 版本控制。

第 5 步:使用 Amazon S3 Storage Lens 存储统计管理工具查看 S3 数据保护指标

Amazon S3 Storage Lens 存储统计管理工具可在整个组织范围内查看存储在 Amazon S3 中的数据的数据保护状态。S3 Storage Lens 可以轻松显示已进行加密、版本控制、复制和对象锁定的数据百分比。您可以在 S3 Storage Lens 中查看跨多个 Amazon S3 存储桶、AWS 账户和 AWS Organizations 的数据保护可见性,无需额外付费,还可以立即开始使用 14 天的历史数据保护级别。

您可以使用 S3 Storage Lens 查看数据保护指标的摘要,以总数据量的百分比表示。其中包括:当前版本字节、非当前版本字节、加密字节、复制字节和对象锁定字节。

5.1

  • S3 控制台中,在导航窗格中找到 Storage Lens
  • 选择 Dashboards(控制面板),然后选择 default-account-dashboard

5.2

  • 选择 Data protection(数据保护)选项卡可查看与版本控制、加密、复制和对象锁定相关的统计信息。

第 6 步:清理

在以下步骤中,您将清理在本教程中创建的资源。最佳实践是删除您不再使用的资源,以免产生意外费用。

请注意,在尝试这些步骤之前,您需要等待 1 天以让 S3 对象锁定过期。

6.1 – 删除测试对象

  • 如果您已注销 AWS 管理控制台会话,请重新登录。导航到 S3 控制台并在导航窗格中选择 Buckets(存储桶)。首先,您将需要从测试存储桶中删除测试对象。选择您为本教程创建的存储桶左侧的单选按钮,然后选择 Empty(清空)。
  • Empty bucket(清空存储桶)页面,在 Permanently delete all objects(永久删除所有对象)确认框中键入 permanently delete(永久删除)。然后,选择 Empty(清空)以继续。
  • 接下来,您将看到一条横幅,指明删除是否成功。选择 Exit(退出)。

6.2 – 删除测试存储桶

  • 最后,您需要删除已创建的测试存储桶。回到您的账户中的存储桶列表。选择您为本教程创建的存储桶左侧的单选按钮,然后选择 Delete(删除)。
  • 查看警告消息。如果要继续删除此存储桶,请在文本输入字段确认框中输入存储桶的名称,然后选择 Delete bucket(删除存储桶)。

总结

恭喜! 您已经学习了如何使用 S3 版本控制和 S3 对象锁定保护 Amazon S3 中的数据,并使用 S3 Storage Lens 查看了这些设置。

此页内容对您是否有帮助?

后续步骤

要了解有关 Amazon S3 的更多信息,请参阅以下资源。