版本级写入一次,读取多个 (WORM) 策略,以获取不可变 Blob 数据

版本层级的一次写入、多次读取(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,Microsoft建议在创建容器时启用它。 但是,可以将启用了非版本级别 WORM 的容器迁移到启用了版本级别 WORM 的容器。 如果选择不迁移容器,仍然可以在该容器上设置容器级 WORM 策略,但设置 Blob 级策略的选项在该容器上不可用。

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

若要在 Blob 级别设置策略,必须在帐户或容器上启用版本级 WORM。 没有在 Blob 级别启用版本级 WORM 的选项;必须继承版本级 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 的写入或删除操作会创建该 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 个容器继承的帐户级策略。

后续步骤