在 Windows VM 上创建和配置用于 Azure 磁盘加密的密钥保管库

适用于:✔️ Windows VM

Azure 磁盘加密使用 Azure 密钥保管库来控制和管理磁盘加密密钥和机密。 有关 Key Vault 的详细信息,请参阅 Azure Key Vault 入门保护 Key Vault

警告

创建和配置用于 Azure 磁盘加密的 Key Vault 需要三个步骤:

注意

必须在 Azure Key Vault 访问策略设置中选择该选项,才能为卷加密启用对 Azure 磁盘加密的访问。 如果你已在密钥保管库上启用防火墙,则必须转到密钥保管库上的“网络”选项卡并启用对 Microsoft 受信任的服务的访问。

  1. 创建资源组(如果需要)。
  2. 创建密钥保管库。
  3. 设置密钥保管库高级访问策略。

以下快速入门说明了这些步骤:

还可以根据需要生成或导入密钥加密密钥 (KEK)。

安装工具并连接到 Azure

可以使用 Azure CLIAzure PowerShell Az 模块Azure 门户来完成本文中的步骤。

虽然可以通过浏览器访问门户,但 Azure CLI 和 Azure PowerShell 需要本地安装;有关详细信息,请参阅适用于 Windows 的 Azure 磁盘加密:安装工具

连接到 Azure 帐户

使用 Azure CLI 或 Azure PowerShell 之前,必须先连接到 Azure 订阅。 为此,可以使用 Azure CLI 登录使用 Azure Powershell 登录,或在出现提示时向 Azure 门户提供凭据。

az cloud set -n AzureChinaCloud
az login
Connect-AzAccount -Environment AzureChinaCloud

创建资源组

如果已有资源组,可以跳至创建 Key Vault

资源组是在其中部署和管理 Azure 资源的逻辑容器。

使用 az group create Azure CLI 命令、New-AzResourceGroup Azure PowerShell 命令或从 Azure 门户创建资源组。

Azure CLI

az group create --name "myResourceGroup" --location chinaeast

Azure PowerShell

New-AzResourceGroup -Name "myResourceGroup" -Location "ChinaEast"

创建密钥保管库

如果已有 Key Vault,可以跳至设置 Key Vault 高级访问策略

使用 az keyvault create Azure CLI 命令、New-AzKeyvault Azure PowerShell 命令、Azure 门户资源管理器模板创建密钥保管库。

警告

密钥保管库和 VM 必须位于同一订阅中。 另外,为确保加密机密不会跨越区域边界,Azure 磁盘加密需要将 Key Vault 和 VM 共置于同一区域中。 在要加密的 VM 所在的同一订阅和区域中创建并使用 Key Vault。

每个密钥保管库必须具有唯一的名称。 在以下示例中,将 <your-unique-keyvault-name> 替换为密钥保管库的名称。

Azure CLI

使用 Azure CLI 创建 Key Vault 时,请添加“--enabled-for-disk-encryption”标志。

az keyvault create --name "<your-unique-keyvault-name>" --resource-group "myResourceGroup" --location "chinaeast" --enabled-for-disk-encryption

Azure PowerShell

使用 Azure PowerShell 创建 Key Vault 时,请添加“-EnabledForDiskEncryption”标志。

New-AzKeyvault -name "<your-unique-keyvault-name>" -ResourceGroupName "myResourceGroup" -Location "chinaeast" -EnabledForDiskEncryption

Resource Manager 模板

还可以使用资源管理器模板创建 Key Vault。

  1. 单击 “部署到 Azure”

    Deploy to Azure

  2. 选择订阅、资源组、资源组位置、Key Vault 名称、对象 ID、法律条款和协议,然后单击“查看 + 创建”。

设置 Key Vault 高级访问策略

Azure 平台需要访问 Key Vault 中的加密密钥或机密,才能使这些密钥和机密可供 VM 用来启动和解密卷。

如果在创建时没有为磁盘加密、部署或模板部署启用 Key Vault(如上一步所示),则必须更新其高级访问策略。

Azure CLI

使用 az keyvault update 为 Key Vault 启用磁盘加密。

  • 为磁盘加密启用 Key Vault: 需要使用 Enabled-for-disk-encryption。

    az keyvault update --name "<your-unique-keyvault-name>" --resource-group "MyResourceGroup" --enabled-for-disk-encryption "true"
    
  • 根据需要为部署启用 Key Vault: 在资源创建操作中引用此 Key Vault(例如,创建虚拟机)时,使 Microsoft.Compute 资源提供程序能够从此 Key Vault 中检索机密。

    az keyvault update --name "<your-unique-keyvault-name>" --resource-group "MyResourceGroup" --enabled-for-deployment "true"
    
  • 根据需要为模板部署启用 Key Vault: 允许资源管理器从保管库中检索机密。

    az keyvault update --name "<your-unique-keyvault-name>" --resource-group "MyResourceGroup" --enabled-for-template-deployment "true"
    

