你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Windows VM 上的 Azure 磁盘加密方案

重要

Azure 磁盘加密计划于 2028 年 9 月 15 日停用。 在该日期之前,可以继续使用 Azure 磁盘加密,而不会中断。 2028 年 9 月 15 日,已启用 ADE 的工作负荷将继续运行,但 VM 重启后加密磁盘将无法解锁,从而导致服务中断。

使用 主机加密 来创建新的 VM,或者考虑使用 具有 OS 磁盘加密的机密 VM 规格 来处理机密计算工作负荷。 所有已启用 ADE 的 VM(包括备份)必须在停用日期之前迁移到主机上的加密,以避免服务中断。 有关详细信息,请参阅 从 Azure 磁盘加密迁移到主机加密

适用于:✔️ Windows VM ✔️ 灵活规模集

适用于 Windows 虚拟机 (VM) 的 Azure 磁盘加密使用 Windows 的 BitLocker 功能对 OS 磁盘和数据磁盘进行完整的磁盘加密。 此外,当 VolumeType 参数为 All 时,它还会加密临时磁盘。

Azure 磁盘加密与 Azure 密钥保管库 集成,有助于你控制和管理磁盘加密密钥和机密。 有关该服务的概述,请参阅适用于 Windows VM 的 Azure 磁盘加密

先决条件

只能将磁盘加密应用于 受支持 VM 大小和操作系统的虚拟机。 还必须满足以下先决条件:

限制

如果你之前使用 Azure 磁盘加密 配合 Microsoft Entra ID 加密虚拟机(VM),请继续使用此选项来加密你的虚拟机。 有关详细信息,请参阅结合使用 Azure 磁盘加密和 Microsoft Entra ID(以前的版本)

在加密磁盘之前创建 快照 或创建备份。 备份确保在加密过程中发生任何意外故障时可以使用恢复选项。 加密之前,需要备份包含托管磁盘的 VM。 备份之后,可以通过指定 -skipVmBackup 参数,使用 Set-AzVMDiskEncryptionExtension cmdlet 来加密托管磁盘。 有关如何备份和还原加密型 VM 的详细信息,请参阅备份和还原加密型 Azure VM

加密或禁用加密可能会导致 VM 重新启动。

Azure 磁盘加密不适用于以下方案、功能和技术:

  • 对基本层 VM 或通过经典 VM 创建方法创建的 VM 进行加密。
  • 使用临时磁盘加密 v6 系列 VM(Ddsv6、Dldsv6、Edsv6、Dadsv6、Daldsv6、Eadsv6、Dpdsv6、Dpldsv6、Epdsv6 或 Endsv6)。 有关详细信息,请参阅Azure中虚拟机大小中列出的每个 VM 大小的各个页面。
  • 加密 V7 系列和更新版的 VM 规格。
  • BitLocker 的所有要求和限制,例如需要 NTFS。 有关详细信息,请参阅 BitLocker 概述
  • 加密使用基于软件的 RAID 系统配置的 VM。
  • 加密配置了存储空间直通 (S2D) 的 VM,或配置了 Windows 存储空间的、版本低于 2016 的 Windows Server。
  • 与本地密钥管理系统集成。
  • Azure 文件存储(共享文件系统)。
  • 网络文件系统 (NFS)。
  • 动态卷。
  • Windows Server 容器,为每个容器创建动态卷。
  • 临时 OS 磁盘。
  • iSCSI 磁盘。
  • 加密共享/分布式文件系统,包括但不限于 DFS、GFS、DRDB 和 CephFS。
  • 将加密的 VM 移到其他订阅或区域。
  • 创建加密 VM 的映像或快照,并使用它部署更多 VM。
  • “L”系列存储优化 VM 大小系列。
  • 具有写入加速器磁盘的 M 系列 VM。
  • 将 ADE 应用于磁盘采用主机加密使用客户管理的密钥进行服务器端加密(SSE + CMK)的 VM。 将 SSE + CMK 应用到数据磁盘或者将配置有 SSE + CMK 的数据磁盘添加到使用 ADE 加密的 VM 也是一种不支持的方案。
  • 将使用 ADE 加密或使用 ADE 加密的 VM 迁移到主机加密使用客户管理的密钥进行服务器端加密
  • 加密故障转移群集中的 VM。
  • Azure 超级磁盘的加密。
  • 高级 SSD v2 磁盘的加密。
  • 在启用了Secrets should have the specified maximum validity period策略且效果为拒绝的订阅中的 VM 加密。
  • 在启用了密钥保管库 secrets should have an expiration date策略且效果为拒绝的订阅中的 VM 加密。

