您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.
使用 Azure CLI 通过主机加密来启用端到端加密
08/24/2020
本文内容
启用主机加密时,存储在 VM 主机上的数据将静态加密,且已加密的数据将流向存储服务。 有关主机加密以及其他托管磁盘加密类型的概念信息,请参阅主机加密 - 为 VM 数据启用端到端加密。
限制
不支持超级磁盘。
如果在你的 VM/虚拟机规模集上启用了 Azure 磁盘加密(使用 bitlocker/VM-Decrypt 的来宾 VM 加密),则无法启用。
无法在启用了主机加密的磁盘上启用 Azure 磁盘加密。
可以在现有的虚拟机规模集上启用加密。 但是,只有启用加密后新建的 VM 才会自动加密。
现有 VM 只有在经过释放和重新分配后才能加密。
支持临时 OS 磁盘,但仅支持平台管理的密钥。
支持的 VM 大小
所有最新一代的 VM,无论容量多大,都支持主机加密:
类型
不支持
支持
常规用途
Dv3, Dv2, Av2
B、DSv2、Dsv3、DC、DCv2、Dav4、Dasv4、Ddv4、Ddsv4
计算优化
Fsv2
内存优化
Ev3
Esv3、M、Mv2、Eav4、Easv4、Edv4、Edsv4
存储优化
Ls、Lsv2(NVMe 磁盘未加密)
GPU
NC、NV
NCv2、NCv3、ND、NVv3、NVv4、NDv2(预览版)
高性能计算
H
HB、HC、HBv2
前几代
F、A、D、L、G
DS、GS、Fs、NVv2
可以通过编程方式拉取受支持的 VM 大小的完整列表。 若要了解如何以编程方式检索它们,请参阅查找支持的 VM 大小部分。
升级 VM 大小将导致进行验证,以检查新 VM 大小是否支持 EncryptionAtHost 功能。
先决条件
必须先为订阅启用此功能,然后才能使用 VM/VMSS 的 EncryptionAtHost 属性。 请按照以下步骤为订阅启用此功能:
执行以下命令,为订阅注册此功能
az feature register --namespace Microsoft.Compute --name EncryptionAtHost
在试用该功能之前,请使用以下命令检查注册状态是否为“已注册”(需要几分钟)。
az feature show --namespace Microsoft.Compute --name EncryptionAtHost
创建 Azure Key Vault 和 DiskEncryptionSet
启用该功能后,需要设置 Azure Key Vault 和 DiskEncryptionSet(如果尚未设置)。
确保已安装了最新的 Azure CLI 并已使用 az login 登录到 Azure 帐户。
创建 Azure Key Vault 和加密密钥的实例。
创建 Key Vault 实例时,必须启用软删除和清除保护。 软删除可确保 Key Vault 在给定的保留期(默认为 90 天)内保留已删除的密钥。 清除保护可确保在保留期结束之前,无法永久删除已删除的密钥。 这些设置可防止由于意外删除而丢失数据。 使用 Key Vault 加密托管磁盘时,这些设置是必需的。
重要
不要对区域使用混合大小写,如果这样做,则在将其他磁盘分配到 Azure 门户中的资源时可能会遇到问题。
subscriptionId=yourSubscriptionID
rgName=yourResourceGroupName
location=westcentralus
keyVaultName=yourKeyVaultName
keyName=yourKeyName
diskEncryptionSetName=yourDiskEncryptionSetName
diskName=yourDiskName
az account set --subscription $subscriptionId
az keyvault create -n $keyVaultName -g $rgName -l $location --enable-purge-protection true --enable-soft-delete true
az keyvault key create --vault-name $keyVaultName -n $keyName --protection software
创建一个 DiskEncryptionSet 实例。
keyVaultId=$(az keyvault show --name $keyVaultName --query [id] -o tsv)
keyVaultKeyUrl=$(az keyvault key show --vault-name $keyVaultName --name $keyName --query [key.kid] -o tsv)
az disk-encryption-set create -n $diskEncryptionSetName -l $location -g $rgName --source-vault $keyVaultId --key-url $keyVaultKeyUrl
授予对密钥保管库的 DiskEncryptionSet 资源访问权限。
备注
Azure 可能需要几分钟时间才能在 Azure Active Directory 中创建 DiskEncryptionSet 的标识。 如果在运行以下命令时收到类似于“找不到 Active Directory 对象”的错误,请等待几分钟,然后重试。
desIdentity=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [identity.principalId] -o tsv)
az keyvault set-policy -n $keyVaultName -g $rgName --object-id $desIdentity --key-permissions wrapkey unwrapkey get
示例
使用客户管理的密钥创建 VM,并启用主机加密。
使用之前创建的 DiskEncryptionSet 的资源 URI 创建包含托管磁盘的 VM,以便使用客户管理的密钥加密 OS 和数据磁盘的缓存。 临时磁盘通过平台管理的密钥加密。
rgName=yourRGName
vmName=yourVMName
location=eastus
vmSize=Standard_DS2_v2
image=UbuntuLTS
diskEncryptionSetName=yourDiskEncryptionSetName
diskEncryptionSetId=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [id] -o tsv)
az vm create -g $rgName \
-n $vmName \
-l $location \
--encryption-at-host \
--image $image \
--size $vmSize \
--generate-ssh-keys \
--os-disk-encryption-set $diskEncryptionSetId \
--data-disk-sizes-gb 128 128 \
--data-disk-encryption-sets $diskEncryptionSetId $diskEncryptionSetId
使用平台管理的密钥创建 VM,并启用主机加密。
创建一个 VM,并启用主机加密,以便使用平台管理的密钥加密 OS/数据磁盘和临时磁盘的缓存。
rgName=yourRGName
vmName=yourVMName
location=eastus
vmSize=Standard_DS2_v2
image=UbuntuLTS
az vm create -g $rgName \
-n $vmName \
-l $location \
--encryption-at-host \
--image $image \
--size $vmSize \
--generate-ssh-keys \
--data-disk-sizes-gb 128 128 \
更新 VM 以启用主机加密。
rgName=yourRGName
vmName=yourVMName
az vm update -n $vmName \
-g $rgName \
--set securityProfile.encryptionAtHost=true
检查 VM 的主机加密状态
rgName=yourRGName
vmName=yourVMName
az vm show -n $vmName \
-g $rgName \
--query [securityProfile.encryptionAtHost] -o tsv
使用客户管理的密钥创建虚拟机规模集,并启用主机加密。
使用之前创建的 DiskEncryptionSet 的资源 URI 创建包含托管磁盘的虚拟机规模集,以便使用客户管理的密钥加密 OS 和数据磁盘的缓存。 临时磁盘通过平台管理的密钥加密。
rgName=yourRGName
vmssName=yourVMSSName
location=westus2
vmSize=Standard_DS3_V2
image=UbuntuLTS
diskEncryptionSetName=yourDiskEncryptionSetName
diskEncryptionSetId=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [id] -o tsv)
az vmss create -g $rgName \
-n $vmssName \
--encryption-at-host \
--image UbuntuLTS \
--upgrade-policy automatic \
--admin-username azureuser \
--generate-ssh-keys \
--os-disk-encryption-set $diskEncryptionSetId \
--data-disk-sizes-gb 64 128 \
--data-disk-encryption-sets $diskEncryptionSetId $diskEncryptionSetId
使用平台管理的密钥创建虚拟机规模集,并启用主机加密。
创建一个虚拟机规模集,并启用主机加密,以便使用平台管理的密钥加密 OS/数据磁盘和临时磁盘的缓存。
rgName=yourRGName
vmssName=yourVMSSName
location=westus2
vmSize=Standard_DS3_V2
image=UbuntuLTS
az vmss create -g $rgName \
-n $vmssName \
--encryption-at-host \
--image UbuntuLTS \
--upgrade-policy automatic \
--admin-username azureuser \
--generate-ssh-keys \
--data-disk-sizes-gb 64 128 \
更新虚拟机规模集以启用主机加密。
rgName=yourRGName
vmssName=yourVMName
az vmss update -n $vmssName \
-g $rgName \
--set virtualMachineProfile.securityProfile.encryptionAtHost=true
检查虚拟机规模集的主机加密状态
rgName=yourRGName
vmssName=yourVMName
az vmss show -n $vmssName \
-g $rgName \
--query [virtualMachineProfile.securityProfile.encryptionAtHost] -o tsv
找到支持的 VM 大小
不支持“旧的 VM 大小”。 可以通过以下任一方法查找支持的 VM 大小列表:
调用资源 SKU API 并检查 EncryptionAtHostSupported 功能是否设置为 True。
{
"resourceType": "virtualMachines",
"name": "Standard_DS1_v2",
"tier": "Standard",
"size": "DS1_v2",
"family": "standardDSv2Family",
"locations": [
"CentralUSEUAP"
],
"capabilities": [
{
"name": "EncryptionAtHostSupported",
"value": "True"
}
]
}
或者,调用 AzComputeResourceSku PowerShell cmdlet。
$vmSizes=Get-AzComputeResourceSku | where{$_.ResourceType -eq 'virtualMachines' -and $_.Locations.Contains('CentralUSEUAP')}
foreach($vmSize in $vmSizes)
{
foreach($capability in $vmSize.capabilities)
{
if($capability.Name -eq 'EncryptionAtHostSupported' -and $capability.Value -eq 'true')
{
$vmSize
}
}
}
后续步骤
创建并配置这些资源之后,可以使用它们来保护托管磁盘。 以下链接包含示例脚本,每个脚本都有各自的方案,可用于保护托管磁盘。