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

适用于:✔️ Linux VM ✔️ 灵活规模集

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

警告

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

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

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

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

安装工具并连接到 Azure

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

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

连接到 Azure 帐户

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

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 位于同一区域和租户中的密钥保管库。

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

Azure CLI

使用 Azure CLI 创建密钥保管库时,请添加“--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 软删除概述

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 advanced access policies

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 磁盘加密目前不支持使用椭圆曲线密钥。

必须对 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 "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

后续步骤