通过自动延长 Amazon S3 对象锁定保留期限来维护对象不可变性 存储博客

通过自动延长 Amazon S3 对象锁定保留期限来维护对象不可变性 存储博客


自动延长 Amazon S3 对象锁定保留期限,以保持对象不可变性

关键要点

数据保护的关键在于防止意外或恶意删除,使用不可变性技术可以保护数据不被更改或删除。Amazon S3 的对象锁定功能可以有效预防勒索软件,并允许用户设置合规模式,确保数据在客户定义的保留期内不可删除。本文提供了一种基于 AWS CloudFormation 的解决方案,旨在自动扩展 Amazon S3 对象锁定的保留期限,有效保持数据的不可变性。

保护数据免受意外或恶意删除是数据保护的重要组成部分。不可变性能够在本地保护数据,防止不必要的更改或删除。然而,使用者有时不确定应保持数据不可变的时间长度。对于这种情况,用户希望找到一个解决方案,以保持短期不可变性,直到满足一定条件。希望在没有长期承诺的情况下,他们的数据能够始终受到保护。

Amazon S3 对象锁定是针对对象存储不可变性应用的行业标准,全球众多企业使用该功能来确保数据安全。当在合规模式下锁定 Amazon S3 对象时,用户无法更改保留模式或缩短保留期限。合规模式在客户定义的保留期内禁止对象的永久删除。用户可能会为某些对象设置一年的合规模式,但当这些对象接近他们的保留日期时,仍会发现这些对象很有价值。用户常常希望延长当前对象版本的 S3 对象锁定设置,而让非当前版本过期,以便可以进行永久删除。

在本文中,我们介绍了一种基于 AWS 的CloudFormation解决方案,能够自动扩展 S3 对象锁定的保留期限,并可以大规模应用。通过不断延长存储在 Amazon S3 存储桶中的所有当前版本对象的保留期,直到它们成为非当前版本,并且满足定义的最小保留期,便无法永久删除这些对象。

解决方案概览

此解决方案每周运行一次,确保受保护存储桶或指定的prefix中的所有当前版本对象在至少定义的“最小保留期”内不可变。

要实现此解决方案,需要一个 AWS 账户和一个已启用 S3 对象锁定的 Amazon S3 通用存储桶即“受保护存储桶”。S3 对象锁定需要在存储桶上启用S3 版本控制。当 S3 存储桶启用 S3 版本控制时,简单的删除请求会放置一个删除标记或写入同一键对象名称将导致原始对象成为非当前版本。可以使用S3 生命周期设置关于对象版本计数或非当前版本生命周期的特定规则。

部署此解决方案将对所有在范围内的当前对象版本应用合规模式,即使它们当前没有锁定或应用治理模式。使用合规模式,S3 对象锁定在定义的保留期内禁止永久删除对象。请考虑这一点的影响,并确保该解决方案在生产环境中的需求得到满足。

工作原理

每周创建Amazon S3清单报告启动 Athena通过S3 事件通知和AWS Lambda。Amazon Athena执行查询,输出需要延长保留期的对象,以确保在接下来的一周不会低于最低保留期因此这里是“7”。Athena 查询输出需要 S3 对象锁扩展的对象版本的 CSV清单。这触发一个Amazon S3 批量操作任务同样通过 S3 事件通知和 Lambda。S3 批量操作对清单中的每个对象执行PutObjectRetention操作,将其保留日期设置为今天 最小保留期 扩展频率。

解决方案部署

下载此 CloudFormation 模板。使用该模板在与 S3 存储桶相同的AWS 区域中创建一个CloudFormation堆栈。堆栈参数如下图所示,包括:

您的存储桶名称 :“myprotectedbucket”前缀可选 :“importantobjects/”最小对象锁定保留期 :90天扩展频率 :28天

