Azure Blob 存储的不可变存储使用户能够以 WORM(一次写入,多次读取)状态存储业务关键的数据。 在 WORM 状态下,在用户指定的间隔内无法修改或删除数据。 为 Blob 数据配置不可变性策略可以防范数据被覆盖和删除。 不可变性策略包括基于时间的保留策略和法定保留。 有关 Blob 存储的不可变性策略的详细信息,请参阅使用不可变存储来存储业务关键型 Blob 数据。
不可变性策略的范围可以限定为单个 Blob 版本或容器。 本文介绍如何配置容器级不可变性策略。 若要了解如何配置版本级不可变性策略,请参阅 配置 Blob 版本的不可变性策略。
注释
启用了网络文件系统 (NFS) 3.0 协议或 SSH 文件传输协议 (SFTP) 的帐户不支持不可变性策略。
若要在容器上配置基于时间的保留策略,请使用 Azure 门户、PowerShell 或 Azure CLI。 可以为 1 到 146,000 天配置容器级保留策略。
若要使用 Azure 门户在容器上配置基于时间的保留策略,请执行以下步骤:
导航到所需的容器。
选择右侧的“ 更多 ”按钮,然后选择 “访问策略”。
在 “不可变 Blob 存储 ”部分中,选择“ 添加策略”。
在 “策略类型 ”字段中,选择 基于时间的保留期,并指定保留期(以天为单位)。
若要创建具有容器范围的策略,请不要选中 “启用版本级不可变性”框。
选择是否允许受保护的追加写入。
“追加 Blob”选项使工作负荷能够使用追加块操作将新的数据块添加到追加 Blob 的末尾。
“块 Blob”和“追加 Blob”选项提供与“追加 Blob”选项相同的权限,但增加了向块 Blob 写入新块的功能。 Blob 存储 API 不提供应用程序直接执行此作的方法。 但是,应用程序可以使用 Data Lake Storage API 中提供的追加和刷新方法来实现此目的。 此外,某些 Microsoft 应用程序使用内部 API 创建块 blob,然后向其添加数据。 如果工作负荷依赖于这些工具中的任何一种,则可以使用此属性来避免在这些工具尝试将块追加到块 Blob 时出现的错误。
若要详细了解这些选项,请参阅允许受保护的追加 Blob 写入。
配置不可变性策略后,会看到它的范围限定为容器:
若要使用 PowerShell 在容器上配置基于时间的保留策略,请调用 Set-AzRmStorageContainerImmutabilityPolicy 命令,以天为单位提供保留间隔。 请务必将尖括号中的占位符值替换为你自己的值:
Set-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName <resource-group> `
-StorageAccountName <storage-account> `
-ContainerName <container> `
-ImmutabilityPeriod 10
若要允许受保护的追加写入,请将 -AllowProtectedAppendWrite
或 -AllowProtectedAppendWriteAll
参数设置为 true
。
AllowProtectedAppendWrite 选项使您的工作负载能够使用追加块操作将新的数据块添加到追加 Blob 的末尾。
AllowProtectedAppendWriteAll 选项提供与 AllowProtectedAppendWrite 选项相同的权限,但增加了将新块写入块 blob 的功能。 Blob 存储 API 不提供应用程序直接执行此作的方法。 但是,应用程序可以使用 Data Lake Storage API 中提供的追加和刷新方法来实现此目的。 此外,某些 Microsoft 应用程序使用内部 API 创建块状 blob,然后将数据附加到这些 blob。 如果工作负荷依赖于这些工具中的任何一种,则可以使用此属性来避免在这些工具尝试将块追加到块 Blob 时出现的错误。
若要详细了解这些选项,请参阅允许受保护的追加 Blob 写入。
若要使用 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 10
若要允许受保护的追加写入,请将 --allow-protected-append-writes
或 --allow-protected-append-writes-all
参数设置为 true
。
使用 --allow-protected-append-writes 选项可使工作负载通过追加块操作将新的数据块添加到追加 Blob 的末尾。
--allow-protected-append-writes-all 选项提供与 --allow-protected-append-writes 选项相同的权限,并增加了向块 Blob 写入新块的功能。 Blob 存储 API 不提供应用程序直接执行此作的方法。 但是,应用程序可以使用 Data Lake Storage API 中提供的追加和刷新方法来实现此目的。 此外,某些 Microsoft 应用程序使用内部 API 创建块状 Blob,然后将数据追加到这些 Blob 中。 如果工作负荷依赖于这些工具中的任何一种,则可以使用此属性来避免在这些工具尝试将块追加到块 Blob 时出现的错误。
若要详细了解这些选项,请参阅允许受保护的追加 Blob 写入。
修改未锁定的保留策略
可以修改未锁定的基于时间的保留策略以缩短或延长保留时间间隔,并允许附加写入用于在容器中追加 Blob。 还可以删除已解锁的策略。
若要在 Azure 门户中修改已解锁的基于时间的保留策略,请执行以下步骤:
导航到所需的容器。
选择“ 更多 ”按钮,然后选择 “访问策略”。
在“不可变 Blob 版本”部分下,找到现有的已解锁策略。 选择“ 更多 ”按钮,然后从菜单中选择 “编辑 ”。
为策略提供新的保留间隔。 还可以选择 “允许其他受保护的追加 ”,以允许写入受保护的追加 blob。
若要删除解锁的策略,请选择“ 更多 ”按钮,然后选择 “删除”。
若要修改解锁的策略,请先通过调用 Get-AzRmStorageContainerImmutabilityPolicy 命令来检索策略。 接下来,调用 Set-AzRmStorageContainerImmutabilityPolicy 命令来更新策略。 包括新的保留间隔(以天为单位)和 -ExtendPolicy
参数。 请务必将尖括号中的占位符值替换为你自己的值:
$policy = Get-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName <resource-group> `
-AccountName <storage-account> `
-ContainerName <container>
Set-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName <resource-group> `
-StorageAccountName <storage-account> `
-ContainerName <container> `
-ImmutabilityPeriod 21 `
-AllowProtectedAppendWriteAll true `
-Etag $policy.Etag `
-ExtendPolicy
若要删除解锁的策略,请调用 Remove-AzRmStorageContainerImmutabilityPolicy 命令。
Remove-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName <resource-group> `
-AccountName <storage-account> `
-ContainerName <container>
-Etag $policy.Etag
若要使用 Azure CLI 修改基于时间的锁定保留策略,请调用 az storage container immutability-policy extend 命令,以天为单位提供新的保留间隔。 请务必将尖括号中的占位符值替换为你自己的值:
etag=$(az storage container immutability-policy show \
--account-name <storage-account> \
--container-name <container> \
--query etag \
--output tsv)
az storage container immutability-policy extend \
--resource-group <resource-group> \
--account-name <storage-account> \
--container-name <container> \
--period 21 \
--if-match $etag \
--allow-protected-append-writes-all true
若要删除解锁的策略,请调用 az storage container immutability-policy delete 命令。
锁定基于时间的保留策略
测试完基于时间的保留策略后,可以锁定该策略。 已锁定的策略符合 SEC 17a-4(f) 和其他法规标准。 最多可将已锁定策略的保留间隔延长五倍,但不能缩短保留间隔。
锁定策略后,无法删除该策略。 但是,可以在保留间隔过期后删除 blob。
请按照以下步骤,在 Azure 门户中锁定一个策略:
- 导航到具有解锁策略的容器。
- 在“不可变 Blob 版本”部分下,找到现有的已解锁策略。 选择“ 更多 ”按钮,然后从菜单中选择 “锁定策略 ”。
- 确认要锁定该策略。
若要使用 PowerShell 锁定策略,请先调用 Get-AzRmStorageContainerImmutabilityPolicy 命令以检索策略的 ETag。 接下来,调用 Lock-AzRmStorageContainerImmutabilityPolicy 命令,并传入 ETag 值以锁定策略。 请务必将尖括号中的占位符值替换为你自己的值:
$policy = Get-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName <resource-group> `
-AccountName <storage-account> `
-ContainerName <container>
Lock-AzRmStorageContainerImmutabilityPolicy -ResourceGroupName <resource-group> `
-AccountName <storage-account> `
-ContainerName <container> `
-Etag $policy.Etag
若要使用 Azure CLI 锁定策略,请先调用 az storage container immutability-policy show 命令以检索策略的 ETag。 接下来,调用 az storage container immutability-policy lock 命令,并传入 ETag 值以锁定策略。 请务必将尖括号中的占位符值替换为你自己的值:
etag=$(az storage container immutability-policy show \
--account-name <storage-account> \
--container-name <container> \
--query etag \
--output tsv)
az storage container immutability-policy lock \
--resource-group <resource-group> \
--account-name <storage-account> \
--container-name <container> \
--if-match $etag
在显式清除法定保留之前,该法定保留会一直存储不可变数据。 若要详细了解法定保留策略,请参阅不可变 Blob 数据的法定保留。
若要通过 Azure 门户在容器上实施法律限制,请执行以下步骤:
导航到所需的容器。
选择“ 更多 ”按钮,然后选择 “访问策略”。
在“不可变 Blob 版本”部分下,选择“添加策略” 。
选择 “法定保留 ”作为策略类型。
添加一个或多个法定保留标记。
选择是否允许受保护的追加写入,然后选择“ 保存”。
“追加 Blob”选项使工作负荷能够使用追加块操作将新的数据块添加到追加 Blob 的末尾。
此设置还增加了将新块写入块 blob 的功能。 Blob 存储 API 不提供应用程序直接执行此作的方法。 但是,应用程序可以使用 Data Lake Storage API 中提供的追加和刷新方法来实现此目的。 另外,此属性使 Microsoft 应用程序(如 Azure 数据工厂)能够使用内部 API 来追加数据块。 如果工作负荷依赖于这些工具中的任何一种,则可以使用此属性来避免在这些工具尝试将数据追加到 Blob 时可能出现的错误。
若要详细了解这些选项,请参阅允许受保护的追加 Blob 写入。
配置不可变性策略后,会看到它的范围限定为容器:
下图显示了同时配置了基于时间的保留策略和法律保留的容器镜像。
若要清除法定保留,请导航到 “访问策略 ”对话框,然后在策略的上下文菜单中,选择“ 编辑”。 然后,删除策略的所有标签以解除保留状态。
若要使用 PowerShell 在容器上配置法定保留,请调用 Add-AzRmStorageContainerLegalHold 命令。 请务必将尖括号中的占位符值替换为你自己的值:
Add-AzRmStorageContainerLegalHold -ResourceGroupName <resource-group> `
-StorageAccountName <storage-account> `
-Name <container> `
-Tag <tag1>,<tag2>,...`
-AllowProtectedAppendWriteAll true
若要清除法定保留,请调用 Remove-AzRmStorageContainerLegalHold 命令:
Remove-AzRmStorageContainerLegalHold -ResourceGroupName <resource-group> `
-StorageAccountName <storage-account> `
-Name <container> `
-Tag <tag1>,<tag2>,...
若要使用 PowerShell 在容器上配置法定保留,请调用 az storage container legal-hold set 命令。 请务必将尖括号中的占位符值替换为你自己的值:
az storage container legal-hold set \
--tags tag1 tag2 \
--container-name <container> \
--account-name <storage-account> \
--resource-group <resource-group> \
--allow-protected-append-writes-all true
若要清除法定保留,请调用 az storage container legal-hold clear 命令:
az storage container legal-hold clear \
--tags tag1 tag2 \
--container-name <container> \
--account-name <storage-account> \
--resource-group <resource-group> \
后续步骤