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

从 Azure 磁盘加密迁移到主机加密

重要

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

使用 主机端加密 用于新 VM。 所有已启用 ADE 的 VM(包括备份)必须在停用日期之前迁移到主机上的加密,以避免服务中断。 有关详细信息,请参阅 从 Azure 磁盘加密迁移到主机加密

本文提供将虚拟机从 Azure 磁盘加密 (ADE) 迁移到主机加密的分步指南。 由于不支持就地转换,需要在迁移过程中创建新的磁盘和 VM。

迁移概述

Azure 磁盘加密 (ADE) 使用 BitLocker (Windows) 或 dm-crypt (Linux) 对 VM 内的数据进行加密,而主机加密则在 VM 主机级别对数据进行加密,不会消耗 VM CPU 资源。 主机加密通过为所有 VM 数据(包括临时磁盘、缓存以及计算和存储之间的数据流)提供端到端加密,增强了 Azure 的默认服务器端加密 (SSE)。

有关详细信息,请参阅托管磁盘加密选项概述,以及使用主机加密启用端到端加密

迁移限制和注意事项

在开始迁移过程之前,请注意影响迁移策略的以下重要限制和注意事项:

  • 不支持就地迁移:无法直接将 ADE 加密磁盘转换为主机加密。 迁移需要创建新的磁盘和 VM。

  • Linux OS 磁盘限制:不支持在 Linux OS 磁盘上禁用 ADE。 对于具有 ADE 加密 OS 磁盘的 Linux VM,必须使用新的 OS 磁盘创建新的 VM。

  • Windows ADE 加密模式:在 Windows VM 上,Azure 磁盘加密只能单独加密 OS 磁盘或所有磁盘(OS + 数据磁盘)。 无法仅加密 Windows VM 上的数据磁盘。

  • UDE 标志持久性:使用 Azure 磁盘加密加密的磁盘具有统一数据加密 (UDE) 标志,即使在解密后该标志仍然存在。 使用“复制”创建的快照和磁盘副本都会保留这个 UDE 标志。 迁移过程需要使用上传方法创建新的托管磁盘,并复制 VHD blob 数据。这会生成一个新的磁盘对象,而不包含来自源磁盘的任何元数据。

  • 需要停机:迁移过程在执行磁盘操作和重新创建 VM 时需要停机时间。

  • 加入域的 VM:如果 VM 是 Active Directory 域的一部分,则需要执行更多步骤:

    • 在删除之前,必须先从域中删除原始 VM
    • 创建新 VM 后,必须将其重新加入域
    • 对于 Linux VM,可以使用 Azure AD 扩展完成域加入

    要了解详情,请参阅什么是 Microsoft Entra 域服务?

先决条件

开始迁移之前:

  1. 备份数据:在开始迁移过程之前创建所有关键数据的备份。

  2. 测试过程:如果可能,请先在非生产 VM 上测试迁移过程。

  3. 准备加密资源:确保 VM 大小支持主机加密。 大多数当前的 VM 大小都支持此功能。 有关 VM 大小要求的详细信息,请参阅通过主机加密启用端到端加密

  4. 文档配置:记录当前 VM 配置,包括网络设置、扩展和附加资源。

迁移步骤

以下迁移步骤适用于大多数情况,但每个操作系统的具体差异需要注意。

重要

无法就地解密具有加密 OS 磁盘的 Linux VM。 对于这些 VM,必须使用新的 OS 磁盘创建新的 VM 并迁移数据。 查看以下常规过程后,请参阅“迁移具有加密 OS 磁盘的 Linux VM”部分。

禁用 Azure 磁盘加密

第一步是尽可能禁用现有的 Azure 磁盘加密:

运行 ADE 禁用命令后,Azure 门户中的 VM 加密状态会立即更改为“SSE + PMK”。 但是,OS 级别的实际解密过程需要一段时间,具体取决于加密的数据量。 在继续下一步之前,必须验证 OS 级解密是否已完成。

对于 Windows VM:

  • 以管理员身份打开命令提示符并运行: manage-bde -status
  • 验证所有卷是否显示“完全解密”状态
  • 解密百分比应对所有加密卷显示为 100%

对于 Linux VM(仅数据磁盘):

  • 运行:sudo cryptsetup status /dev/mapper/<device-name>
  • 验证加密设备是否不再处于活动状态
  • 请与 lsblk 核对以确认没有加密的映射剩余

等待完全解密,然后继续进行磁盘迁移,以确保数据完整性。

创建新的托管磁盘

创建不包含 ADE 加密元数据的新磁盘。 该过程适用于 Windows 和 Linux VM,但对于 Linux 操作系统磁盘有一些特殊注意事项。

重要

从 Azure 复制托管磁盘时,需要添加 512 字节的偏移量。 这是因为 Azure 在报告磁盘大小时会省略页脚。 如果不这样做,复制将会失败。 以下脚本已经为你完成此操作。

