针对不可变 Blob 数据的版本级“一次写入,多次读取”(WORM) 策略

版本级“一次写入,多次读取”(WORM) 策略是一种可在帐户、容器或版本级别设置的不可变性策略。 若要详细了解 Azure Blob 存储的不可变存储,请参阅使用不可变存储以“一次写入,多次读取”(WORM) 状态存储业务关键的 Blob 数据

可用性

新帐户的帐户级别以及新帐户和现有帐户/容器的容器和 Blob 级别支持版本级不可变性 (VLW) 策略。 常规用途 v2 和高级块 Blob 帐户都支持这些策略。 分层命名空间帐户不支持此功能。

版本依赖项

版本级策略要求为存储帐户启用 Blob 版本控制。 若要了解如何启用 blob 版本控制,请参阅启用和管理 blob 版本控制。 请记住,启用版本控制可能会影响计费。 有关详细信息,请参阅 Blob 版本控制的定价和计费部分

启用版本控制后,首次上传某个 Blob 时,该 Blob 版本就是当前版本。 每次覆盖 Blob 时,都会创建一个新版本用于存储该 Blob 的先前状态。 删除 Blob 的当前版本时,该当前版本将变成先前版本,并保留到被显式删除为止。 先前 Blob 版本拥有在当前版本变成先前版本时即已生效的基于时间的保留策略。

如果默认策略已对存储帐户或容器生效,则当覆盖操作创建先前版本时,新的当前版本将继承该帐户或容器的默认策略。

对于每个版本,只能配置一个基于时间的保留策略。 一个版本还可以配置有一个法定保留。

若要了解如何配置版本级基于时间的保留策略,请参阅为 Blob 版本配置不可变性策略

启用和策略设置

将不可变策略与版本级 WORM 配合使用是一个两步过程。 首先,启用版本级不可变性。 然后,可以设置版本级不可变性策略。

若要在存储帐户级别设置策略,必须首先在存储帐户中启用版本级 WORM。 只能在创建帐户时执行此操作。 没有为现有的帐户启用版本级 WORM 的选项。

在帐户级别设置版本级不可变存储策略的示意图。

若要在容器级别设置策略,必须首先在帐户或容器中启用版本级 WORM。

如果计划在容器上启用版本级 WORM,建议在容器创建时启用。 但是,你可以将启用了非版本级 WORM 的容器迁移到启用了版本级 WORM 的容器。 如果你不想迁移容器,仍可以在该容器中设置容器级 WORM 策略,但设置 Blob 级策略的选项在该容器中不可用。

在容器级别设置版本级不可变存储策略的示意图。

若要在 Blob 级别设置策略,必须在帐户或容器中启用版本级 WORM。 没有在 Blob 级别启用版本级 WORM 的选项;必须继承这种设置。

在 Blob 级别设置版本级不可变存储策略的示意图。

迁移

现有容器可以支持版本级不可变性,但必须先经历迁移过程。 此过程可能需要一段时间才能完成。 启用后,无法删除该容器的版本级 WORM 支持。 每个存储帐户一次可迁移 10 个容器。 有关迁移容器以支持版本级不可变性的详细信息,请参阅迁移现有容器以支持版本级不可变性

对当前版本配置策略

为存储帐户或容器启用版本级不可变性支持后,可以选择为该帐户或容器配置默认的基于时间的保留策略。 为帐户或容器配置默认的基于时间的保留策略并随后上传某个 Blob 时,该 Blob 将继承此默认策略。 还可以选择在上传时替代任一 Blob 的默认策略,只需为该 Blob 配置自定义策略即可。

如果帐户或容器的默认基于时间的保留策略已解锁,则继承默认策略的当前 Blob 版本也将有一个已解锁的策略。 上传单个 Blob 后,可以缩短或延长针对当前 Blob 版本的策略的保留期,或删除当前版本。 还可以锁定当前版本的策略,即使针对帐户或容器的默认策略保持已解锁状态。

