Windows VM 上的 Azure 磁碟加密案例

適用於:✔️ Windows VM ✔️ 彈性擴展集

適用於 Windows 虛擬機器 (VM) 的 Azure 磁碟加密會使用 Windows 的 BitLocker 功能,提供作業系統磁碟和資料磁碟的完整磁碟加密。 此外,當 VolumeType 參數為 All 時,也會提供暫存磁碟的加密。

Azure 磁碟加密會與 Azure Key Vault 整合,協助您控制及管理磁碟加密金鑰與祕密。 如需服務的概觀,請參閱適用於 Windows VM 的 Azure 磁碟加密

必要條件

您只能將磁碟加密套用到受支援 VM 大小和作業系統的虛擬機器。 您也必須符合下列必要條件:

限制

如果您先前曾使用 Azure 磁碟加密搭配 Microsoft Entra ID 來加密 VM,則必須繼續使用此選項來加密您的 VM。 如需詳細資料,請參閱將 Azure 磁碟加密與 Microsoft Entra ID 搭配使用 (舊版)

您應該先建立快照集和/或建立備份再將磁碟加密。 擁有備份可確保在加密期間發生任何非預期的失敗時,能有復原選項可供選擇。 具有受控磁碟的 VM 需要有備份,才能進行加密。 在建立備份後,您可以使用 Set-AzVMDiskEncryptionExtension Cmdlet 並指定 -skipVmBackup 參數來加密受控磁碟。 如需如何備份和還原已加密 VM 的詳細資訊,請參閱備份和還原加密的 Azure VM

加密或停用加密功能,可能會導致 VM 重新啟動。

Azure 磁碟加密不適用於下列案例、功能和技術:

  • 將基本層 VM 或透過傳統 VM 建立方法所建立的 VM 加密。
  • 加密已設定軟體型 RAID 系統的 VM。
  • 加密已設定儲存空間直接存取 (S2D) 的 VM、或已設定 Windows 儲存空間且為 2016 之前版本的 Windows Server。
  • 與內部部署金鑰管理系統整合。
  • Azure 檔案 (共用檔案系統)。
  • 網路檔案系統 (NFS)。
  • 動態磁碟區。
  • 為每個容器建立動態磁碟區的 Windows Server 容器。
  • 暫時性 OS 磁碟。
  • iSCSI 磁碟。
  • 加密共用/分散式檔案系統,例如 (但不限於):DFS、GFS、DRDB 和 CephFS。
  • 將已加密的 VM 移到另一個訂閱或區域。
  • 建立已加密 VM 的映像或快照集,並用於部署其他 VM。
  • 具有寫入加速器磁碟的 M 系列 VM。
  • 將 ADE 套用到具有主機加密磁碟,或使用客戶自控金鑰進行伺服器端加密 (SSE + CMK) 的 VM。 將 SSE + CMK 套用到資料磁碟,或者將已設定 SSE + CMK 的資料磁碟新增到使用 ADE 加密的 VM,也是不支援的情節。
  • 將已使用 ADE 加密、或曾使用 ADE 加密的 VM,移轉到主機加密使用客戶自控金鑰的伺服器端加密
  • 加密容錯移轉叢集中的 VM。
  • Azure Ultra 磁碟的加密。
  • 進階 SSD v2 磁碟的加密。
  • 將訂用帳戶中具有使用 DENY 效果啟用 Secrets should have the specified maximum validity period 原則的 VM 加密。
  • 將訂用帳戶中具有使用 DENY 效果啟用 Key Vault secrets should have an expiration date 原則的 VM 加密

安裝工具並連線至 Azure

Azure 磁碟加密可以透過 Azure CLIAzure PowerShell 來加以啟用及管理。 若要這麼做,您必須在本機安裝工具,並連線到您的 Azure 訂用帳戶。

Azure CLI

Azure CLI 2.0 是命令列工具,可用於管理 Azure 資源。 CLI 的設計是要讓您能夠彈性地查詢資料、以非封鎖處理序的形式支援長時間執行作業,並輕鬆地撰寫指令碼。 您可以遵循安裝 Azure CLI 中的步驟,將其安裝到本機。

若要使用 Azure CLI 登入您的 Azure 帳戶,請使用 az login 命令。

az login

如果您想要選取用於登入的租用戶,請使用:

az login --tenant <tenant>

