MinIO 中的对象锁定、版本控制、保留和模式

Object Locking, Versioning, Holds and Modes in MinIO


MinIO 支持完整的对象锁定框架,提供法律保留和保留(具有治理和合规模式)。对象锁定功能是许多受监管行业(从金融服务到医疗保健)的要求。

生命周期管理是数据生态系统中越来越重要的一个要素。数据是大多数组织的主要资产,如今比我们通常与大型企业联系在一起的实物资产(火车、飞机、汽车或钻井平台)更为重要。保护这些数据以及管理保护数据的时间长度是一项复杂的挑战。

MinIO 现在提供了完整的生命周期管理功能套件。这包括版本控制、对象锁定以及各种派生组件。每个用例都不一样,我们的目标是创建软件和文档,使我们的社区能够自信地实施这些功能。

我们的方法模仿亚马逊的。这出于以下几个原因很重要。首先,对于寻求其应用程序兼容性的公司来说,在公共云中可用的相同 S3 API 调用需要在本地工作。其次,亚马逊对这个问题采取了谨慎的方法,考虑了所有角落案例并构建了一个强大的产品。我们承认对他们的债务。第三,鉴于亚马逊的领导地位,这种方法得到了广泛采用,并且大多数问题都已解决。

即使有亚马逊的领导地位,也没有很多公司实施了此功能。我们很高兴在名单上添加我们的名字。鉴于我们软件的其他属性,我们认为这消除了围绕将 MinIO 作为您的私有云对象存储进行采用的任何犹豫。

具有不可变性和防止删除的特性可确保您的数据资产安全。

版本控制

版本控制允许用户在同一个存储桶中保留对象的多个变体。版本控制提供了一种机制来保留、检索和恢复存储在存储桶中的每个对象的每个版本。版本控制确保对象在从应用程序到人为错误的一系列故障中仍然可用。

版本控制在存储桶级别启用。启用后,MinIO 会自动为对象创建唯一的版本 ID。同一个对象可以有多个版本。

版本控制的主要优势之一是防止无意覆盖或删除对象。这是使用删除标记的概念完成的。当一个已版本控制的对象被删除时,它不会被永久删除。而是创建一个删除标记,并成为该对象的当前版本。当读取该对象时,它会返回 404 Not Found 消息。

具有删除标记的对象可以恢复。

同样,如果已版本控制的对象被覆盖,它将创建一个新版本,并成为当前版本。同样,可以根据需要恢复旧版本。

为了说明这些变化,MinIO 中现在有三种存储桶状态。未版本控制(默认),版本控制已启用,或版本控制已挂起。请注意,一旦存储桶启用了版本控制,该操作就无法撤消,只能挂起。版本控制是存储桶内的全局设置,这意味着所有对象现在都已版本控制。

具有相应权限的用户可以挂起版本控制以停止累积对象版本。这仅适用于该存储桶,不适用于其他存储桶。有关此情况下发生情况的更多信息,请参阅文档。

与所有 MinIO 一样,版本控制可以使用 MinIO 客户端 (mc)、SDK 或通过命令行应用。

版本控制是保护数据免受意外操作的最简单方法。它确实会增加存储桶大小的效果,因为对象是版本控制的,并且会导致对象之间更高的相互依赖关系,以及隐藏对象依赖关系的风险。这可以通过生命周期管理选择来缓解。尽管如此,对于大多数组织来说,这对于数据保护来说是一个合理的权衡。

然而,还有一些其他用例需要另一层确定性。

对象锁定、保留和法律保留

对象锁定是那些在监管环境中运营或在保留、审计或其他合规性相关要求方面具有前瞻性政策的公司的一项关键功能。我们将在短期内发布我们的最终 Cohasset 报告,但已获得了有利的评估结果。

这项工作建立在我们之前的一次写入多次读取 (WORM) 功能集的基础上,并根据需要对其进行扩展。与往常一样,我们采用了极简主义的方法,确保它具有完整的功能,而不会过分强调功能,从而影响性能。