如果帐户或容器的默认基于时间的保留策略已锁定,则继承默认策略的当前 Blob 版本也将有一个已锁定的策略。 但是,如果在上传 Blob 时通过仅为该 Blob 设置策略来替代默认策略,则该 Blob 的策略将保持解锁状态,直到显式锁定该策略。 针对当前版本的策略已锁定时,你可以延长保留间隔,但无法删除该策略或缩短保留间隔。

如果未为存储帐户或容器配置默认策略,则可以上传具有自定义策略或没有任何策略的 Blob。

如果修改了针对存储帐户或容器的默认策略,则针对该容器中的对象的策略将保持不变,即使这些策略是从默认策略继承的。

下表显示了用于在上传时针对 Blob 设置基于时间的保留策略的各种选项:

帐户或容器的默认策略状态 上传具有默认策略的 Blob 上传具有自定义策略的 Blob 上传没有任何策略的 Blob
帐户或容器的默认策略(已解锁) 上传具有默认已解锁策略的 Blob 上传具有自定义已解锁策略的 Blob 上传没有任何策略的 Blob
帐户或容器的默认策略(已锁定) 上传具有默认已锁定策略的 Blob 上传具有自定义已解锁策略的 Blob 上传没有任何策略的 Blob
帐户或容器无默认策略 空值 上传具有自定义已解锁策略的 Blob 上传没有任何策略的 Blob

针对先前的版本配置策略

启用版本控制后,对 Blob 执行的写入或删除操作会事先创建该 Blob 的新先前版本并保存该 Blob 的状态。 默认情况下,先前版本拥有基于时间的保留策略(如果存在),当前版本变成先前版本时,该策略即已针对当前版本生效。 新的当前版本继承针对容器的策略(如果存在)。

如果先前版本继承的策略已解锁,则可以缩短或延长保留间隔,或者可以删除该策略。 即使针对当前版本的策略已解锁,也可以锁定针对先前版本的策略。

如果先前版本继承的策略已锁定,则可以延长保留间隔。 无法删除该策略或缩短保留间隔。 如果未针对当前版本配置策略,则先前版本不会继承任何策略。

可为版本配置自定义策略。 如果修改针对当前版本的策略,则针对现有先前版本的策略将保持不变,即使该策略是从当前版本继承的。

删除

为不可变策略启用某个帐户或容器后,无法删除该帐户或容器,直到其为空。 重点需要注意的是,是否在版本级 WORM 帐户或容器中设置了不可变策略并不重要,重要的是,是否为策略启用了该帐户或容器。 启用后,该帐户或容器必须为空才能将其删除。

显示删除具有版本级不可变性策略的帐户的操作顺序的示意图。

方案

场景 禁止的操作 Blob 保护 容器保护 帐户保护
Blob 版本受有效保留策略的保护,并且/或者某个法定保留会生效 删除 Blob设置 Blob 元数据放置页面 无法删除 Blob 版本。 无法写入用户元数据。
使用放置 Blob放置块列表复制 Blob 覆盖 Blob 会创建一个新版本 1
如果容器中至少存在一个 Blob,无论策略是已锁定还是已解锁,容器删除操作都将失败。 如果至少为一个容器或者为帐户启用了版本级不可变性存储,则存储帐户删除操作将会失败。
Blob 版本受已过期保留策略的保护,并且不会有任何法定保留生效 设置 Blob 元数据和放置页面 Blob 版本受已过期保留策略的保护,并且不会有任何法定保留生效 可以删除 Blob 版本。
使用放置 Blob放置块列表复制 Blob 覆盖 Blob 会创建一个新版本 1
如果至少有一个包含 Blob 版本的容器具有已锁定的基于时间的保留策略,则存储帐户删除操作将会失败。
已解锁的策略不提供删除保护。

1 Blob 版本的内容始终不可变。 如果为存储帐户启用了版本控制,则对块 Blob 执行写入操作会创建一个新版本,但放置块操作除外。

限制

在一个帐户中,只能为 10,000 个容器设置基于时间的独特保留策略;但是,你可以设置将由 10,000 个以上的容器继承的帐户级策略。

后续步骤