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

为 Azure 磁盘加密创建和配置密钥保管库

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

创建和配置用于 Azure 磁盘加密的密钥保管库涉及三个步骤:

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

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

安装工具并连接到 Azure

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

创建资源组

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

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

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

Azure CLI

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

Azure PowerShell

New-AzResourceGroup -Name "myResourceGroup" -Location "EastUS"

创建密钥保管库

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

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

警告

若要确保加密机密不跨越区域边界,就必须创建并使用与要加密的 VM 位于同一区域和租户中的密钥保管库。

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

Azure CLI

使用 Azure CLI 创建密钥保管库时,请添加“--enabled-for-disk-encryption”标志。

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

Azure PowerShell

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

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

Resource Manager 模板

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

  1. 在 Azure 快速入门模板中,单击“部署到 Azure”。
  2. 选择订阅、资源组、资源组位置、Key Vault 名称、对象 ID、法律条款和协议,然后单击“购买”。

设置 Key Vault 高级访问策略

重要

新建的密钥保管库默认已启用软删除。 如果使用预先存在的密钥保管库,则必须启用软删除。 请参阅 Azure Key Vault 软删除概述

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

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

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. 选择自己的密钥保管库,并转到“访问策略”。

  2. 在“启用对其的访问权限”下,选中标有“用于卷加密的 Azure 磁盘加密”的框。

  3. 根据需要选择“用于部署的 Azure 虚拟机”和/或“用于模板部署的 Azure 资源管理器”。

  4. 单击“ 保存”。

    Azure Key Vault 高级访问策略

Azure 磁盘加密和自动轮换

虽然 Azure Key Vault 现在具有密钥自动轮换功能,但该功能目前与 Azure 磁盘加密不兼容。 具体而言,Azure 磁盘加密将继续使用原来的加密密钥,即使该密钥已自动轮换。

轮换加密密钥并不会中断 Azure 磁盘加密,但禁用“旧”加密密钥(也就是 Azure 磁盘加密仍在使用的那个密钥)则会中断加密。

设置密钥加密密钥 (KEK)

重要

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

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

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

可以改为从本地密钥管理 HSM 导入 KEK。 有关详细信息,请参阅 Key Vault 文档

必须对 Key Vault KEK URL 进行版本控制。 Azure 会强制实施这项版本控制限制。 有关有效的机密和 KEK 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 "HSM" -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

后续步骤