如果您有多個訂用帳戶並想要指定特定訂用帳戶,請使用 az account list 取得訂用帳戶清單並以 az account set 進行指定。

az account list
az account set --subscription "<subscription name or ID>"

如需詳細資訊,請參閱開始使用 Azure CLI 2.0

Azure PowerShell

Azure PowerShell az 模組提供了一組 Cmdlet,其會使用 Azure Resource Manager 模型來管理 Azure 資源。 您可以在瀏覽器中搭配 Azure Cloud Shell 來使用此模組,也可以使用安裝 Azure PowerShell 模組中的指示將其安裝到本機電腦上。

如果您已將它安裝在本機上,請確定您是使用最新版的 Azure PowerShell SDK 版本來設定 Azure 磁碟加密。 下載最新版的 Azure PowerShell 版本

若要使用 Azure PowerShell 登入您的 Azure 帳戶,請使用 Connect-AzAccount Cmdlet。

Connect-AzAccount

如果您有多個訂用帳戶,而且想要指定其中一個,請使用 Get-AzSubscription Cmdlet 來列出這些訂用帳戶,後面接著 Set-AzContext Cmdlet:

Set-AzContext -Subscription <SubscriptionId>

執行 Get-AzContext Cmdlet 能確認所選取的訂用帳戶是否正確。

若要確認是否已安裝 Azure 磁碟加密 Cmdlet,請使用 Get-command Cmdlet:

Get-command *diskencryption*

如需詳細資訊,請參閱開始使用 Azure PowerShell

在現有或執行中的 Windows VM 上啟用加密

在這個案例中,您可以使用 Resource Manager 範本、PowerShell Cmdlet 或 CLI 命令啟用加密。 若您需要虛擬機器擴充功能之結構描述資訊,請參閱 Windows 擴充功能的 Azure 磁碟加密一文。

使用 Azure PowerShell 在現有或執行中的 VM 上啟用加密

在 Azure 中使用 Set-AzVMDiskEncryptionExtension Cmdlet 以在執行 IaaS 的虛擬機器上啟用加密。

  • 加密執行中的 VM:下面的指令碼會將您的變數初始化,並執行 Set-AzVMDiskEncryptionExtension Cmdlet。 資源群組、VM 和金鑰保存庫應該已經建立為必要條件。 以您的值取代 MyKeyVaultResourceGroup、MyVirtualMachineResourceGroup、MySecureVM 和 MySecureVault。

     $KVRGname = 'MyKeyVaultResourceGroup';
     $VMRGName = 'MyVirtualMachineResourceGroup';
     $vmName = 'MySecureVM';
     $KeyVaultName = 'MySecureVault';
     $KeyVault = Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGname;
     $diskEncryptionKeyVaultUrl = $KeyVault.VaultUri;
     $KeyVaultResourceId = $KeyVault.ResourceId;
    
     Set-AzVMDiskEncryptionExtension -ResourceGroupName $VMRGname -VMName $vmName -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId;
    
  • 使用 KEK 加密執行中的 VM:

    $KVRGname = 'MyKeyVaultResourceGroup';
    $VMRGName = 'MyVirtualMachineResourceGroup';
    $vmName = 'MyExtraSecureVM';
    $KeyVaultName = 'MySecureVault';
    $keyEncryptionKeyName = 'MyKeyEncryptionKey';
    $KeyVault = Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGname;
    $diskEncryptionKeyVaultUrl = $KeyVault.VaultUri;
    $KeyVaultResourceId = $KeyVault.ResourceId;
    $keyEncryptionKeyUrl = (Get-AzKeyVaultKey -VaultName $KeyVaultName -Name $keyEncryptionKeyName).Key.kid;
    
    Set-AzVMDiskEncryptionExtension -ResourceGroupName $VMRGname -VMName $vmName -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId -KeyEncryptionKeyUrl $keyEncryptionKeyUrl -KeyEncryptionKeyVaultId $KeyVaultResourceId;
    
    

    注意

    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]

  • 確認磁碟已加密: 若要檢查 IaaS VM 的加密狀態,請使用 Get-AzVmDiskEncryptionStatus Cmdlet。

    Get-AzVmDiskEncryptionStatus -ResourceGroupName 'MyVirtualMachineResourceGroup' -VMName 'MySecureVM'
    

若要停用加密,請參閱停用加密並移除加密延伸模組 (英文)。