在部署期间,堆栈使用 AWS Lambda 函数检查受保护存储桶是否已启用 S3 对象锁定。如果没有,则部署会失败。然后,它会创建一个唯一命名的 S3 存储桶,Amazon Athena 工作区,以及所有所需的 S3 事件通知、Lambda 函数和AWS 身份与访问管理 (IAM)角色。查看已部署的 CloudFormation 堆栈的 资源 选项卡,了解所有已部署资源。

堆栈在大约五分钟内部署,首次S3 清单交付后自动运行。 首次交付清单可能需要长达48小时。 此解决方案不使用任何现有的 S3 清单配置,因为它需要特定的输出格式和位置。这与任何其他 S3 清单配置是相互独立的,并且不会干扰。

如果在同一存储桶内的前缀中有不同数据集,且其合规要求不同,只需针对每个前缀多次部署此解决方案。

由于此解决方案每周运行,因此不会立即应用于新创建的对象。如果这是一个需求,请配置存储桶的默认 S3 对象锁定保留设置为合规模式,持续时间至少为一周。此解决方案会延长每个对象范围内的 保留日期,确保对象始终受到保护。请注意,除非通过存储桶策略拒绝,否则可能会对新对象在写入时应用其他 S3 对象锁定保留设置,按此示例所示。

强制执行数据保留期

要在必要的保留期后自动永久删除非当前版本对象,请在受保护存储桶上配置NoncurrentVersionExpiration S3 生命周期规则。此动作仅在对象版本变为非当前版本后经过指定的天数后才能影响对象无论是新的对象版本被创建,还是放置了删除标记。

S3 生命周期到期规则在保留日期过后才会删除被锁定的对象。配置此规则仅在指定的天数经过后并且其保留期过期后,才会永久删除非当前版本对象。这确保数据在被删除或覆盖后保留在一个精确定义的时期内。

监控解决方案

您可以在S3 批量操作控制台中找到由解决方案触发的 S3 批量操作作业的状态。

您可以根据 作业描述 进行筛选,因为它包含受保护存储桶的名称。此外,作业带有标签,使您可以轻松识别它们:

键 jobcreatedby值 Auto Extend Object Lock Solution

请注意,每个 S3 批量操作作业将有一个失败任务。这是因为从 Athena 生成的 CSV 文件包含一个标题行,而S3 批量操作不支持清单中的标题行。您可以忽略此失败任务。S3 清单报告、Athena 输出和 S3 批量操作报告存储在解决方案存储桶中。这些是您遵循定义的最小保留期的合规记录。为了减少存储费用,您可能希望使用生命周期规则在规定时间后过期这些对象,和/或将较大的对象过渡到某一 S3 Glacier 存储类如果它们的保留时间至少为 90 天。

仅报告模式

要将解决方案运行到准备 S3 批量操作作业的阶段,而不自动启动该作业以应用 S3 对象锁定保留,请在部署 CloudFormation 堆栈后立即执行以下步骤:

打开 Lambda 函数 ltstack namegtExtendObjLockS3BatchJobLambdaltUIDgt。如果您需要识别 Lambda UID,请访问 CloudFormation 控制台,选择堆栈,然后选择 资源。在 代码 选项卡中找到行 ConfirmationRequired False 并将 False 替换为 True。部署 更新后的代码。

一旦生成了第一个清单,解决方案将准备 S3 批量操作作业。由于先前的更改,该作业保持在 挂起 状态,直到手动确认挂起状态下的作业在 30 天后将失败。 查看作业配置和清单,以验证操作是否符合您的意图。您可以选择手动在 Amazon S3 控制台中运行该作业,或撤销上述的更改,并等待下一个 S3 清单生成。

大规模操作

在测试中,我们发现一次扩展前缀中所有 10 亿个当前版本对象的操作完成得相当快:

通过自动延长 Amazon S3 对象锁定保留期限来维护对象不可变性 存储博客Athena 处理清单并输出一个 66 GB 的 CSV 文件!:14 分钟。S3 批量操作‘准备’阶段:大约 8 小时。‘活动’阶段应用 S3 对象锁定:大约 24 小时。

