如何通过ARM模板为Azure存储账户容器配置legal hold
ARM模板配置Azure存储容器Legal Hold的实操指南
常见配置踩坑说明
很多开发者初期会尝试通过Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies子资源节点配置Legal Hold,会碰到以下固定问题:
- 该资源节点仅原生支持基于时间的Blob不可变策略配置,不承载Legal Hold的配置能力,纯Legal Hold请求走该路径时,仅携带
immutabilityPeriodSinceCreationInDays参数的请求可被正常受理,无匹配参数的请求会直接报错:- 提示缺失必填属性
immutabilityPeriodSinceCreationInDays或allowProtectedAppendWrites - 若未提前设置
immutabilityPeriodSinceCreationInDays就配置allowProtectedAppendWrites参数,会直接触发配置失败
- 提示缺失必填属性
- 如果部署时省略整个
properties块,会直接返回无明确定位信息的内部服务错误,报错示例如下:
{ "status": "Failed", "error": { "code": "UnexpectedException", "message": "The server was unable to complete your request." } }
对应的问题配置片段示例:
{ "name": "testsa/default/testcontainer/default", "type": "Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies", "apiVersion": "2019-06-01" }
正确配置方式
Legal Hold属于容器级别的原生配置项,不需要依赖immutabilityPolicies子资源挂载,直接在容器本身的资源properties块下配置即可,核心配置规则:
- 资源路径锚定到
Microsoft.Storage/storageAccounts/blobServices/containers层级 - 在properties下新增
legalHold配置块,必填参数为非空的标记列表 - 可选配置项
allowProtectedAppendWritesAll设置为布尔值,开启后允许向受Legal Hold保护的Blob追加块内容,不会破坏Legal Hold的不可变性约束
配置示例
{ "type": "Microsoft.Storage/storageAccounts/blobServices/containers", "apiVersion": "2021-08-01", "name": "[concat(parameters('storageAccountName'), '/default/', parameters('containerName'))]", "properties": { "publicAccess": "None", "legalHold": { "tags": [ "Compliance-Requirement", "Audit-2024" ], "allowProtectedAppendWritesAll": true } } }
配置注意事项
- 若需要同时启用基于时间的Blob保留策略,可以在对应容器资源下单独挂载
immutabilityPolicies子资源,配置对应保留周期参数即可,两类配置互不冲突 - Legal Hold生效的核心判定条件为配置的标记列表非空,不需要强制关联设置保留周期参数
- 所有Legal Hold标记配置会实时生效,不依赖容器创建时的初始配置
内容的提问来源于stack exchange,提问作者Marcin
相关产品推荐
相关产品推荐