虽然用例数不胜数,但可以有效地将其简化为法律保留和保留。此外,还有模式,要么是治理要么是合规性,这些模式具有一定的含义。这里有一些重叠,因此我们将尽力在描述中做到精确。

保留

保留确保对象在一段时间内受到 WORM 保护(无法删除或覆盖)。它可以以秒、天或年为单位表示。

保留是在对象级别设置的。您可以显式或通过存储桶默认设置将保留期放置在对象版本上。在存储桶级别设置的默认锁定配置不会追溯应用于之前创建的对象版本。它仅适用于以后创建的对象。当您将保留期显式应用于对象版本时,您将为该对象版本指定一个保留截止日期。保留截止日期设置存储在对象版本的元数据中,并保护该对象版本,直到保留期过期。

使用存储桶默认设置时,不会指定保留截止日期。相反,将设置一个持续时间(天或年),所有放置在存储桶中的对象版本都应该受到保护。当将新对象放置在存储桶中时,将通过将指定的持续时间添加到对象版本的创建时间戳来为该对象版本计算保留截止日期。然后,该对象版本就像显式锁定一样,在该对象版本上具有该保留期。

当您将保留期放置在对象版本上时,将在对象版本的元数据中存储一个时间戳,以指示保留期何时过期。保留期过期后,可以删除该对象版本,除非还对该对象版本进行了法律保留。

在创建对象版本时指定的显式保留模式和期限始终会覆盖存储桶默认设置。

保留期可以通过提交新的锁定请求来延长。

保留框架中存在两种类型的模式

治理模式

当为您的对象或存储桶设置保留期时,当目标是保护对象免遭标准用户删除时,使用治理模式。话虽如此,仍然有一些用户会保留修改保留设置或删除对象的必要权限。这些用户将需要 s3:BypassGovernanceRetention 权限以及 DeleteObject 权限。

合规模式

合规模式更严格,在保留期内无法撤消。因此,当您确定在保留期内不希望任何人(包括根用户)能够删除对象时,应使用合规模式。

法律保留

法律保留提供与保留期相同的保护(WORM),但它默认没有过期日期,也不允许设置过期日期。它是一个无限期保留,只能由授权用户删除。

组合和版本控制

虽然保留和法律保留可以防止对象被删除或覆盖,但它们可以重叠。对象版本可以同时具有保留和法律保留。保留和法律保留适用于单个对象版本。单个对象的不同版本可以具有不同的保留模式和期限。

具体而言,对象可以具有保留期(称为六个月)和法律保留(无限期)。即使在保留期过期后,对象版本也不能被删除,因为它仍然具有法律保留。只有在解除该对象版本的法律保留后,才能删除它。

虽然对象可能具有保留或法律保留,但它们仍然可以被版本控制。对对象版本进行复制操作不会将源上可能存在的保留和法律保留设置转发到目标。



以下是对法律保留和保留期的简要概述

要使用 S3 对象锁定,请按照以下基本步骤操作

  1. 创建一个启用了对象锁定的新存储桶。

./mc mb myminio/testbucket --with-lock

上面列出的命令将创建一个支持对象锁定的存储桶。

(可选) 为放置在存储桶中的对象配置默认保留期。

/mc bucket lock myminio/testbucket governance 100d

将您要锁定的对象放置在存储桶中。

./mc cp /path/to/file myminio/testbucket

对您要保护的对象应用保留期、法律保留或两者。

./mc retention myminio/testbucket/file governance 1y

./mc legalhold myminio/testbucket/file on

非常简单明了。 

结论

这些功能的加入为我们不断增长的企业功能套件增添了另一层。对于已经使用 MinIO 的银行和医疗保健公司来说,这些功能(得到我们 Cohasset 评估的支持)为 MinIO 提供了一套额外的用例,扩展了我们在组织内的影响力。

我们鼓励您亲自尝试这些功能。 我们有文档 此处 以及我们的 Slack 频道 一直在线。