Azure中加密范围加密的Blob如何归档/转换存储层?
解决加密范围加密的Blob无法转换存储层的问题
核心原因
报错的本质是:用自定义加密范围加密的Blob,在执行存储层变更操作时,必须在请求里明确指定对应的加密范围,否则存储服务没法完成Blob的解密与重新加密流程。
可行解决方法
1. 转换存储层时显式指定加密范围
针对单个Blob操作,在命令或API请求中添加加密范围参数:
- Azure CLI:
az blob set-tier --account-name <你的存储账户名> --container-name <容器名> --name <目标Blob名> --tier Archive --encryption-scope <Blob所属的加密范围名称> - PowerShell:
$storageContext = New-AzStorageContext -StorageAccountName <你的存储账户名> -StorageAccountKey <账户密钥> Set-AzBlobTier -ContainerName <容器名> -Blob <目标Blob名> -Tier Archive -EncryptionScope <Blob所属的加密范围名称> -Context $storageContext - REST API:
在请求头中加入x-ms-encryption-scope: <加密范围名称>,再发送存储层变更请求。
2. 批量处理时自动匹配加密范围
如果要批量转换大量Blob,先获取每个Blob的加密范围信息,再批量执行操作:
- Azure CLI批量处理示例:
# 列出容器内所有Blob及其加密范围,循环执行存储层转换 az blob list --account-name <你的存储账户名> --container-name <容器名> --query "[].{name:name, scope:properties.encryptionScope}" --output tsv | while read blobName scopeName; do az blob set-tier --account-name <你的存储账户名> --container-name <容器名> --name $blobName --tier Archive --encryption-scope $scopeName done
3. 验证操作身份的加密范围权限
确保执行操作的账号(用户/服务主体)拥有对应加密范围的使用权限:
- 权限名称:
Microsoft.Storage/storageAccounts/encryptionScopes/use/action - 可通过Azure门户的存储账户IAM页面,检查该身份是否被分配了包含此权限的角色(比如自定义角色或内置的存储Blob数据所有者/参与者)。
内容的提问来源于stack exchange,提问作者Piyush Jain
相关产品推荐
相关产品推荐