安装工具并连接到 Azure

可以通过Azure CLI和Azure PowerShell启用和管理Azure 磁盘加密。 为此,请在本地安装这些工具并连接到Azure订阅。

Azure CLI

Azure CLI 2.0 是用于管理 Azure 资源的命令行工具。 CLI 旨在提高数据查询灵活性、支持非阻塞进程形式的长时间操作,以及简化脚本编写。 可以按照安装 Azure CLI 中的步骤操作,在本地安装它。

若要使用 Azure CLI 登录到 Azure 帐户,请使用 az login 命令。

az login

若要选择要登录的租户,请使用:

az login --tenant <tenant>

若要指定多个订阅之一,请使用 az account list 获取订阅列表,并使用 az account set 指定订阅。

az account list
az account set --subscription "<subscription name or ID>"

有关详细信息,请参阅 开始使用 Azure CLI

Azure PowerShell

Azure PowerShell Az 模块提供了一组 cmdlet,这些 cmdlet 使用Azure 资源管理器模型来管理Azure资源。 可以在浏览器中将它与 Azure Cloud Shell 配合使用,也可以使用安装 Azure PowerShell 模块中的说明在本地计算机上安装它。

如果已在本地安装,请使用最新的Azure PowerShell版本来配置Azure 磁盘加密。 从Azure PowerShell版本下载最新版本。

若要使用 Azure PowerShell 登录到Azure帐户,请使用 Connect-AzAccount cmdlet。

Connect-AzAccount

若要指定多个订阅中的一个,请先使用 Get-AzSubscription cmdlet 列出这些订阅,然后再使用 Set-AzContext cmdlet:

Set-AzContext -Subscription <SubscriptionId>

运行 Get-AzContext cmdlet,验证是否选择了正确的订阅。

若要确认已安装Azure 磁盘加密 cmdlet,请使用 Get-Command cmdlet:

Get-Command *diskencryption*

有关详细信息,请参阅 Azure PowerShell 入门

在现有或正在运行的 Windows VM 上启用加密

在此方案中,可以使用资源管理器模板、PowerShell cmdlet 或 CLI 命令启用加密。 如果需要虚拟机扩展的架构信息,请参阅适用于 Windows 扩展的 Azure 磁盘加密一文。

使用Azure PowerShell在现有或正在运行的 VM 上启用加密

使用 Set-AzVMDiskEncryptionExtension cmdlet 在 Azure 中运行的 IaaS 虚拟机上启用加密。

  • 加密正在运行的 VM: 以下脚本初始化变量并运行 Set-AzVMDiskEncryptionExtension cmdlet。 资源组、VM 和密钥保管库必须已作为先决条件存在。 请将 MyKeyVaultResourceGroup、MyVirtualMachineResourceGroup、MySecureVM 和 MySecureVault 替换为自己的值。

     $KVRGname = 'MyKeyVaultResourceGroup';
     $VMRGName = 'MyVirtualMachineResourceGroup';
     $vmName = 'MySecureVM';
     $KeyVaultName = 'MySecureVault';
     $KeyVault = Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGname;
     $diskEncryptionKeyVaultUrl = $KeyVault.VaultUri;
     $KeyVaultResourceId = $KeyVault.ResourceId;
    
     Set-AzVMDiskEncryptionExtension -ResourceGroupName $VMRGname -VMName $vmName -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId;
    
  • 使用 KEK 加密正在运行的 VM:

    $KVRGname = 'MyKeyVaultResourceGroup';
    $VMRGName = 'MyVirtualMachineResourceGroup';
    $vmName = 'MyExtraSecureVM';
    $KeyVaultName = 'MySecureVault';
    $keyEncryptionKeyName = 'MyKeyEncryptionKey';
    $KeyVault = Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGname;
    $diskEncryptionKeyVaultUrl = $KeyVault.VaultUri;
    $KeyVaultResourceId = $KeyVault.ResourceId;
    $keyEncryptionKeyUrl = (Get-AzKeyVaultKey -VaultName $KeyVaultName -Name $keyEncryptionKeyName).Key.kid;
    
    Set-AzVMDiskEncryptionExtension -ResourceGroupName $VMRGname -VMName $vmName -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId -KeyEncryptionKeyUrl $keyEncryptionKeyUrl -KeyEncryptionKeyVaultId $KeyVaultResourceId;
    
    

    注意

    disk-encryption-keyvault 参数值的语法是完整的标识符字符串:/subscriptions/[subscription-id-guid]/resourceGroups/[resource-group-name]/providers/Microsoft.KeyVault/vaults/[keyvault-name]
    key-encryption-key 参数的值的语法是 KEK 的完整 URI,如:https://[keyvault-name].vault.azure.net/keys/[kekname]/[kek-unique-id]

  • 验证磁盘是否已加密:若要检查 IaaS VM 的加密状态,请使用 Get-AzVmDiskEncryptionStatus cmdlet。

    Get-AzVmDiskEncryptionStatus -ResourceGroupName 'MyVirtualMachineResourceGroup' -VMName 'MySecureVM'
    

