使用 Azure CLI 对虚拟机规模集中的 OS 和附加数据磁盘进行加密
Azure CLI 用于从命令行或脚本创建和管理 Azure 资源。 本快速入门展示了如何使用 Azure CLI 创建和加密虚拟机规模集。 若要详细了解如何将 Azure 磁盘加密应用于虚拟机规模集,请参阅适用于虚拟机规模集的 Azure 磁盘加密。
先决条件
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展。
运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
- 本文需要 Azure CLI 版本 2.0.31 或更高版本。
创建规模集
使用 az group create 创建资源组,才能创建规模集。 以下示例在“chinanorth2”位置创建名为“myResourceGroup”的资源组:
az group create --name myResourceGroup --location chinanorth2
现在,使用 az vmss create 创建虚拟机规模集。 以下示例创建名为 myScaleSet 的规模集,该规模集设置为在应用更改时自动更新;如果 ~/.ssh/id_rsa 中没有 SSH 密钥,此示例还会生成 SSH 密钥。 每个 VM 实例附有 32Gb 的数据磁盘,可使用 Azure 自定义脚本扩展通过 az vmss extension set 准备数据磁盘:
重要
确保选择 ADE 支持的操作系统。 ADE 支持的操作系统。
# Create a scale set with attached data disk
az vmss create \
--resource-group myResourceGroup \
--name myScaleSet \
--orchestration-mode Flexible \
--image <SKU Linux Image> \
--admin-username azureuser \
--generate-ssh-keys \
--data-disk-sizes-gb 32
# Prepare the data disk for use with the Custom Script Extension
az vmss extension set \
--publisher Microsoft.Azure.Extensions \
--version 2.0 \
--name CustomScript \
--resource-group myResourceGroup \
--vmss-name myScaleSet \
--settings '{"fileUris":["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/prepare_vm_disks.sh"],"commandToExecute":"./prepare_vm_disks.sh"}'
创建和配置所有的规模集资源和 VM 需要几分钟时间。
创建 Azure Key Vault(针对磁盘加密启用)
Azure 密钥保管库可以存储能够在应用程序和服务中安全实现的密钥、机密或密码。 使用软件保护将加密密钥存储在 Azure Key Vault 中,或者,可在已获得经过 FIPS 140 验证的标准认证的硬件安全模块 (HSM) 中导入或生成密钥。 这些加密密钥用于加密和解密附加到 VM 的虚拟磁盘。 可以控制这些加密密钥,以及审核对它们的使用。
定义自己的唯一 keyvault_name。 然后,在规模集所在的同一订阅和区域中,通过 az keyvault create 创建 KeyVault,并设置 --enabled-for-disk-encryption 访问策略。
# Provide your own unique Key Vault name
keyvault_name=myuniquekeyvaultname
# Create Key Vault
az keyvault create --resource-group myResourceGroup --name $keyvault_name --enabled-for-disk-encryption
使用现有的密钥保管库
仅当你要将现有的 Key Vault 用于磁盘加密时,才需要执行此步骤。 如果在上一部分中创建了 Key Vault,请跳过此步骤。
定义自己的唯一 keyvault_name。 然后,通过 az keyvault update 更新 KeyVault 并设置 --enabled-for-disk-encryption 访问策略。
# Provide your own unique Key Vault name
keyvault_name=myuniquekeyvaultname
# Create Key Vault
az keyvault update --name $keyvault_name --enabled-for-disk-encryption
启用加密功能
注意
如果在灵活编排模式下使用虚拟机规模集,则只有新实例才会被加密。 规模集中的现有实例需要单独加密或者删除和替换。
若要加密规模集中的 VM 实例,请先使用 az keyvault show 获取有关 Key Vault 资源 ID 的信息。 然后,通过 az vmss encryption enable 使用这些变量启动加密过程:
# Get the resource ID of the Key Vault
vaultResourceId=$(az keyvault show --resource-group myResourceGroup --name $keyvault_name --query id -o tsv)
# Enable encryption of the data disks in a scale set
az vmss encryption enable \
--resource-group myResourceGroup \
--name myScaleSet \
--disk-encryption-keyvault $vaultResourceId \
--volume-type DATA
启动加密过程可能需要一到两分钟时间。
因为之前步骤中创建的规模集上的升级策略设置为自动,所以 VM 实例将自动启动加密过程。 在升级策略设为手动的规模集上,通过 az vmss update-instances 在 VM 实例上启动加密策略。
使用 KEK 包装密钥以实现加密
加密虚拟机规模集时,还可以使用密钥加密密钥来增强安全性。
# Get the resource ID of the Key Vault
vaultResourceId=$(az keyvault show --resource-group myResourceGroup --name $keyvault_name --query id -o tsv)
# Enable encryption of the data disks in a scale set
az vmss encryption enable \
--resource-group myResourceGroup \
--name myScaleSet \
--disk-encryption-keyvault $vaultResourceId \
--key-encryption-key myKEK \
--key-encryption-keyvault $vaultResourceId \
--volume-type DATA
注意
disk-encryption-keyvault 参数值的语法是完整的标识符字符串:
/subscriptions/[subscription-id-guid]/resourceGroups/[resource-group-name]/providers/Microsoft.KeyVault/vaults/[keyvault-name]
key-encryption-key 参数值的语法是 KEK 的完整 URI,如:
https://[keyvault-name].vault.azure.cn/keys/[kekname]/[kek-unique-id]
查看加密进度
若要检查磁盘加密状态,请使用 az vmss encryption show:
az vmss encryption show --resource-group myResourceGroup --name myScaleSet
加密 VM 实例后,状态代码将报告 EncryptionState/encrypted,如下面的示例输出所示:
[
{
"disks": [
{
"encryptionSettings": null,
"name": "myScaleSet_myScaleSet_0_disk2_3f39c2019b174218b98b3dfae3424e69",
"statuses": [
{
"additionalProperties": {},
"code": "EncryptionState/encrypted",
"displayStatus": "Encryption is enabled on disk",
"level": "Info",
"message": null,
"time": null
}
]
}
],
"id": "/subscriptions/guid/resourceGroups/MYRESOURCEGROUP/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/virtualMachines/0",
"resourceGroup": "MYRESOURCEGROUP"
}
]
禁用加密功能
如果不再想要使用加密的 VM 实例磁盘,可以使用 az vmss encryption disable 禁用加密,如下所示:
az vmss encryption disable --resource-group myResourceGroup --name myScaleSet
后续步骤
- 在本文中,你使用了 Azure CLI 来加密虚拟机规模集。 还可以使用 Azure PowerShell 或 Azure 资源管理器模板。
- 如果希望在预配另一个扩展后应用 Azure 磁盘加密,可以使用扩展排序。
- 可查看此处,了解针对 Linux 规模集数据磁盘加密的端到端批处理文件示例。 此示例创建一个资源组(Linux 规模集),装载一个 5 GB 的数据磁盘,并对虚拟机规模集进行加密。