如果要创建 OS 磁盘,请在 --hyper-v-generation <yourGeneration>az disk create 之间添加内容。

# Set variables
sourceDiskName="MySourceDisk"
sourceRG="MyResourceGroup"
targetDiskName="MyTargetDisk"
targetRG="MyResourceGroup"
targetLocation="eastus"
# For OS disks, specify either "Windows" or "Linux"
# For data disks, omit the targetOS variable and --os-type parameter
targetOS="Windows"

# Get source disk size in bytes
sourceDiskSizeBytes=$(az disk show -g $sourceRG -n $sourceDiskName --query '[diskSizeBytes]' -o tsv)

# Create a new empty target disk with upload capability
az disk create -g $targetRG -n $targetDiskName -l $targetLocation --os-type $targetOS --for-upload --upload-size-bytes $(($sourceDiskSizeBytes+512)) --sku standard_lrs

# Generate SAS URIs for both disks
targetSASURI=$(az disk grant-access -n $targetDiskName -g $targetRG --access-level Write --duration-in-seconds 86400 --query [accessSas] -o tsv)

sourceSASURI=$(az disk grant-access -n $sourceDiskName -g $sourceRG --access-level Read --duration-in-seconds 86400 --query [accessSas] -o tsv)

# Copy the disk data using AzCopy
azcopy copy $sourceSASURI $targetSASURI --blob-type PageBlob

# Revoke SAS access when complete
az disk revoke-access -n $sourceDiskName -g $sourceRG

az disk revoke-access -n $targetDiskName -g $targetRG

此方法创建的新磁盘不包含 Azure 磁盘加密元数据(UDE 标志),而这对于干净的迁移至关重要。

创建一个启用加密的新虚拟机

使用新创建的磁盘和所选加密方法创建新的 VM。

可以根据安全要求从多个加密选项中进行选择。 本文提供了使用主机加密创建新虚拟机的步骤,这是最常见的迁移路径。 托管磁盘加密选项概述中介绍了其他加密选项。

使用主机加密创建新 VM

主机加密提供了与 Azure 磁盘加密最接近的等效功能,本节将对此进行介绍。

对于 OS 磁盘:

# For Windows OS disks
az vm create 
  --resource-group "MyResourceGroup" 
  --name "MyVM-New" 
  --os-type "Windows" 
  --attach-os-disk "MyTargetDisk" 
  --encryption-at-host true

# For Linux OS disks
# az vm create 
#   --resource-group "MyResourceGroup" 
#   --name "MyVM-New" 
#   --os-type "Linux" 
#   --attach-os-disk "MyTargetDisk" 
#   --encryption-at-host true

对于数据磁盘:

# Enable encryption at host on the VM
az vm update 
  --resource-group "MyResourceGroup" 
  --name "MyVM-New" 
  --encryption-at-host true

# Attach the newly created data disk
az vm disk attach 
  --resource-group "MyResourceGroup" 
  --vm-name "MyVM-New" 
  --name "MyTargetDisk"

验证和配置新磁盘

使用主机加密创建新 VM 后,需要验证并正确配置磁盘以适应操作系统。

对于 Windows VM:

  • 请确认已正确分配磁盘盘符
  • 检查应用程序是否可以正确访问磁盘
  • 更新所有引用特定磁盘 ID 的应用程序或脚本

对于 Linux VM:

  • 使用新磁盘 UUID 更新 /etc/fstab
  • 将数据磁盘装载到正确的装载点
# Get UUIDs of all disks
sudo blkid

# Mount all disks defined in fstab
sudo mount -a

Windows 和 Linux 系统可能都需要针对应用程序或工作负载进行额外的配置步骤。

验证加密和清理

验证在 Windows 和 Linux VM 上是否已正确配置了主机加密。

# Check encryption at host status
az vm show --resource-group "MyResourceGroup" --name "MyVM-New" --query "securityProfile.encryptionAtHost"

确认主机加密正常运行后:

  1. 测试 VM 功能以确保应用程序正常运行
  2. 验证数据可访问且完整
  3. 迁移完成后,请删除原始资源:
# Delete the original VM
az vm delete --resource-group "MyResourceGroup" --name "MyVM-Original" --yes

# Delete the original disk
az disk delete --resource-group "MyResourceGroup" --name "MySourceDisk" --yes

迁移具有加密 OS 磁盘的 Linux VM

由于无法在 Linux OS 磁盘上禁用加密,因此此过程与 Windows 不同。

  1. 创建启用了主机加密的新 VM

    az vm create \
      --resource-group "MyResourceGroup" \
      --name "MyVM-New" \
      --image "Ubuntu2204" \
      --encryption-at-host true \
      --admin-username "azureuser" \
      --generate-ssh-keys
    
  2. 对于数据迁移选项:

    • 对于应用程序数据:使用 SCP、rsync 或其他文件传输方法复制数据
    • 对于配置:复制重要的配置文件和设置
    • 对于复杂应用程序:使用适用于应用程序的备份/还原过程
    # Example of using SCP to copy files from source to new VM
    az vm run-command invoke -g MyResourceGroup -n MyVM-Original --command-id RunShellScript \
      --scripts "scp -r /path/to/data azureuser@new-vm-ip:/path/to/destination"
    

