이 문서의 내용
Azure Blob 存储的不可变存储可让用户以 WORM(一次写入,多次读取)状态存储业务关键型数据。 在 WORM 状态下,在用户指定的间隔内无法修改或删除数据。 为 Blob 数据配置不可变性策略可以防范数据被覆盖和删除。 不可变性策略包括基于时间的保留策略和法定保留。 有关 Blob 存储的不可变性策略的详细信息,请参阅使用不可变存储来存储业务关键型 Blob 数据 。
不可变性策略的范围可以限定为单个 Blob 版本或容器。 本文介绍如何配置版本级不可变性策略。 若要了解如何配置容器级不可变性策略,请参阅为容器配置不可变性策略 。
注意
启用了网络文件系统 (NFS) 3.0 协议或 SSH 文件传输协议 (SFTP) 的帐户不支持不可变性策略。
配置版本级不可变性策略的过程包括两个步骤:
首先,对新存储帐户或新容器或现有容器启用版本级不可变性支持。 有关详细信息,请参阅启用对版本级不变性的支持 。
接下来,配置应用于该容器中一个或多个 Blob 版本的基于时间的保留策略或法定保留。
先决条件
若要配置版本级基于时间的保留策略,必须为存储帐户启用 Blob 版本控制。 请记住,启用 blob 版本控制可能会影响计费。 若要了解如何启用 blob 版本控制,请参阅启用和管理 blob 版本控制 。
有关版本级不可变策略支持的存储帐户配置的信息,请参阅不可变 blob 数据的版本级 WORM 策略 。
启用版本级不可变性支持
在将基于时间的保留策略应用于 Blob 版本之前,必须启用版本级不可变性支持。 你可以对新存储帐户或新容器或现有容器启用版本级不可变性支持。
对存储帐户启用版本级不可变支持
只有在创建新存储帐户时才能启用对版本级不变性的支持。
若要在 Azure 门户中创建存储帐户时启用对版本级不变性的支持,请执行以下步骤:
在 Azure 门户中,导航到“存储帐户”页。
选择“创建”按钮以创建一个新帐户。
填写“基本信息”选项卡。
在“数据保护”选项卡上的“访问控制”下,选择“启用版本级别不可变支持”。 选中此框时,也会自动选中“为 blob 启用版本控制”。
选择“查看 + 创建”以验证你的帐户参数并创建存储帐户。
创建存储帐户后,你可以为该帐户配置默认的版本级别策略。 有关详细信息,请参阅配置基于时间的默认保留策略 。
若要在使用 Azure CLI 创建存储帐户时启用对版本级不变性的支持,请使用指定的参数调用 az storage account create 命令。 可以选择同时为存储帐户指定默认策略,如以下示例所示。 请记得将尖括号中的占位符替换为你自己的值:
az storage account create \
--name <storage-account> \
--resource-group <resource-group> \
--enable-alw \
--immutability-period-in-days 90 \
--immutability-state unlocked \
--allow-protected-append-writes true
如果为存储帐户启用了版本级不可变支持,且帐户包含一个或多个容器,则必须在删除存储帐户之前删除所有容器,即使帐户或容器没有生效的不可变策略。
注意
在存储帐户上启用版本级别后,不可变性便不可禁用,不过可删除已解锁的策略。
对容器启用版本级不可变支持
新容器和现有容器都可配置为支持版本级不可变性。 但是,现有容器必须经历迁移过程才能为其启用此项支持。
请记住,为某个容器启用版本级不可变性支持并不会使该容器中的数据不可变。 此外,必须为容器配置默认的不可变性策略,或者对特定的 Blob 版本配置不可变性策略。 如果在创建存储帐户时为存储帐户启用了版本级别的不变性,则还可以为该帐户配置默认的不变性策略。
为新容器启用版本级不可变性
若要使用版本级不可变性策略,首先必须显式对容器启用版本级 WORM 支持。 可以在创建容器时或者在向现有容器添加版本级不可变性策略时启用版本级 WORM 支持。
若要在 Azure 门户中创建支持版本级不可变性的容器,请执行以下步骤:
在 Azure 门户中导航到你的存储帐户的“容器”页,然后选择“添加” 。
在“新建容器”对话框中提供容器的名称,然后展开“高级”部分 。
选择“启用版本级不可变性支持”以便为容器启用版本级不可变性。
要使用 PowerShell 创建支持版本级不可变性的容器,请先安装 Az.Storage 模块 预览版 3.12.0 或更高版本。
接下来,使用 -EnableImmutableStorageWithVersioning
参数调用 New-AzRmStorageContainer 命令,如以下示例所示。 请记得将尖括号中的占位符替换为你自己的值:
# Create a container with version-level immutability support.
$container = New-AzRmStorageContainer -ResourceGroupName <resource-group> `
-StorageAccountName <storage-account> `
-Name <container> `
-EnableImmutableStorageWithVersioning
# Verify that version-level immutability support is enabled for the container
$container.ImmutableStorageWithVersioning
若要使用 Azure CLI 创建支持版本级不可变性的容器,请先安装 Azure CLI 2.27 或更高版本。 有关安装 Azure CLI 的详细信息,请参阅如何安装 Azure CLI 。
接下来,调用 az storage container-rm create 命令,指定 --enable-vlw
参数。 请记得将尖括号中的占位符替换为你自己的值:
# Create a container with version-level immutability support.
az storage container-rm create \
--name <container> \
--storage-account <storage-account> \
--resource-group <resource-group> \
--enable-vlw
# Verify that version-level immutability support is enabled for the container
az storage container-rm show \
--storage-account <storage-account> \
--name <container> \
--query '[immutableStorageWithVersioning.enabled]' \
--output tsv
如果为容器启用了版本级不可变支持,且容器包含一个或多个 Blob,则必须先删除容器中的所有 Blob,然后才能删除容器,即使容器及其 Blob 没有生效的不可变策略。
迁移现有容器以支持版本级不可变性
若要为现有容器配置版本级不可变性策略,必须迁移该容器以支持版本级不可变存储。 容器迁移可能需要一段时间,此操作不可逆。 每个存储帐户一次可迁移 10 个容器。
若要迁移现有容器以支持版本级不可变性策略,容器必须配置容器级基于时间的保留策略。 除非容器具有现有策略,否则迁移将失败。 容器级策略的保留期间隔与容器上默认版本级策略的保留期间隔保持一致。
如果容器具有现有的容器级法定保留,则只有在删除法定保留之后才能迁移该容器。
若要在 Azure 门户中迁移容器以支持版本级不可变性策略,请执行以下步骤:
导航到所需的容器。
在容器的上下文菜单中,选择“访问策略”。
在“不可变 Blob 存储”下,选择“添加策略” 。
对于“策略类型”字段,请选择“基于时间的保留”并指定保留间隔。
选择“启用版本级不可变性”。
选择“确定”以创建具有指定保留期间隔的容器级策略,然后开始迁移到版本级不可变性支持。
执行迁移操作时,容器上的策略范围显示为容器。 在容器迁移过程中,不允许任何与管理版本级别不可变性策略相关的操作。 在迁移期间,对 blob 数据的其他操作将正常进行。
迁移完成后,容器上的策略范围显示为版本。 显示的策略是容器上的默认策略,该策略自动应用于随后在容器中创建的所有 blob 版本。 通过为该版本指定自定义策略,可以在任何版本上替代默认策略。
要使用 PowerShell 迁移容器以支持版本级不可变存储,首先要确保该容器存在容器级基于时间的保留策略。 若要创建一个策略,请调用 Set-AzRmStorageContainerImmutabilityPolicy 。
Set-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName <resource-group> `
-StorageAccountName <storage-account> `
-ContainerName <container> `
-ImmutabilityPeriod <retention-interval-in-days>
接下来,调用 Invoke-AzRmStorageContainerImmutableStorageWithVersioningMigration 命令以迁移容器。 添加 -AsJob
参数以异步运行该命令。 建议异步运行该操作,因为迁移可能需要一些时间才能完成。
$migrationOperation = Invoke-AzRmStorageContainerImmutableStorageWithVersioningMigration `
-ResourceGroupName <resource-group> `
-StorageAccountName <storage-account> `
-Name <container> `
-AsJob
若要检查长时间运行的操作的状态,请阅读该操作的 JobStateInfo.State 属性。
$migrationOperation.JobStateInfo.State
在尝试迁移到版本级不可变性时,如果容器尚无基于时间的保留策略,则操作将失败。 如果由于不存在容器级策略而导致操作失败,以下示例将检查 JobStateInfo.State 属性的值并显示错误消息。
if ($migrationOperation.JobStateInfo.State -eq "Failed") {
Write-Host $migrationOperation.Error
}
The container <container-name> must have an immutability policy set as a default policy
before initiating container migration to support object level immutability with versioning.
迁移完成后,检查操作的 Output 属性,看看是否启用了版本级不可变性支持。
$migrationOperation.Output
有关 PowerShell 作业的详细信息,请参阅在 PowerShell 作业中运行 Azure PowerShell cmdlet 。
要使用 Azure CLI 迁移容器以支持版本级不可变存储,首先要确保该容器存在容器级基于时间的保留策略。 若要创建一个策略,请调用 az storage container immutability-policy create 。
az storage container immutability-policy create \
--resource-group <resource-group> \
--account-name <storage-account> \
--container-name <container> \
--period <retention-interval-in-days>
接下来,调用 az storage container-rm migrate-vlw 命令以迁移容器。 添加 --no-wait
参数以异步运行该命令。 建议异步运行该操作,因为迁移可能需要一些时间才能完成。
az storage container-rm migrate-vlw \
--resource-group <resource-group> \
--storage-account <storage-account> \
--name <container> \
--no-wait
若要检查长时间运行的操作的状态,请读取 migrationState 属性的值。
az storage container-rm show \
--storage-account <storage-account> \
--name <container> \
--query '[immutableStorageWithVersioning.migrationState]' \
--output tsv
为存储帐户或单个容器启用版本级别不变性支持后,可以为帐户或容器指定默认版本级别的基于时间的保留策略。 为帐户或容器指定默认策略后,该策略默认应用于在帐户或容器中创建的所有新 Blob 版本。 可以替代帐户或容器中任何单个 blob 版本的默认策略。
默认策略不会自动应用于配置默认策略之前存在的 blob 版本。
如果迁移了现有容器以支持版本级不变性,则迁移前生效的容器级策略会迁移到容器的默认版本级策略。
若要为存储帐户或容器配置默认的版本级不可变性策略,请使用 Azure 门户、PowerShell、Azure CLI 或任一 Azure 存储 SDK。 确保已为存储帐户或容器启用版本级不可变性支持,如启用版本级不可变性支持 中所述。
若要为 Azure 门户中的存储帐户配置默认的版本级不可变性策略,请执行以下步骤:
在 Azure 门户中导航到存储帐户。
在“数据管理”下,选择“数据保护”。
在“数据保护”页面上,找到“访问控制”部分。 如果创建存储帐户时支持版本级不变性,则“访问控制”部分中将会出现“管理策略”按钮。
选择“管理策略”按钮以显示“管理版本级不变性策略”对话框。
为存储帐户添加默认的基于时间保留策略。
若要为 Azure 门户中的容器配置默认的版本级不可变性策略,请执行以下步骤:
在 Azure 门户中导航到“容器”页,找到要对其应用该策略的容器。
在容器的上下文菜单中,选择“访问策略”。
在“访问策略”对话框中的“不可变 Blob 存储”部分下,选择“添加策略” 。
选择“基于时间的保留策略”并指定保留间隔。
选择是否允许受保护的追加写入。
“追加 Blob”选项使工作负荷能够使用追加块 操作将新的数据块添加到追加 Blob 的末尾。
若要详细了解这些选项,请参阅允许受保护的追加 Blob 写入 。
若要使用 PowerShell 为容器配置默认的版本级不可变性策略,请调用 Set-AzRmStorageContainerImmutabilityPolicy 命令。
Set-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName <resource-group> `
-StorageAccountName <storage-account> `
-ContainerName <container> `
-ImmutabilityPeriod <retention-interval-in-days> `
-AllowProtectedAppendWrite $true
若要使用 Azure CLI 为容器配置默认的版本级不可变性策略,请调用 az storage container immutability-policy create 命令。
az storage container immutability-policy create \
--account-name <storage-account> \
--container-name <container> \
--period <retention-interval-in-days> \
--allow-protected-append-writes true
确定针对容器的保留策略的范围
若要在 Azure 门户中确定基于时间的保留策略的范围,请执行以下步骤:
导航到所需的容器。
在容器的上下文菜单中,选择“访问策略”。
在“不可变 Blob 存储”下,找到“范围”字段 。 如果为容器配置了默认的版本级保留策略,则范围将设置为“版本”,如下图所示:
如果为容器配置了容器级保留策略,则范围将设置为“容器”,如下图所示:
基于时间的保留策略在指定的间隔内将 Blob 数据保持为 WORM 状态。 有关基于时间的保留策略的详细信息,请参阅不可变 Blob 数据的基于时间的保留策略 。
可使用三个选项为 Blob 版本配置基于时间的保留策略:
选项 1:你可以在存储帐户或容器上配置适用于帐户或容器中所有对象的默认策略。 帐户或容器中的对象将继承默认策略,除非你通过在单个 blob 版本上配置策略来显式覆盖默认策略。 有关详细信息,请参阅配置基于时间的默认保留策略 。
选项 2:可以针对 Blob 的当前版本配置策略。 如果默认策略存在且已解锁,则此策略可以覆盖在存储帐户或容器上配置的默认策略。 默认情况下,在配置策略后创建的所有先前版本将继承针对当前 Blob 版本的策略。 有关详细信息,请参阅针对当前 Blob 版本配置保留策略 。
选项 3:可以针对先前的 Blob 版本配置策略。 此策略可以替代针对当前版本配置的默认策略(如果默认策略存在且已解锁)。 有关详细信息,请参阅针对先前的 Blob 版本配置保留策略 。
有关 Blob 版本控制的详细信息,请参阅 Blob 版本控制 。
导航到某个容器时,Azure 门户会显示 Blob 列表。 显示的每个 Blob 表示当前 Blob 版本。 通过打开 blob 的上下文菜单并选择“查看以前的版本”,可访问以前版本的列表。
若要针对当前 Blob 版本配置基于时间的保留策略,请执行以下步骤:
导航到包含目标 Blob 的容器。
在 blob 的上下文菜单中,选择“访问策略”。 如果已为先前版本配置了基于时间的保留策略,该策略会出现在“访问策略”对话框中。
在“访问策略”对话框中的“不可变 Blob 版本”部分下,选择“添加策略” 。
选择“基于时间的保留策略”并指定保留间隔。
选择“确定”以将策略应用于当前 Blob 版本。
可以查看 Blob 的属性,以确定是否对当前版本启用了某个策略。 选择该 Blob,然后导航到“概述”选项卡并找到“版本级不可变性策略”属性 。 如果启用了某个策略,“保留期”属性将显示该策略的过期日期和时间。 请记住,可为当前版本配置策略,也可以从 Blob 的父容器继承策略(如果默认策略已生效)。
还可以针对先前的 blob 版本配置基于时间的保留策略。 先前的版本始终是不可变的,因为无法修改它。 不过,可以删除先前的版本。 基于时间的保留策略在生效的情况下可以防止被删除。
若要针对先前的 Blob 版本配置基于时间的保留策略,请执行以下步骤:
导航到包含目标 Blob 的容器。
选择该 Blob,然后导航到“版本”选项卡。
找到目标版本,然后在版本的上下文菜单中选择“访问策略”。 如果已为先前版本配置了基于时间的保留策略,该策略会出现在“访问策略”对话框中。
在“访问策略”对话框中的“不可变 Blob 版本”部分下,选择“添加策略” 。
选择“基于时间的保留策略”并指定保留间隔。
选择“确定”以将策略应用于当前 Blob 版本。
若要使用 PowerShell 在 blob 版本上配置基于时间的保留策略,请调用 Set-AzStorageBlobImmutabilityPolicy 命令。
以下示例演示如何在 blob 的当前版本上配置解锁的策略。 请记得将尖括号中的占位符替换为你自己的值:
# Get the storage account context
$ctx = (Get-AzStorageAccount `
-ResourceGroupName <resource-group> `
-Name <storage-account>).Context
Set-AzStorageBlobImmutabilityPolicy -Container <container> `
-Blob <blob-version> `
-Context $ctx `
-ExpiresOn "2021-09-01T12:00:00Z" `
-PolicyMode Unlocked
若要使用 Azure CLI 在 blob 版本上配置基于时间的保留策略,请首先安装 Azure CLI 版本 2.29.0 或更高版本。
接下来,请调用 az storage blob immutability-policy set 命令来配置基于时间的保留策略。 以下示例演示如何在 blob 的当前版本上配置解锁的策略。 请记得将尖括号中的占位符替换为你自己的值:
az storage blob immutability-policy set \
--expiry-time 2021-09-20T08:00:00Z \
--policy-mode Unlocked \
--container <container> \
--name <blob-version> \
--account-name <storage-account> \
--auth-mode login
使用 Azure 门户将 Blob 上传到支持版本级不可变性的容器时,可通过多个选项为新 Blob 配置基于时间的保留策略:
选项 1:如果为容器配置了默认保留策略,则可以上传具有容器策略的 Blob。 如果存在针对容器的保留策略,则默认会选择此选项。
选项 2:如果为容器配置了默认保留策略,则可以选择替代默认策略,方法是为新 Blob 定义自定义保留策略,或上传没有策略的 Blob。
选项 3:如果未为容器配置默认策略,则可以上传具有自定义策略或没有任何策略的 Blob。
若要在上传 Blob 时配置基于时间的保留策略,请执行以下步骤:
导航到所需的容器,选择“上传”。
在“上传 Blob”对话框中,展开“高级”部分 。
在“保留策略”字段中,为新 Blob 配置基于时间的保留策略。 如果为容器配置了默认策略,则默认会选择该策略。 还可为 Blob 指定自定义策略。
修改或删除未锁定的保留策略
可以修改已解锁的基于时间的保留策略以缩短或延长保留间隔。 还可以删除已解锁的策略。 编辑或删除针对某个 Blob 版本的基于时间的已解锁保留策略不影响针对任何其他版本生效的策略。 如果存在针对容器生效的基于时间的默认保留策略,则使用已修改或已删除策略的 Blob 版本将不再从容器继承。
若要在 Azure 门户中修改已解锁的基于时间的保留策略,请执行以下步骤:
查找目标容器或版本。 在容器或版本的上下文菜单中,选择“访问策略”。
查找现有的未锁定不可变性策略。 在上下文菜单中,从菜单中选择“编辑”。
提供新的策略过期日期和时间。
若要删除未锁定的策略,请从上下文菜单中选择“删除”。
若要使用 PowerShell 修改未锁定的基于时间的保留策略,请使用策略到期的新日期和时间对 blob 版本调用 Set-AzStorageBlobImmutabilityPolicy 命令。 请记得将尖括号中的占位符替换为你自己的值:
$containerName = "<container>"
$blobName = "<blob>"
# Get the previous blob version.
$blobVersion = Get-AzStorageBlob -Container $containerName `
-Blob $blobName `
-VersionId "2021-08-31T00:26:41.2273852Z" `
-Context $ctx
# Extend the retention interval by five days.
$blobVersion = $blobVersion |
Set-AzStorageBlobImmutabilityPolicy -ExpiresOn (Get-Date).AddDays(5) `
# View the new policy parameters.
$blobVersion.BlobProperties.ImmutabilityPolicy
若要删除未锁定的保留策略,请调用 Remove-AzStorageBlobImmutabilityPolicy 命令。
$blobVersion = $blobVersion | Remove-AzStorageBlobImmutabilityPolicy
若要使用 PowerShell 修改已解锁的基于时间的保留策略,请使用新的策略到期日期和时间对该 blob 版本调用 az storage blob immutability-policy set 命令。 请记得将尖括号中的占位符替换为你自己的值:
az storage blob immutability-policy set \
--expiry-time 2021-10-0T18:00:00Z \
--policy-mode Unlocked \
--container <container> \
--name <blob-version> \
--account-name <storage-account> \
--auth-mode login
若要删除已解锁的保留策略,请调用 az storage blob immutability-policy delete 命令。
az storage blob immutability-policy delete \
--container <container> \
--name <blob-version> \
--account-name <storage-account> \
--auth-mode login
锁定基于时间的保留策略
测试完基于时间的保留策略后,可以锁定该策略。 已锁定的策略符合 SEC 17a-4(f) 和其他法规标准。 最多可将已锁定策略的保留间隔延长五倍,但不能缩短保留间隔。
锁定策略后,无法删除该策略。 但是,可以在保留间隔过期后删除 blob。
若要在 Azure 门户中锁定策略,请执行以下步骤:
查找目标容器或版本。 在容器或版本的上下文菜单中,选择“访问策略”。
在“不可变 Blob 版本”部分下,找到现有的已解锁策略。 从上下文菜单中选择“锁定策略”。
确认要锁定该策略。
若要使用 PowerShell 锁定策略,请调用 Set-AzStorageBlobImmutabilityPolicy 命令并将 PolicyMode 参数设置为“Locked” 。
以下示例显示如何通过指定对未锁定策略有效的相同保留期间隔来锁定策略。 也可在锁定策略时更改到期时间。
# Get the previous blob version.
$blobVersion = Get-AzStorageBlob -Container $containerName `
-Blob $blobName `
-VersionId "2021-08-31T00:26:41.2273852Z" `
-Context $ctx
$blobVersion = $blobVersion |
Set-AzStorageBlobImmutabilityPolicy `
-ExpiresOn $blobVersion.BlobProperties.ImmutabilityPolicy.ExpiresOn `
-PolicyMode Locked
若要使用 PowerShell 来锁定策略,请调用 az storage blob immutability-policy set 命令并将 --policy-mode
参数设置为“Locked”。 也可在锁定策略时更改到期时间。
az storage blob immutability-policy set \
--expiry-time 2021-10-0T18:00:00Z \
--policy-mode Locked \
--container <container> \
--name <blob-version> \
--account-name <storage-account> \
--auth-mode login
在显式清除法定保留之前,该法定保留会一直存储不可变数据。 若要详细了解法定保留策略,请参阅不可变 Blob 数据的法定保留 。
若要为 Blob 版本配置法定保留,必须先对存储帐户或容器启用版本级不可变性支持。 有关详细信息,请参阅启用版本级不可变性支持 。
若要使用 Azure 门户配置 blob 版本上的法定保留,请执行以下步骤:
找到目标版本,这可能是 Blob 的当前版本或先前版本。 在目标版本的上下文菜单中,选择“访问策略”。
在“不可变 Blob 版本”部分下,选择“添加策略” 。
选择“法定保留”作为策略类型,然后选择“确定”以应用法定保留 。
下图显示了一个当前 Blob 版本,为其配置了基于时间的保留策略和法定保留。
若要清除法定保留,请导航到“访问策略”对话,在上下文菜单中选择“删除”。
要使用 PowerShell 配置或清除 blob 版本上的法定保留,请调用 Set-AzStorageBlobLegalHold 命令。
# Set a legal hold
Set-AzStorageBlobLegalHold -Container <container> `
-Blob <blob-version> `
-Context $ctx `
-EnableLegalHold
# Clear a legal hold
Set-AzStorageBlobLegalHold -Container <container> `
-Blob <blob-version> `
-Context $ctx `
-DisableLegalHold
若要使用 Azure CLI 配置或清除 blob 版本上的法定保留,请调用 az storage blob set-legal-hold 命令。
# Set a legal hold
az storage blob set-legal-hold \
--legal-hold \
--container <container> \
--name <blob-version> \
--account-name <account-name> \
--auth-mode login
# Clear a legal hold
az storage blob set-legal-hold \
--legal-hold false \
--container <container> \
--name <blob-version> \
--account-name <account-name> \
--auth-mode login
后续步骤