若要禁用加密,请参阅禁用加密和删除加密扩展

使用Azure CLI在现有 VM 或正在运行的 VM 上启用加密

使用 az vm encryption enable 命令在 Azure 中运行的 IaaS 虚拟机上启用加密。

  • 加密正在运行的 VM:

    az vm encryption enable --resource-group "MyVirtualMachineResourceGroup" --name "MySecureVM" --disk-encryption-keyvault "MySecureVault" --volume-type [All|OS|Data]
    
  • 使用 KEK 加密正在运行的 VM:

    az vm encryption enable --resource-group "MyVirtualMachineResourceGroup" --name "MySecureVM" --disk-encryption-keyvault  "MySecureVault" --key-encryption-key "MyKEK_URI" --key-encryption-keyvault "MySecureVaultContainingTheKEK" --volume-type [All|OS|Data]
    

    注意

    disk-encryption-keyvault 参数值的语法是完整的标识符字符串:/subscriptions/[subscription-id-guid]/resourceGroups/[resource-group-name]/providers/Microsoft.KeyVault/vaults/[keyvault-name]
    key-encryption-key 参数的值的语法是 KEK 的完整 URI,如:https://[keyvault-name].vault.azure.net/keys/[kekname]/[kek-unique-id]

  • 验证磁盘是否已加密:若要检查 IaaS VM 的加密状态,请使用 az vm encryption show 命令。

    az vm encryption show --name "MySecureVM" --resource-group "MyVirtualMachineResourceGroup"
    

若要禁用加密,请参阅禁用加密和删除加密扩展

使用资源管理器模板

可以通过使用资源管理器模板加密正在运行的 Windows VM,在 Azure 中现有或正在运行的 IaaS Windows VM 上启用磁盘加密。

  1. 在Azure快速入门模板上,选择“部署到Azure”。

  2. 选择订阅、资源组、位置、设置、法律条款和协议。 选择 “购买 ”以在现有或正在运行的 IaaS VM 上启用加密。

下表列出了现有或正在运行的 VM 的资源管理器模板参数:

参数 说明
vmName 运行加密操作的 VM 的名称。
KeyVaultName BitLocker 密钥应上传到的 Key Vault 的名称。 可使用 cmdlet (Get-AzKeyVault -ResourceGroupName <MyKeyVaultResourceGroupName>). Vaultname 或 Azure CLI 命令 az keyvault list --resource-group "MyKeyVaultResourceGroup" 获取该名称
keyVaultResourceGroup 包含密钥保管库的资源组的名称
keyEncryptionKeyURL 密钥加密密钥的 URL,格式为 https://<keyvault-name>.vault.azure.net/key/<key-name>。 如果不想使用 KEK,请将此字段留空。
volumeType 要对其执行加密操作的卷的类型。 有效值为“OS”、“Data”和“All”
forceUpdateTag 每次操作需要强制运行时,传入一个像 GUID 这样的唯一值。
resizeOSDisk 在拆分系统卷之前,是否应调整 OS 分区大小以占用整个 OS VHD。
位置 所有资源的位置。

通过客户加密的 VHD 和加密密钥新建的 IaaS VM

在此方案中,可以使用 PowerShell cmdlet 或 CLI 命令从预先加密的 VHD 和关联的加密密钥创建新的 VM。