创建新 VM 后:

  1. 配置新 VM 以匹配原始环境

    • 设置相同的网络配置
    • 安装相同的应用程序和服务
    • 应用相同的安全设置
  2. 在停用原始虚拟机之前,请进行彻底测试

这种方法适用于 Windows 和 Linux 虚拟机,但对于无法就地解密其加密操作系统磁盘的 Linux VM 尤其重要。

有关数据迁移的指导,请参阅“将 VHD 上传到 Azure”和“使用 SCP 将文件复制到 Linux VM”。

已加入域的 VM 注意事项

如果 VM 是 Active Directory 域的成员,则需要在迁移过程中执行额外步骤:

预迁移域步骤

  1. 记录域成员资格:记录当前域、组织单位 (OU) 和任何特殊组成员资格
  2. 注意计算机帐户:需要管理 Active Directory 中的计算机帐户
  3. 备份特定于域的配置:保存任何特定于域的设置、组策略或证书

域删除过程

  1. 从域中删除:在删除原始 VM 之前,请使用以下方法之一将其从域中删除:

    • 在 Windows 上使用 Remove-Computer PowerShell cmdlet
    • 使用“系统属性”对话框更改为工作组
    • 手动从 Active Directory 用户和计算机中删除计算机帐户
  2. 清理 Active Directory:删除任何孤立的计算机帐户或 DNS 条目

迁移后域重新加入

  1. 将新 VM 加入域:使用主机加密创建新 VM 后:

    • 对于 Windows:使用 Add-Computer PowerShell cmdlet 或系统属性
    • 对于 Linux:使用 Azure AD 域加入扩展或手动配置
  2. 还原域设置:重新应用任何特定于域的配置、组策略或证书

  3. 验证域功能:测试域身份验证、组策略应用程序和网络资源访问

Linux 域加入

对于 Linux VM,可以使用 Azure AD 域服务 VM 扩展:

az vm extension set \
    --resource-group "MyResourceGroup" \
    --vm-name "MyLinuxVM-New" \
    --name "AADSSHLoginForLinux" \
    --publisher "Microsoft.Azure.ActiveDirectory"

要了解详情,请参阅什么是 Microsoft Entra 域服务?

重要的域注意事项

  • 新 VM 具有不同的计算机 SID,可能会影响某些应用程序
  • 必须刷新 Kerberos 票证和缓存凭据
  • 某些域集成应用程序可能需要重新配置
  • 制定迁移期间域服务可能暂时中断的应对方案

迁移后验证

完成迁移后,验证主机加密是否正常运作:

  1. 检查主机加密状态:验证是否已启用主机加密:

    az vm show --resource-group "MyResourceGroup" --name "MyVM-New" --query "securityProfile.encryptionAtHost"
    
  2. 测试 VM 功能:确保应用程序和服务正常运作。

  3. 验证磁盘加密:确认磁盘是否已正确加密:

    Get-AzDisk -ResourceGroupName "MyResourceGroup" -DiskName "MyVM-OS-New" | Select-Object Name, DiskState
    
  4. 监视性能:对比迁移前后的性能,以确认是否达到预期改进。

有关加密验证的详细信息,请参阅通过主机加密启用端到端加密

清理行动

成功迁移和验证后:

  1. 删除旧 VM:移除原有的 ADE 加密 VM

  2. 删除旧磁盘:移除原有的加密磁盘

  3. 更新 Key Vault 访问策略:其他磁盘加密解决方案使用标准 Key Vault 授权机制。 如果不再需要 Azure 磁盘加密的 Key Vault,请更新其访问策略以禁用特殊磁盘加密设置:

    az keyvault update --name "YourKeyVaultName" --resource-group "YourResourceGroup" --enabled-for-disk-encryption false
    

  1. 清理资源:移除迁移过程中创建的所有临时资源
  2. 更新文档:更新基础架构文档,以反映主机加密的迁移

常见问题和解决方案

VM 大小不支持主机加密

解决方案:查看支持的 VM 大小列表,如有必要,请调整 VM 大小

迁移后 VM 无法启动

解决方案:检查所有磁盘是否已正确连接,以及操作系统磁盘是否已设置为启动磁盘

未启用主机加密

解决方案:请确认 VM 是使用 --encryption-at-host true 参数创建的,并且订阅支持此功能

性能问题仍然存在

解决方案:验证主机加密是否已正确启用,并确认 VM 大小能够支持预期的性能。

后续步骤