Share via


使用 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 VaultAzure Key Vault 受控 HSM

Azure Key Vault

  • 請安裝最新的 Azure CLI,並使用 az login 來登入 Azure 帳戶。
  • 建立 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 來處理金鑰。

若要這樣做,您必須完成下列必要條件:

組態

建立受控 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

        }

    }
}

下一步

現在您已建立並設定這些資源,接下來即可使用這些資源來保護受控磁碟。 下列連結包含範例指令碼,每個指令碼都有個別的案例,可用來保護受控磁碟。

Azure Resource Manager 範本範例