你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure PowerShell 模块用于从 PowerShell 命令行或脚本创建和管理 Azure 资源。 本文介绍如何使用 Azure PowerShell 创建和加密虚拟机规模集。 若要详细了解如何将 Azure 磁盘加密应用于虚拟机规模集,请参阅适用于虚拟机规模集的 Azure 磁盘加密。
Azure Cloud Shell
Azure 托管 Azure Cloud Shell(一个可通过浏览器使用的交互式 shell 环境)。 可以将 Bash 或 PowerShell 与 Cloud Shell 配合使用来使用 Azure 服务。 可以使用 Cloud Shell 预安装的命令来运行本文中的代码,而不必在本地环境中安装任何内容。
若要启动 Azure Cloud Shell,请执行以下操作:
选项 | 示例/链接 |
---|---|
选择代码或命令块右上角的“试用”。 选择“试用”不会自动将代码或命令复制到 Cloud Shell。 | ![]() |
转到 https://shell.azure.com 或选择“启动 Cloud Shell”按钮可在浏览器中打开 Cloud Shell。 | ![]() |
选择 Azure 门户右上角菜单栏上的 Cloud Shell 按钮。 | ![]() |
若要使用 Azure Cloud Shell,请执行以下操作:
启动 Cloud Shell。
选择代码块(或命令块)上的“复制”按钮以复制代码或命令。
在 Windows 和 Linux 上选择 Ctrl+Shift+V,或在 macOS 上选择 Cmd+Shift+V 将代码或命令粘贴到 Cloud Shell 会话中。
选择“Enter”运行代码或命令。
创建支持磁盘加密的 Azure Key Vault
Azure 密钥保管库可以存储能够在应用程序和服务中安全实现的密钥、机密或密码。 使用软件保护将加密密钥存储在 Azure Key Vault 中,或者,可在已获得经过 FIPS 140 验证的标准认证的硬件安全模块 (HSM) 中导入或生成密钥。 这些加密密钥用于加密和解密附加到 VM 的虚拟磁盘。 可以控制这些加密密钥,以及审核对它们的使用。
使用 New-AzKeyVault 创建一个密钥保管库。 若要将 Key Vault 用于磁盘加密,请设置 EnabledForDiskEncryption 参数。 以下示例还会定义资源组名称、Key Vault 名称和位置的变量。 请提供自己的唯一 Key Vault 名称:
$rgName="myResourceGroup"
$vaultName="myuniquekeyvault"
$___location = "EastUS"
New-AzResourceGroup -Name $rgName -Location $___location
New-AzKeyVault -VaultName $vaultName -ResourceGroupName $rgName -Location $___location -EnabledForDiskEncryption
使用现有的密钥保管库
仅当你要将现有的 Key Vault 用于磁盘加密时,才需要执行此步骤。 如果在上一部分中创建了 Key Vault,请跳过此步骤。
可以使用 Set-AzKeyVaultAccessPolicy,在规模集所在的同一订阅和区域中启用现有的 Key Vault 进行磁盘加密。 按如下所示,在 $vaultName 变量中定义现有 Key Vault 的名称:
$vaultName="myexistingkeyvault"
Set-AzKeyVaultAccessPolicy -VaultName $vaultName -EnabledForDiskEncryption
创建规模集
重要
从 2023 年 11 月开始,使用 PowerShell 和 Azure CLI 创建的 VM 规模集将默认为灵活业务流程模式(如果未指定业务流程模式)。 若要详细了解此更改以及你应采取哪些操作,请访问针对 VMSS PowerShell/CLI 客户的中断性变更 - Microsoft 社区中心
首先,使用 Get-Credential 设置 VM 实例的管理员用户名和密码:
$cred = Get-Credential
现在,使用 New-AzVmss 创建虚拟机规模集。 若要将流量分配到单独的 VM 实例,则还要创建负载均衡器。 负载均衡器包含的规则可在 TCP 端口 80 上分配流量,并允许 TCP 端口 3389 上的远程桌面流量,以及 TCP 端口 5985 上的 PowerShell 远程流量:
$vmssName="myScaleSet"
New-AzVmss `
-ResourceGroupName $rgName `
-VMScaleSetName $vmssName `
-OrchestrationMode "flexible" `
-Location $___location `
-VirtualNetworkName "myVnet" `
-SubnetName "mySubnet" `
-PublicIpAddressName "myPublicIPAddress" `
-LoadBalancerName "myLoadBalancer" `
-Credential $cred
启用加密功能
若要在规模集中加密 VM 实例,请先使用 Get-AzKeyVault 获取有关 Key Vault URI 和资源 ID 的某些信息。 然后,可以使用 Set-AzVmssDiskEncryptionExtension 结合这些变量来启动加密过程:
$diskEncryptionKeyVaultUrl=(Get-AzKeyVault -ResourceGroupName $rgName -Name $vaultName).VaultUri
$keyVaultResourceId=(Get-AzKeyVault -ResourceGroupName $rgName -Name $vaultName).ResourceId
Set-AzVmssDiskEncryptionExtension -ResourceGroupName $rgName -VMScaleSetName $vmssName `
-DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $keyVaultResourceId -VolumeType "All"
出现提示时,请键入 y,以便继续对规模集 VM 实例执行磁盘加密过程。
使用 KEK 启用加密以包装密钥
加密虚拟机规模集时,还可以使用密钥加密密钥来增强安全性。
$diskEncryptionKeyVaultUrl=(Get-AzKeyVault -ResourceGroupName $rgName -Name $vaultName).VaultUri
$keyVaultResourceId=(Get-AzKeyVault -ResourceGroupName $rgName -Name $vaultName).ResourceId
$keyEncryptionKeyUrl = (Get-AzKeyVaultKey -VaultName $vaultName -Name $keyEncryptionKeyName).Key.kid;
Set-AzVmssDiskEncryptionExtension -ResourceGroupName $rgName -VMScaleSetName $vmssName `
-DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $keyVaultResourceId `
-KeyEncryptionKeyUrl $keyEncryptionKeyUrl -KeyEncryptionKeyVaultId $keyVaultResourceId -VolumeType "All"
注意
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.net/keys/[kekname]/[kek-unique-id]
查看加密进度
若要检查磁盘加密状态,请使用 Get-AzVmssDiskEncryption:
Get-AzVmssDiskEncryption -ResourceGroupName $rgName -VMScaleSetName $vmssName
加密 VM 实例后,EncryptionSummary 代码会报告 ProvisioningState/succeeded,如以下示例输出所示:
ResourceGroupName : myResourceGroup
VmScaleSetName : myScaleSet
EncryptionSettings :
KeyVaultURL : https://myuniquekeyvault.vault.azure.net/
KeyEncryptionKeyURL :
KeyVaultResourceId : /subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/myuniquekeyvault
KekVaultResourceId :
KeyEncryptionAlgorithm :
VolumeType : All
EncryptionOperation : EnableEncryption
EncryptionSummary[0] :
Code : ProvisioningState/succeeded
Count : 2
EncryptionEnabled : True
EncryptionExtensionInstalled : True
禁用加密功能
如果不再希望使用加密的 VM 实例磁盘,可以使用 Disable-AzVmssDiskEncryption 禁用加密,如下所示:
Disable-AzVmssDiskEncryption -ResourceGroupName $rgName -VMScaleSetName $vmssName
后续步骤
- 在本文中,我们已使用 Azure PowerShell 加密了虚拟机规模集。 也可以使用 Azure CLI 或 Azure 资源管理器模板。
- 如果希望在预配另一个扩展后应用 Azure 磁盘加密,可以使用扩展排序。