请按照准备预加密的 Windows VHD 中的说明操作。 创建映像后,可使用下一部分中的步骤创建加密的 Azure VM。

使用 Azure PowerShell 通过预加密的 VHD 加密 VM

可以使用 PowerShell cmdlet Set-AzVMOSDisk 在加密的 VHD 上启用磁盘加密。 以下示例提供了一些常用参数。

$VirtualMachine = New-AzVMConfig -VMName "MySecureVM" -VMSize "Standard_A1"
$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -Name "SecureOSDisk" -VhdUri "os.vhd" Caching ReadWrite -Windows -CreateOption "Attach" -DiskEncryptionKeyUrl "https://mytestvault.vault.azure.net/secrets/Test1/514ceb769c984379a7e0230bddaaaaaa" -DiskEncryptionKeyVaultId "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myKVresourcegroup/providers/Microsoft.KeyVault/vaults/mytestvault"
New-AzVM -VM $VirtualMachine -ResourceGroupName "MyVirtualMachineResourceGroup"

在新添加的数据磁盘上启用加密

可以使用 PowerShell 或通过 Azure 门户将新磁盘添加到 Windows VM

注意

必须仅通过 PowerShell 或 CLI 启用新添加的数据磁盘加密。 目前,Azure门户不支持在新磁盘上启用加密。

使用 Azure PowerShell 在新添加的磁盘上启用加密

使用 PowerShell 加密Windows VM 的新磁盘时,请指定新的序列版本。 序列版本必须是唯一的。 以下脚本生成序列版本的 GUID。 在某些情况下,Azure 磁盘加密扩展可能会自动加密新添加的数据磁盘。 当 VM 在新磁盘联机后重新启动时,通常会进行自动加密。 此行为通常是因为以前在 VM 上运行磁盘加密时为卷类型指定了“All”。 如果新添加的数据磁盘上发生自动加密,建议使用新的序列版本再次运行 Set-AzVmDiskEncryptionExtension cmdlet。 如果新的数据磁盘被自动加密,而您不希望这样,请先解密所有驱动器,然后使用为该卷类型指定了 OS 的新序列版本重新加密。

  • 加密正在运行的 VM: 以下脚本初始化变量并运行 Set-AzVMDiskEncryptionExtension cmdlet。 资源组、VM 和密钥保管库必须已作为先决条件存在。 请将 MyKeyVaultResourceGroup、MyVirtualMachineResourceGroup、MySecureVM 和 MySecureVault 替换为自己的值。 以下示例将 -VolumeType 参数设为“All”,表示同时包括 OS 卷和数据卷。 如果只想加密 OS 卷,请使用“OS”作为 -VolumeType 参数。

     $KVRGname = 'MyKeyVaultResourceGroup';
     $VMRGName = 'MyVirtualMachineResourceGroup';
     $vmName = 'MySecureVM';
     $KeyVaultName = 'MySecureVault';
     $KeyVault = Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGname;
     $diskEncryptionKeyVaultUrl = $KeyVault.VaultUri;
     $KeyVaultResourceId = $KeyVault.ResourceId;
     $sequenceVersion = [Guid]::NewGuid();
    
     Set-AzVMDiskEncryptionExtension -ResourceGroupName $VMRGname -VMName $vmName -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId -VolumeType "All" –SequenceVersion $sequenceVersion;
    
  • 使用 KEK 加密正在运行的 VM: 以下示例对 -VolumeType 参数使用“All”,其中包括 OS 和数据卷。 如果只想加密 OS 卷,请使用“OS”作为 -VolumeType 参数。

    $KVRGname = 'MyKeyVaultResourceGroup';
    $VMRGName = 'MyVirtualMachineResourceGroup';
    $vmName = 'MyExtraSecureVM';
    $KeyVaultName = 'MySecureVault';
    $keyEncryptionKeyName = 'MyKeyEncryptionKey';
    $KeyVault = Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGname;
    $diskEncryptionKeyVaultUrl = $KeyVault.VaultUri;
    $KeyVaultResourceId = $KeyVault.ResourceId;
    $keyEncryptionKeyUrl = (Get-AzKeyVaultKey -VaultName $KeyVaultName -Name $keyEncryptionKeyName).Key.kid;
    $sequenceVersion = [Guid]::NewGuid();
    
    Set-AzVMDiskEncryptionExtension -ResourceGroupName $VMRGname -VMName $vmName -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId -KeyEncryptionKeyUrl $keyEncryptionKeyUrl -KeyEncryptionKeyVaultId $KeyVaultResourceId -VolumeType "All" –SequenceVersion $sequenceVersion;
    
    

    注意

    disk-encryption-keyvault 参数值的语法是完整的标识符字符串:/subscriptions/[subscription-id-guid]/resourceGroups/[resource-group-name]/providers/Microsoft.KeyVault/vaults/[keyvault-name]
    key-encryption-key 参数的值的语法是 KEK 的完整 URI,如:https://[keyvault-name].vault.azure.net/keys/[kekname]/[kek-unique-id]