这表明该解决方案能够扩展到最大 S3 存储桶的需求。请注意,由于默认的Athena DML 查询超时时间为 30 分钟,如果您的存储桶拥有超过大约 20 亿个对象,则可能需要采取以下一项或两项措施:

在Athena 服务配额中请求增加 DML 查询超时。多次部署 CloudFormation 模板,指定不同的前缀。

部署后更改配置

您可以在解决方案部署后,通过更新 CloudFormation 堆栈来修改前缀、最小保留期和扩展频率。请不要更改受保护的 S3 存储桶,因为这不被支持。

收费

S3 对象锁定扩展的 PUT 操作按S3 标准存储类的 PUT 请求收费,且不管对象所处的存储类型。解决方案的唯一其他显著费用来自 S3 批量操作。

例如,如果我们对包含 100 万个对象的存储桶或前缀部署此解决方案,扩展频率为 28 天,则估计每月总费用为 763 美元,基于 useast1 区域的定价。

扩展频率决定了解决方案的费用。例如,如果您的需求可以接受 280 天的扩展频率,则每个对象可以每 280 天而不是每 28 天延长锁定。PUT 请求的费用和 S3 批量操作的“每对象”费用将减少 10 倍。调整扩展频率以满足您的需求使用 7 的倍数,因为该解决方案每周运行。最小保留期不影响解决方案的费用。

部署示例 1:90 天最小保留期

您希望确保所有当前版本的对象在未来至少 90 天内保持不可变。您指定最小保留期为 90 天,扩展频率为 28 天。

啊哈加速器安装包

一个示例对象的剩余保留期在生成每周清单时具有 91 天。如果此对象未被扩展,则在下周,其剩余保留期仅为 84 天,这将低于指定的最小保留期。因此,解决方案将对象的保留期延长至 118 (9028) 天,将不需要进一步延长,直至 28 天后。

部署示例 2:在没有最小保留期的情况下保持不可变性

您没有特定的最小保留要求,仅希望确保所有当前版本的对象保持不可变。您希望最小化成本,并且能够接受对象的保留日期最长为一年。您指定最小保留期为 1一天,扩展频率为 364 天。

一个示例对象的剩余保留期在生成每周清单时具有 5 天。如果此对象未被扩展,则在下周不再可变。因此,解决方案将对象的保留期延长至未来 364 天。

清理

由于该解决方案是使用 CloudFormation 部署的,您可以通过删除 CloudFormation 堆栈来移除它。删除 CloudFormation 堆栈不会影响对任何对象应用的 S3 对象锁定保留期。

您必须手动删除“解决方案” S3 存储桶创建用于存储清单、Athena 输出和报告。要识别解决方案存储桶,请访问 CloudFormation 控制台,选择堆栈,选择 资源,找到 ExtendObjLockInventoryBucket,并选择链接以在新选项卡中打开解决方案存储桶。要清空该存储桶,您可应用生命周期规则,或使用 S3 控制台中的 清空存储桶按钮,一旦 S3 存储桶被清空,再进行删除。

结论

数据不可变性是数据保护规划的核心部分。有时,不确定数据应该保持不可变的时间长度,因为旧数据和新数据同样重要。在本文中,我们介绍了一种在 Amazon S3 中设置和维护当前版本对象不可变性的方法。

确保您 S3 存储桶或前缀中的现有

2026-01-27 15:01:27

识别 PostgreSQL plpgsqlcheck 扩展的语义问题 数据库博客
  • 2026-01-27 14:46:44

使用 plpgsqlcheck 扩展检测 PostgreSQL 语义问题关键要点在从 Oracle 迁移到 PostgreSQL 的过程中,检测可能出现的语义问题是一个关键环节。Oracle 在代码编...