能否用Azure Policy限制存储账户JSON文件创建/上传?如何获取Blob名称?
实现Azure Policy限制JSON文件上传的方案
要创建拒绝上传/创建JSON文件的Azure Policy,核心是在规则中匹配Blob的文件名后缀,以下是具体实现方法:
核心逻辑说明
Azure Policy针对Blob资源时,可通过field('name')直接获取Blob的完整名称(包含容器内的路径)。结合endsWith函数即可判断文件名是否以.json(含大写.JSON)结尾,再匹配Blob的写操作来触发拒绝规则。
完整Policy定义
{ "properties": { "displayName": "拒绝创建/上传JSON格式的Blob文件", "description": "限制所有用户向存储账户上传或创建以.json/.JSON结尾的Blob文件", "mode": "All", "policyRule": { "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Storage/storageAccounts/blobServices/containers/blobs" }, { "field": "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/creationType", "equals": "Blob" }, { "value": "[endsWith(toLower(field('name')), '.json')]", "equals": true } ] }, "then": { "effect": "Deny", "details": { "message": "禁止上传或创建JSON格式的文件,请使用其他格式。" } } }, "metadata": { "category": "Storage" } } }
关键部分解释
field('name'):获取Blob的完整名称(例如mycontainer/test.json),通过toLower转换为小写后,用endsWith判断是否以.json结尾,覆盖大小写后缀的情况type匹配:确保规则仅作用于Blob资源creationType匹配:明确针对Blob类型(排除容器等其他存储资源)effect设置为Deny:触发匹配条件时直接拒绝操作
部署方式
- 门户部署:进入Azure门户的「策略」服务,创建自定义策略,将上述JSON粘贴到定义中,设置作用范围(订阅/资源组)后分配
- CLI部署:使用以下命令创建策略定义(替换占位符)
az policy definition create --name "DenyJsonBlobs" --display-name "拒绝创建/上传JSON格式的Blob文件" --description "限制JSON文件上传" --rules @policy.json --mode All
注意事项
- 若需排除特定存储账户或容器,可在
if块中添加not条件,例如排除名为allowed-container的容器:{ "field": "Microsoft.Storage/storageAccounts/blobServices/containers/name", "notEquals": "allowed-container" } - 该规则会覆盖所有Blob写操作(包括上传、覆盖、重命名后符合后缀的情况)
内容的提问来源于stack exchange,提问作者Shahid Haider
相关产品推荐
相关产品推荐

