你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn 。
本文内容
Azure Blob 存储的不可变存储使用户能够以 WORM(一次写入,多次读取)状态存储业务关键的数据。 在 WORM 状态下,在用户指定的间隔内无法修改或删除数据。 为 Blob 数据配置不可变性策略可以防范数据被覆盖和删除。 不可变性策略包括基于时间的保留策略和法定保留。 有关 Blob 存储的不可变性策略的详细信息,请参阅使用不可变存储来存储业务关键型 Blob 数据 。
不可变性策略的范围可以限定为单个 Blob 版本或容器。 本文介绍如何配置容器级不可变性策略。 若要了解如何配置版本级不可变性策略,请参阅为 Blob 版本配置不可变性策略 。
注意
启用了网络文件系统 (NFS) 3.0 协议或 SSH 文件传输协议 (SFTP) 的帐户不支持不可变性策略。
若要在容器上配置基于时间的保留策略,请使用 Azure 门户、PowerShell 或 Azure CLI。 可以将容器级别的保留策略配置为介于 1 到 146000 天之间。
若要使用 Azure 门户在容器上配置基于时间的保留策略,请执行以下步骤:
导航到所需的容器。
选择右侧的“更多”按钮,然后选择“访问策略” 。
在“不可变 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 写入 。
若要使用 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。 还可删除已解锁的策略。
若要在 Azure 门户中修改已解锁的基于时间的保留策略,请执行以下步骤:
导航到所需的容器。
依次选择“更多”按钮和“访问策略” 。
在“不可变 Blob 版本”部分下,找到现有的已解锁策略。 选择“更多”按钮,然后从菜单中选择“编辑” 。
为策略提供新的保留间隔。 还可选择“允许其他受保护的追加”,以允许写入受保护的追加 blob。
若要删除已解锁的策略,请选择“更多”按钮,然后选择“删除” 。
若要修改已解锁的策略,请先通过调用 AzRmStorageContainerImmutabilityPolicy 命令以检索策略。 接下来,调用 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
若要删除已解锁的策略,请调用 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。 接下来,调用 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 配置容器上的法定保留,请调用 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> \
后续步骤