Azure PowerShell

使用 Key Vault PowerShell cmdlet Set-AzKeyVaultAccessPolicy 为 Key Vault 启用磁盘加密。

  • 为磁盘加密启用 Key Vault: 若要启用 Azure 磁盘加密,需要使用 EnabledForDiskEncryption。

    Set-AzKeyVaultAccessPolicy -VaultName "<your-unique-keyvault-name>" -ResourceGroupName "MyResourceGroup" -EnabledForDiskEncryption
    
  • 根据需要为部署启用 Key Vault: 在资源创建操作中引用此 Key Vault(例如,创建虚拟机)时,使 Microsoft.Compute 资源提供程序能够从此 Key Vault 中检索机密。

     Set-AzKeyVaultAccessPolicy -VaultName "<your-unique-keyvault-name>" -ResourceGroupName "MyResourceGroup" -EnabledForDeployment
    
  • 根据需要为模板部署启用 Key Vault: 在模板部署中引用此 Key Vault 时,使 Azure 资源管理器能够从此 Key Vault 中获取机密。

    Set-AzKeyVaultAccessPolicy -VaultName "<your-unique-keyvault-name>" -ResourceGroupName "MyResourceGroup" -EnabledForTemplateDeployment
    

Azure 门户

  1. 选择 Key Vault,转到“访问策略”,然后选择“单击此处可显示高级访问策略”。

  2. 选中标有“启用对 Azure 磁盘加密的访问以进行卷加密”的框。

  3. 根据需要选择“启用对 Azure 虚拟机的访问以进行部署”和/或“启用对 Azure 资源管理器的访问以进行模板部署”。

  4. 单击“保存” 。

    Azure key vault advanced access policies

设置密钥加密密钥 (KEK)

重要

正在运行以通过密钥保管库启用磁盘加密的帐户必须具有“读取者”权限。

若要使用密钥加密密钥 (KEK) 来为加密密钥提供附加的安全层,请将 KEK 添加到 Key Vault。 指定密钥加密密钥后,Azure 磁盘加密会使用该密钥包装加密机密,然后将机密写入 Key Vault。

可以使用 Azure CLI az keyvault key create 命令、Azure PowerShell Add-AzKeyVaultKey cmdlet 或 Azure 门户生成新 KEK。 必须生成 RSA 密钥类型;Azure 磁盘加密尚不支持使用椭圆曲线密钥。

必须对 Key Vault KEK URL 进行版本控制。 Azure 会强制实施这项版本控制限制。 有关有效的机密和 KEK URL,请参阅以下示例:

Azure 磁盘加密不支持将端口号指定为 Key Vault 机密和 KEK URL 的一部分。 有关不支持和支持的 Key Vault URL 的示例,请参阅以下示例:

Azure CLI

使用 Azure CLI az keyvault key create 命令生成新 KEK 并将其存储在密钥保管库中。

az keyvault key create --name "myKEK" --vault-name "<your-unique-keyvault-name>" --kty RSA --size 4096

可以改用 Azure CLI az keyvault key import 命令导入私钥:

在这两种情况下,都会向 Azure CLI az vm encryption enable --key-encryption-key 参数提供 KEK 的名称。

az vm encryption enable -g "MyResourceGroup" --name "myVM" --disk-encryption-keyvault "<your-unique-keyvault-name>" --key-encryption-key "myKEK"

Azure PowerShell

使用 Azure PowerShell Add-AzKeyVaultKey cmdlet 生成新 KEK 并将其存储在 Key Vault 中。

Add-AzKeyVaultKey -Name "myKEK" -VaultName "<your-unique-keyvault-name>" -Destination "Software" -Size 4096

可以改用 Azure PowerShell az keyvault key import 命令导入私钥。

在这两种情况下,都会向 Azure PowerShell Set-AzVMDiskEncryptionExtension -KeyEncryptionKeyVaultId 和 -KeyEncryptionKeyUrl 参数提供 KEK Key Vault 的 ID 和 KEK 的 URL。 请注意,此示例假定使用同一密钥保管库保存磁盘加密密钥和 KEK。

$KeyVault = Get-AzKeyVault -VaultName "<your-unique-keyvault-name>" -ResourceGroupName "myResourceGroup"
$KEK = Get-AzKeyVaultKey -VaultName "<your-unique-keyvault-name>" -Name "myKEK"

Set-AzVMDiskEncryptionExtension -ResourceGroupName MyResourceGroup -VMName "MyVM" -DiskEncryptionKeyVaultUrl $KeyVault.VaultUri -DiskEncryptionKeyVaultId $KeyVault.ResourceId -KeyEncryptionKeyVaultId $KeyVault.ResourceId -KeyEncryptionKeyUrl $KEK.Id -SkipVmBackup -VolumeType All

后续步骤