对现有的 VM 磁盘进行加密
假设你的公司决定在所有虚拟机上实现 Azure 磁盘加密 (ADE)。 你需要评估如何向现有虚拟机 (VM) 卷推出加密。 此处,我们将介绍 ADE 的要求,以及在现有 Linux 和 Windows VM 上加密磁盘所涉及到的步骤。 在下一单元中,你将完成加密现有 VM 磁盘的过程。
Azure 磁盘加密先决条件
在加密 VM 磁盘之前,需要执行以下操作:
- 创建一个 Key Vault。
- 将 Key Vault 访问策略设置为支持磁盘加密。
- 使用 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 门户中创建的资源。
在 Azure 门户菜单上或在门户主页中,选择“创建资源”。
在搜索框中,搜索并选择“密钥保管库”。 此时,“密钥保管库”窗格显示。
选择创建。 此时会显示“创建密钥保管库”窗格。
在“基本信息”选项卡上,为每个设置输入以下值。
设置 值 项目详细信息 订阅 请选择要用于放置密钥保管库的订阅(默认为当前订阅)。 资源组 选择现有资源组,或创建一个新组。 实例详细信息 密钥保管库名称 请输入密钥保管库的名称。 区域 请选择 VM 所在的区域。 定价层 标准。 你可以选择“标准”或“高级”定价层。 两者的主要区别在于,高级层允许使用以硬件加密为后盾的密钥。 选择“下一步”,转到“访问配置”选项卡。必须将访问策略更改为支持磁盘加密。 默认会将你的帐户添加到策略。
在“访问配置”选项卡上,为设置输入以下值。
设置 值 资源访问 选中“用于卷加密的 Azure 磁盘加密”复选框。 可根据需要删除自己的帐户,如果只是打算使用密钥保管库进行磁盘加密,则不需要删除该帐户。 选择“查看 + 创建”。
通过验证后,若要创建新的密钥保管库,请选择“创建”。
在密钥保管库中启用访问策略
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 上尝试其中一些命令。