对现有的 VM 磁盘进行加密

已完成

假设你的公司决定在所有虚拟机上实现 Azure 磁盘加密 (ADE)。 你需要评估如何向现有虚拟机 (VM) 卷推出加密。 此处,我们将介绍 ADE 的要求,以及在现有 Linux 和 Windows VM 上加密磁盘所涉及到的步骤。 在下一单元中,你将完成加密现有 VM 磁盘的过程。

Azure 磁盘加密先决条件

在加密 VM 磁盘之前,需要执行以下操作:

  1. 创建一个 Key Vault。
  2. 将 Key Vault 访问策略设置为支持磁盘加密。
  3. 使用 Key Vault 存储 ADE 的加密密钥。

Azure Key Vault

可以在 Azure 密钥保管库中存储 ADE 使用的加密密钥。 Azure Key Vault 是一个用于安全存储和访问机密的工具。 机密是你想要严格控制对其的访问权限的任何内容,例如 API 密钥、密码或证书。 Azure 密钥保管库提供了高度可用且可缩放的安全存储,符合美国联邦信息处理标准 (FIPS) 140-2 级别 2 验证的硬件安全模块 (HSM) 的要求。 通过使用 Key Vault 可以完全控制用于加密数据的密钥,并且可以管理和审核密钥的使用。

注意

Azure 磁盘加密要求 Key Vault 和 VM 需要位于同一 Azure 区域;这可以确保加密机密不会跨越区域边界。

可通过以下方式配置和管理 Key Vault:

PowerShell

New-AzKeyVault -Location <location> `
    -ResourceGroupName <resource-group> `
    -VaultName "myKeyVault" `
    -EnabledForDiskEncryption

Azure CLI

az keyvault create \
    --name "myKeyVault" \
    --resource-group <resource-group> \
    --location <location> \
    --enabled-for-disk-encryption True

Azure 门户

Azure 密钥保管库是可使用常规资源创建过程在 Azure 门户中创建的资源。

  1. 在 Azure 门户菜单上或在门户主页中,选择“创建资源”。

  2. 在搜索框中,搜索并选择“密钥保管库”。 此时,“密钥保管库”窗格显示。

  3. 选择创建。 此时会显示“创建密钥保管库”窗格。

  4. 在“基本信息”选项卡上,为每个设置输入以下值。

    设置
    项目详细信息
    订阅 请选择要用于放置密钥保管库的订阅(默认为当前订阅)。
    资源组 选择现有资源组,或创建一个新组。
    实例详细信息
    密钥保管库名称 请输入密钥保管库的名称。
    区域 请选择 VM 所在的区域。
    定价层 标准。 你可以选择“标准”或“高级”定价层。 两者的主要区别在于,高级层允许使用以硬件加密为后盾的密钥。

    显示“密钥保管库”窗格的屏幕截图。

  5. 选择“下一步”,转到“访问配置”选项卡。必须将访问策略更改为支持磁盘加密。 默认会将你的帐户添加到策略。

  6. 在“访问配置”选项卡上,为设置输入以下值

    设置
    资源访问 选中“用于卷加密的 Azure 磁盘加密”复选框。 可根据需要删除自己的帐户,如果只是打算使用密钥保管库进行磁盘加密,则不需要删除该帐户。
  7. 选择“查看 + 创建”。

  8. 通过验证后,若要创建新的密钥保管库,请选择“创建”。

在密钥保管库中启用访问策略

Azure 需要访问 Key Vault 中的加密密钥或机密,才能使这些密钥和机密可供 VM 用来启动和解密卷。 你在前面的步骤中更改“访问策略”时,已经启用了此访问权限

可以启用三个策略:

  • 磁盘加密:Azure 磁盘加密所需。
  • 部署:(可选)使 Microsoft.Compute 资源提供程序能够从此密钥保管库中检索机密,前提是在创建资源时(例如,创建 VM 时) 引用了此密钥保管库。
  • 模板部署:(可选)在模板部署中引用此密钥保管库时,使 Azure 资源管理器能够从此密钥保管库中获取机密。

下面介绍如何启用磁盘加密策略。 另外两个策略是类似的,但使用不同的标志。

Set-AzKeyVaultAccessPolicy -VaultName <keyvault-name> -ResourceGroupName <resource-group> -EnabledForDiskEncryption
az keyvault update --name <keyvault-name> --resource-group <resource-group> --enabled-for-disk-encryption true

加密现有 VM 磁盘

设置密钥保管库后,可以使用 Azure CLI 或 Azure PowerShell 加密 VM。 首次加密 Windows VM 时,可选择加密所有磁盘或仅加密 OS 磁盘。 在某些 Linux 发行版上,只能加密数据磁盘。 若要符合加密条件,必须将 Windows 磁盘格式化为新技术文件系统 (NTFS) 卷。

警告

必须先获取托管磁盘的快照或备份,然后才能启用加密。 以下 SkipVmBackup 标志告知工具,托管磁盘上的备份已完成。 如果没有备份,则在某种原因导致加密失败时,将无法恢复 VM。

若要通过 PowerShell 启用加密,请运行 Set-AzVmDiskEncryptionExtension cmdlet。


Set-AzVmDiskEncryptionExtension `
    -ResourceGroupName <resource-group> `
    -VMName <vm-name> `
    -VolumeType [All | OS | Data]
    -DiskEncryptionKeyVaultId <keyVault.ResourceId> `
    -DiskEncryptionKeyVaultUrl <keyVault.VaultUri> `
     -SkipVmBackup

若要通过 Azure CLI 启用加密,请运行 az vm encryption enable 命令,并使用 --volume-type [all | os | data] 参数指定要加密的卷。 下面是加密虚拟机的所有卷的示例:

az vm encryption enable \
    --resource-group <resource-group> \
    --name <vm-name> \
    --disk-encryption-keyvault <keyvault-name> \
    --volume-type all

查看磁盘状态

可以检查特定的磁盘是否已加密。

Get-AzVmDiskEncryptionStatus  -ResourceGroupName <resource-group> -VMName <vm-name>
az vm encryption show --resource-group <resource-group> --name <vm-name>

这两条命令将返回挂接到指定 VM 的每个磁盘的状态。

解密驱动器

若要通过 PowerShell 撤销加密,请运行 Disable-AzVMDiskEncryption cmdlet。

Disable-AzVMDiskEncryption -ResourceGroupName <resource-group> -VMName <vm-name>

对于 Azure CLI,请运行 vm encryption disable 命令。

az vm encryption disable --resource-group <resource-group> --name <vm-name>

这些命令针对指定的 VM 禁用 all 类型的卷的加密。 就像加密版本一样,要决定解密哪些磁盘,可以指定 -VolumeType 参数 [All | OS | Data]。 如果未提供参数,将使用默认参数 All

警告

当 OS 和数据磁盘都已加密时,在 Windows VM 上禁用数据磁盘加密无法按预期工作。 必须改为在所有磁盘上禁用加密。

在下一练习中,你将在新 VM 上尝试其中一些命令。