使用 Azure CLI 在新添加的磁盘上启用加密

运行命令以启用加密时,Azure CLI 命令会自动提供新的序列版本。 本示例使用“All”作为 volume-type 参数。 如果你只加密操作系统磁盘,可能需要将卷类型参数更改为 OS。 与 PowerShell 语法相比,CLI 不需要用户在启用加密时提供唯一序列版本。 CLI 自动生成并使用自己唯一的序列版本值。

  • 加密正在运行的 VM:

    az vm encryption enable --resource-group "MyVirtualMachineResourceGroup" --name "MySecureVM" --disk-encryption-keyvault "MySecureVault" --volume-type "All"
    
  • 使用 KEK 加密正在运行的 VM:

    az vm encryption enable --resource-group "MyVirtualMachineResourceGroup" --name "MySecureVM" --disk-encryption-keyvault  "MySecureVault" --key-encryption-key "MyKEK_URI" --key-encryption-keyvault "MySecureVaultContainingTheKEK" --volume-type "All"
    

禁用加密并删除加密扩展

可以禁用Azure 磁盘加密扩展,并删除Azure 磁盘加密扩展。 这些操作是不同的。

若要删除 ADE,请先禁用加密,然后删除扩展。 如果在未禁用加密扩展的情况下将其删除,磁盘仍处于加密状态。 如果在删除扩展 禁用加密,则会重新安装该扩展(执行解密操作),并且需要再次将其删除。

禁用加密功能

可以使用Azure PowerShell、Azure CLI或使用资源管理器模板禁用加密。 禁用加密不会删除扩展(请参阅删除加密扩展)。

警告

当操作系统磁盘和数据磁盘均已加密时,禁用数据磁盘加密可能会导致意外结果。 请改为在所有磁盘上禁用加密。

禁用加密会启动 BitLocker 的后台进程来解密磁盘。 在尝试重新启用加密之前,请让此过程有足够的时间完成。

  • 使用Azure PowerShell禁用磁盘加密:若要禁用加密,请使用 Disable-AzVMDiskEncryption cmdlet。

    Disable-AzVMDiskEncryption -ResourceGroupName "MyVirtualMachineResourceGroup" -VMName "MySecureVM" -VolumeType "all"
    
  • 使用Azure CLI禁用加密:若要禁用加密,请使用 az vm encryption disable 命令。

    az vm encryption disable --name "MySecureVM" --resource-group "MyVirtualMachineResourceGroup" --volume-type "all"
    
  • 使用资源管理器模板禁用加密:

    1. 在运行 Windows VM 模板时,从“禁用磁盘加密”中选择“部署到Azure”。
    2. 选择订阅、资源组、位置、VM、卷类型、法律条款和协议。
    3. 选择“购买”,在正在运行的 Windows VM 上禁用磁盘加密。

删除加密扩展

如果要解密磁盘并删除加密扩展,请在删除该扩展 之前 禁用加密。 有关详细信息,请参阅 禁用加密

可以使用Azure PowerShell或Azure CLI删除加密扩展。

  • 使用Azure PowerShell禁用磁盘加密:若要删除加密,请使用 Remove-AzVMDiskEncryptionExtension cmdlet。

    Remove-AzVMDiskEncryptionExtension -ResourceGroupName "MyVirtualMachineResourceGroup" -VMName "MySecureVM"
    
  • 使用Azure CLI禁用加密:若要删除加密,请使用 az vm extension delete 命令。

    az vm extension delete -g "MyVirtualMachineResourceGroup" --vm-name "MySecureVM" -n "AzureDiskEncryption"
    

后续步骤