使用 Azure CLI 在現有或執行中的 VM 上啟用加密

在 Azure 中使用 az vm encryption enable 命令以在執行中的 IaaS 虛擬機器上啟用加密。

  • 加密執行中的 VM:

    az vm encryption enable --resource-group "MyVirtualMachineResourceGroup" --name "MySecureVM" --disk-encryption-keyvault "MySecureVault" --volume-type [All|OS|Data]
    
  • 使用 KEK 加密執行中的 VM:

    az vm encryption enable --resource-group "MyVirtualMachineResourceGroup" --name "MySecureVM" --disk-encryption-keyvault  "MySecureVault" --key-encryption-key "MyKEK_URI" --key-encryption-keyvault "MySecureVaultContainingTheKEK" --volume-type [All|OS|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.net/keys/[kekname]/[kek-unique-id]

  • 確認磁碟已加密:若要檢查 IaaS VM 的加密狀態,請使用 az vm encryption show 命令。

    az vm encryption show --name "MySecureVM" --resource-group "MyVirtualMachineResourceGroup"
    

若要停用加密,請參閱停用加密並移除加密延伸模組 (英文)。

使用 Resource Manager 範本

您可以使用 Resource Manager 範本來加密執行中的 Windows VM,以在 Azure 中現有或執行中的 IaaS Windows VM 上啟用磁碟加密。

  1. 在 Azure 快速入門範本中,按一下 [部署至 Azure]

  2. 選取訂用帳戶、資源群組、位置、設定、法律條款及合約。 按一下 [購買],以在現有或執行中的 IaaS VM 上啟用加密。

下表列出現有或執行中 VM 的 Resource Manager 範本參數︰

參數 描述
vmName 要執行加密作業的 VM 名稱。
keyVaultName 應上傳 BitLocker 金鑰的金鑰保存庫名稱。 您可以使用 Cmdlet (Get-AzKeyVault -ResourceGroupName <MyKeyVaultResourceGroupName>). Vaultname 或 Azure CLI 命令 az keyvault list --resource-group "MyKeyVaultResourceGroup" 來取得
keyVaultResourceGroup 包含金鑰保存庫的資源群組名稱
keyEncryptionKeyURL 金鑰加密金鑰的 URL,格式為 https://<keyvault-name>.vault.azure.net/key/<key-name>。 如果您不想使用 KEK,請將此字段保留空白。
volumeType 執行加密作業所在磁碟區的類型。 有效值為 OSDataAll
forceUpdateTag 每次需要強制執行作業時傳入唯一的值,例如 GUID。
resizeOSDisk 是否應該先將 OS 分割區調整大小以佔用完整的 OS VHD,然後才分割系統磁碟區。
location 所有資源的位置。

在 Lsv2 VM 的 NVMe 磁碟上啟用加密

此情節說明針對 Lsv2 系列 VM 在 NVMe 磁碟上啟用 Azure 磁碟加密。 Lsv2 系列以本機 NVMe 儲存體為特色。 本機 NVMe 磁碟是暫時性的,如果您停止/解除配置您的 VM,這些磁碟上的資料將會遺失 (請參閱:Lsv2 系列)。

若要在 NVMe 磁碟上啟用加密:

  1. 將 NVMe 磁碟初始化,並建立 NTFS 磁碟區。
  2. 在已將 VolumeType 參數設定為 All 的 VM 上啟用加密。 這會為所有 OS 和資料磁碟啟用加密,包括由 NVMe 磁碟支援的磁碟區。 如需詳細資訊,請參閱在現有或執行中的 Windows VM 上啟用加密 (部分機器翻譯)。

在下列情節中,加密會保存在 NVMe 磁碟上:

  • VM 重新啟動
  • 虛擬機器擴展集重新安裝映像
  • 交換 OS

在下列情節中,NVMe 磁碟初始化將會取消:

  • 解除配置後啟動 VM
  • 服務修復
  • Backup

在這些情節中,NVMe 磁碟必須在 VM 啟動後進行初始化。 若要在 NVMe 磁碟上啟用加密,請在 NVMe 磁碟初始化之後,執行命令以再次啟用 Azure 磁碟加密。

除了限制一節中所列的情節之外,下列情節不支援 NVMe 磁碟加密:

從客戶加密的 VHD 和加密金鑰建立的新 IaaS VM

在此情節中,您可以使用 PowerShell Cmdlet 或 CLI 命令,從預先加密的 VHD 和相關聯的加密金鑰建立新的 VM。

請使用準備已預先加密的 Windows VHD中的指示。 映像建立之後,您可以使用下一節的步驟來建立加密的 Azure VM。

透過 Azure PowerShell 加密包含預先加密 VHD 的 VM

您可以使用 PowerShell Cmdlet Set-AzVMOSDisk 在加密的 VHD 上啟用磁碟加密。 下列範例會提供一些常見的參數。

$VirtualMachine = New-AzVMConfig -VMName "MySecureVM" -VMSize "Standard_A1"
$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -Name "SecureOSDisk" -VhdUri "os.vhd" Caching ReadWrite -Windows -CreateOption "Attach" -DiskEncryptionKeyUrl "https://mytestvault.vault.azure.net/secrets/Test1/514ceb769c984379a7e0230bddaaaaaa" -DiskEncryptionKeyVaultId "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myKVresourcegroup/providers/Microsoft.KeyVault/vaults/mytestvault"
New-AzVM -VM $VirtualMachine -ResourceGroupName "MyVirtualMachineResourceGroup"

在新增的資料磁碟上啟用加密

您可以使用 PowerShell 或透過 Azure 入口網站將新的磁碟新增至 Windows VM

注意

新增的資料磁碟加密必須透過 Powershell 或 CLI 才能啟用。 目前,Azure 入口網站不支援在新磁碟上啟用加密。

透過 Azure PowerShell 在新增的磁碟上啟用加密

使用 PowerShell 來加密 Windows VM 的新磁碟時,應指定新的序列版本。 序列版本必須是唯一的。 下列指令碼會產生序列版本的 GUID。 在某些情況下,Azure 磁碟加密擴充功能可能會自動加密新增的資料磁碟。 當 VM 在新磁碟上線後重新開機時,通常會發生自動加密。 原因通常是磁碟加密之前在 VM 上執行時,將磁碟區類型指定為 "All"。 如果剛剛新增的資料磁碟上發生自動加密,建議使用新的序列版本再次執行 Set-AzVmDiskEncryptionExtension Cmdlet。 如果新的資料磁碟自動加密,但您不想要加密,請先將所有磁碟機解密,再以磁碟區類型指定為 OS 的新序列版本重新加密。

  • 加密執行中的 VM:下面的指令碼會將您的變數初始化,並執行 Set-AzVMDiskEncryptionExtension Cmdlet。 資源群組、VM 和金鑰保存庫應該已經建立為必要條件。 以您的值取代 MyKeyVaultResourceGroup、MyVirtualMachineResourceGroup、MySecureVM 和 MySecureVault。 此範例會對 -VolumeType 參數使用 "All",其同時包含 OS 和資料磁碟區。 如果您只想要加密 OS 磁碟區,則請對 -VolumeType 參數使用 "OS"。

     $KVRGname = 'MyKeyVaultResourceGroup';
     $VMRGName = 'MyVirtualMachineResourceGroup';
     $vmName = 'MySecureVM';
     $KeyVaultName = 'MySecureVault';
     $KeyVault = Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGname;
     $diskEncryptionKeyVaultUrl = $KeyVault.VaultUri;
     $KeyVaultResourceId = $KeyVault.ResourceId;
     $sequenceVersion = [Guid]::NewGuid();
    
     Set-AzVMDiskEncryptionExtension -ResourceGroupName $VMRGname -VMName $vmName -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId -VolumeType "All" –SequenceVersion $sequenceVersion;
    
  • 使用 KEK 加密執行中的 VM:此範例會對 -VolumeType 參數使用 "All",其同時包含 OS 和資料磁碟區。 如果您只想要加密 OS 磁碟區,則請對 -VolumeType 參數使用 "OS"。

    $KVRGname = 'MyKeyVaultResourceGroup';
    $VMRGName = 'MyVirtualMachineResourceGroup';
    $vmName = 'MyExtraSecureVM';
    $KeyVaultName = 'MySecureVault';
    $keyEncryptionKeyName = 'MyKeyEncryptionKey';
    $KeyVault = Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGname;
    $diskEncryptionKeyVaultUrl = $KeyVault.VaultUri;
    $KeyVaultResourceId = $KeyVault.ResourceId;
    $keyEncryptionKeyUrl = (Get-AzKeyVaultKey -VaultName $KeyVaultName -Name $keyEncryptionKeyName).Key.kid;
    $sequenceVersion = [Guid]::NewGuid();
    
    Set-AzVMDiskEncryptionExtension -ResourceGroupName $VMRGname -VMName $vmName -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId -KeyEncryptionKeyUrl $keyEncryptionKeyUrl -KeyEncryptionKeyVaultId $KeyVaultResourceId -VolumeType "All" –SequenceVersion $sequenceVersion;
    
    

    注意

    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]

