在 Windows VM 上创建和配置用于 Azure 磁盘加密的密钥保管库
适用于:✔️ Windows VM
Azure 磁盘加密使用 Azure 密钥保管库来控制和管理磁盘加密密钥和机密。 有关 Key Vault 的详细信息,请参阅 Azure Key Vault 入门和保护 Key Vault。
警告
- 如果之前是使用 Azure 磁盘加密与 Azure AD 来加密 VM,则必须继续使用此选项来加密 VM。 有关详细信息,请参阅使用 Azure AD 创建和配置用于 Azure 磁盘加密的 Key Vault(以前版本)。
创建和配置用于 Azure 磁盘加密的 Key Vault 需要三个步骤:
注意
必须在 Azure Key Vault 访问策略设置中选择该选项,才能为卷加密启用对 Azure 磁盘加密的访问。 如果你已在密钥保管库上启用防火墙,则必须转到密钥保管库上的“网络”选项卡并启用对 Microsoft 受信任的服务的访问。
- 创建资源组(如果需要)。
- 创建密钥保管库。
- 设置密钥保管库高级访问策略。
以下快速入门说明了这些步骤:
还可以根据需要生成或导入密钥加密密钥 (KEK)。
注意
本文中的步骤在 Azure 磁盘加密先决条件 CLI 脚本和 Azure 磁盘加密先决条件 PowerShell 脚本中自动执行。
安装工具并连接到 Azure
可以使用 Azure CLI、Azure 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。
设置 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 门户
选择 Key Vault,转到“访问策略”,然后选择“单击此处可显示高级访问策略”。
选中标有“启用对 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,请参阅以下示例:
- 有效机密 URL 的示例: https://contosovault.vault.azure.cn/secrets/EncryptionSecretWithKek/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- 有效 KEK URL 的示例: https://contosovault.vault.azure.cn/keys/diskencryptionkek/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Azure 磁盘加密不支持将端口号指定为 Key Vault 机密和 KEK URL 的一部分。 有关不支持和支持的 Key Vault URL 的示例,请参阅以下示例:
- 可接受的 Key Vault URL: https://contosovault.vault.azure.cn/secrets/contososecret/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- 无法接受的 Key Vault URL: https://contosovault.vault.azure.cn:443/secrets/contososecret/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
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