使用 Azure CLI 以使用主機上的加密啟用端對端加密
適用於:✔️ Linux VM ✔️ 彈性擴展集
當您啟用主機上的加密時,儲存在 VM 主機上的資料會在待用時加密,並將流量加密至儲存體服務。 如需主機上的加密的概念資訊,以及其他受控磁碟加密類型,請參閱主機上的加密 - VM 資料的端對端加密。
限制
- 支援 4k 磁區大小 Ultra 磁碟和進階 SSD v2。
- 只有在 2023/5/13 之後建立的 512e 磁區大小 Ultra 磁碟和進階 SSD v2 上受支援。
- 針對在此日期之前建立的磁碟,請建立磁碟的快照集,然後使用快照集建立新的磁碟。
- 無法在目前或曾啟用 Azure 磁碟加密的虛擬機器 (VM) 或虛擬機器擴展集上啟用。
- Azure 磁碟加密無法在已啟用主機加密的磁碟上啟用。
- 您可以在現有的虛擬機器擴展集上啟用加密。 不過,只有在啟用加密之後建立的新 VM 才會自動加密。
- 現有的 VM 必須解除配置和重新配置,才能加密。
支援的 VM 大小
可透過程式設計方式提取支援 VM 大小的完整清單。 若要了解如何以程式設計方式進行擷取,請參閱 尋找支援的 VM 大小一節。 升級 VM 大小會導致驗證,以檢查新的 VM 大小是否支援 EncryptionAtHost 功能。
必要條件
您必須先為訂用帳戶啟用功能,才能針對 VM/VMSS 使用 EncryptionAtHost 屬性。 使用下列步驟來為訂用帳戶啟用功能:
- 執行下列命令來為訂用帳戶註冊功能
az feature register --namespace Microsoft.Compute --name EncryptionAtHost
- 請先使用下列命令檢查註冊狀態是否為 [已註冊] (需要幾分鐘的時間),然後再嘗試使用功能。
az feature show --namespace Microsoft.Compute --name EncryptionAtHost
建立資源
注意
本節僅適用於使用客戶自控金鑰的設定。 如果您使用平台代控金鑰,則可跳過範例指令碼一節。
啟用此功能之後,您必須設定 DiskEncryptionSet 和 Azure Key Vault 或 Azure Key Vault 受控 HSM。
Azure Key Vault
建立 Key Vault 時,您必須啟用清除保護。 清除保護可確保已刪除的金鑰在保留期限結束之前,無法永久刪除。 這些設定可防止您因為意外刪除而遺失資料。 使用 Key Vault 來加密受控磁碟時,必須使用這些設定。
重要
對區域請勿混用大小寫,如果您這麼做,當您將其他磁碟指派給 Azure 入口網站中的資源時,可能會發生問題。
subscriptionId=yourSubscriptionID
rgName=yourResourceGroupName
location=westcentralus
keyVaultName=yourKeyVaultName
keyName=yourKeyName
diskEncryptionSetName=yourDiskEncryptionSetName
diskName=yourDiskName
az account set --subscription $subscriptionId
az group create --resource-group $rgName --location $location
az keyvault create -n $keyVaultName \
-g $rgName \
-l $location \
--enable-purge-protection true
az keyvault key create --vault-name $keyVaultName \
-n $keyName \
--protection software
- 建立 DiskEncryptionSet。 您可以將 enable-auto-key-rotation 設定為 true,以啟用金鑰的自動輪替。 當您啟用自動輪替時,系統會自動更新所有受控磁碟、快照集和參考磁碟加密的映像,以在一小時內使用新版本的金鑰。
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 \
--key-url $keyVaultKeyUrl \
--enable-auto-key-rotation false
- 將 DiskEncryptionSet 資源存取權授與金鑰保存庫。
注意
Azure 可能需要幾分鐘的時間,才能在您的 Microsoft Entra ID 中建立 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
Azure Key Vault 受控 HSM
或者,您可以使用受控 HSM 來處理金鑰。
若要這樣做,您必須完成下列必要條件:
- 安裝最新的 Azure CLI,並使用 az login 來登入 Azure 帳戶。
- 建立及設定受控 HSM。
- 將權限指派給使用者,讓他們可以管理您的受控 HSM。
組態
建立受控 HSM 並新增權限之後,請啟用清除保護並建立加密金鑰。
subscriptionId=yourSubscriptionID
rgName=yourResourceGroupName
location=westcentralus
keyVaultName=yourKeyVaultName
keyName=yourKeyName
diskEncryptionSetName=yourDiskEncryptionSetName
diskName=yourDiskName
az account set --subscription $subscriptionId
az keyvault update-hsm --subscription $subscriptionId -g $rgName --hsm-name $keyVaultName --enable-purge-protection true
az keyvault key create --hsm-name $keyVaultName --name $keyName --ops wrapKey unwrapKey --kty RSA-HSM --size 2048
然後,建立 DiskEncryptionSet。
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 \
--key-url $keyVaultKeyUrl \
--enable-auto-key-rotation false
最後,授與對受控 HSM 的 DiskEncryptionSet 存取權。
desIdentity=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [identity.principalId] -o tsv)
az keyvault role assignment create --hsm-name $keyVaultName --role "Managed HSM Crypto Service Encryption User" --assignee $desIdentity --scope /keys
範例指令碼
使用客戶自控金鑰建立已啟用主機上的加密的 VM
使用稍早建立的 DiskEncryptionSet 資源 URI 建立具有受控磁碟的 VM,以使用客戶自控金鑰來加密 OS 和資料磁碟的快取。 暫存磁碟會使用平台代控金鑰進行加密。
rgName=yourRGName
vmName=yourVMName
location=eastus
vmSize=Standard_DS2_v2
image=LinuxImageURN
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=LinuxImageURN
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
更新 VM 以停用主機上的加密
您必須先解除配置 VM,才能停用主機上的加密。
rgName=yourRGName
vmName=yourVMName
az vm update -n $vmName \
-g $rgName \
--set securityProfile.encryptionAtHost=false
使用客戶自控金鑰建立已啟用主機上的加密的虛擬機器擴展集
使用稍早建立的 DiskEncryptionSet 資源 URI 建立具有受控磁碟的虛擬機器擴展集,以使用客戶自控金鑰來加密 OS 和資料磁碟的快取。 暫存磁碟會使用平台代控金鑰進行加密。
重要
自 2023 年 11 月起,如果未指定協調流程模式,則使用 PowerShell 和 Azure CLI 建立的 VM 擴展集會預設為彈性協調流程模式。 如需此變更的詳細資訊,以及您應該採取的動作,請移至針對 VMSS PowerShell/CLI 客戶的中斷性變更 - Microsoft 社群中樞
rgName=yourRGName
vmssName=yourVMSSName
location=westus2
vmSize=Standard_DS3_V2
image=Ubuntu2204
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 $image \
--orchestration-mode flexible \
--admin-username azureuser \
--generate-ssh-keys \
--os-disk-encryption-set $diskEncryptionSetId \
--data-disk-sizes-gb 64 128 \
--data-disk-encryption-sets $diskEncryptionSetId $diskEncryptionSetId
使用平台代控金鑰建立已啟用主機上的加密的虛擬機器擴展集
建立已啟用主機上的加密的虛擬機器擴展集,以使用平台代控金鑰加密 OS/資料磁碟和暫存磁碟的快取。
重要
自 2023 年 11 月起,如果未指定協調流程模式,則使用 PowerShell 和 Azure CLI 建立的 VM 擴展集會預設為彈性協調流程模式。 如需此變更的詳細資訊,以及您應該採取的動作,請移至針對 VMSS PowerShell/CLI 客戶的中斷性變更 - Microsoft 社群中樞
rgName=yourRGName
vmssName=yourVMSSName
location=westus2
vmSize=Standard_DS3_V2
image=Ubuntu2204
az vmss create -g $rgName \
-n $vmssName \
--encryption-at-host \
--image $image \
--orchestration-mode flexible \
--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、在該個別 VM 上停用主機上的加密,然後重新配置 VM。
rgName=yourRGName
vmssName=yourVMName
az vmss update -n $vmssName \
-g $rgName \
--set virtualMachineProfile.securityProfile.encryptionAtHost=false
尋找支援的 VM 大小
不支援舊版 VM 大小。 您可以使用資源 SKU API 或 Azure PowerShell 模組尋找支援的 VM 大小清單。 您無法使用 CLI 找到支援的大小。
呼叫資源 SKU API 時,檢查 EncryptionAtHostSupported
功能是否設定為 True。
{
"resourceType": "virtualMachines",
"name": "Standard_DS1_v2",
"tier": "Standard",
"size": "DS1_v2",
"family": "standardDSv2Family",
"locations": [
"CentralUSEUAP"
],
"capabilities": [
{
"name": "EncryptionAtHostSupported",
"value": "True"
}
]
}
針對 Azure PowerShell 模組,請使用 Get-AzComputeResourceSku 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
}
}
}
下一步
現在您已建立並設定這些資源,接下來即可使用這些資源來保護受控磁碟。 下列連結包含範例指令碼,每個指令碼都有個別的案例,可用來保護受控磁碟。