透過 Azure CLI 在新增的磁碟上啟用加密

當您執行命令來啟用加密時,Azure CLI 命令會自動為您提供新的序列版本。 此範例會對 volume-type 參數使用 "All"。 如果您只要加密 OS 磁碟,則可能需要將 volume-type 參數變更為 OS。 在啟用加密時,與 PowerShell 語法不同,CLI 不需要使用者提供唯一的序列版本。 CLI 為自動產生並使用其唯一序列版本的值。

  • 加密執行中的 VM:

    az vm encryption enable --resource-group "MyVirtualMachineResourceGroup" --name "MySecureVM" --disk-encryption-keyvault "MySecureVault" --volume-type "All"
    
  • 使用 KEK 加密執行中的 VM:

    az vm encryption enable --resource-group "MyVirtualMachineResourceGroup" --name "MySecureVM" --disk-encryption-keyvault  "MySecureVault" --key-encryption-key "MyKEK_URI" --key-encryption-keyvault "MySecureVaultContainingTheKEK" --volume-type "All"
    

停用加密並移除加密延伸模組

您可以停用 Azure 磁碟加密延伸模組,也可以移除 Azure 磁碟加密延伸模組。 這兩者是不同的作業。

若要移除 ADE,建議您先停用加密,然後再移除延伸模組。 如果您移除加密延伸模組而不將其停用,磁碟仍會加密。 如果您在移除延伸模組之後停用加密,則會重新安裝延伸模組 (以執行解密作業),而且將必須再次移除。

停用加密

您可以使用 Azure PowerShell、Azure CLI 或 Resource Manager 範本來停用加密。 停用加密不會移除延伸模組 (請參閱移除加密延伸模組) (英文)。

警告

當 OS 和資料磁碟都已加密時,停用資料磁碟加密可能會產生未預期的結果。 改為停用所有磁碟上的加密。

停用加密將會啟動 BitLocker 的背景程序來解密磁碟。 應該給予足夠的時間完成此程序,再嘗試重新啟用加密。

  • 使用 Azure PowerShell 停用磁碟加密: 若要停用加密,請使用 Disable-AzVMDiskEncryption Cmdlet。

    Disable-AzVMDiskEncryption -ResourceGroupName "MyVirtualMachineResourceGroup" -VMName "MySecureVM" -VolumeType "all"
    
  • 透過 Azure CLI 停用加密:若要停用加密,請使用 az vm encryption disable 命令。

    az vm encryption disable --name "MySecureVM" --resource-group "MyVirtualMachineResourceGroup" --volume-type "all"
    
  • 透過 Resource Manager 範本停用加密:

    1. 在執行中的 Windows VM 上停用磁碟加密範本,按一下 [部署至 Azure]
    2. 選取訂用帳戶、資源群組、位置、VM、磁碟區類型、法律條款及合約。
    3. 按一下 [購買] 以在執行中的 Windows VM 上停用磁碟加密。

移除加密延伸模組

如果您想要解密磁碟並移除加密延伸模組,您必須先停用加密,才能移除延伸模組;請參閱停用加密 (英文)。

您可以使用 Azure PowerShell 或 Azure CLI 移除加密延伸模組。

  • 停用 Azure PowerShell 的磁碟加密:若要移除加密,請使用 Remove-AzVMDiskEncryptionExtension Cmdlet。

    Remove-AzVMDiskEncryptionExtension -ResourceGroupName "MyVirtualMachineResourceGroup" -VMName "MySecureVM"
    
  • 透過 Azure CLI 停用加密:若要移除加密,請使用 az vm extension delete 命令。

    az vm extension delete -g "MyVirtualMachineResourceGroup" --vm-name "MySecureVM" -n "AzureDiskEncryption"
    

下一步