練習 - 為現有的 VM 磁碟加密

已完成

假設您正在為新創公司開發財務管理應用程式。 您想要確保客戶的所有資料都受到保護。 因此,您決定在裝載此應用程式的伺服器上,跨所有作業系統和資料磁碟實作 Azure 磁碟加密 (ADE)。 依據您的合規性需求,您也必須負責自行管理加密金鑰。

在此單元中,您會加密現有虛擬機器 (VM) 上的磁碟,並使用您自己的 Azure Key Vault 管理加密金鑰。

準備環境

您會從在 Azure VM 中部署新的 Windows VM 開始。

部署 Windows VM

若要建立及部署新的 Windows VM,請使用右側的 Azure PowerShell 視窗。

  1. 若要保留選取的位置,請定義 PowerShell 變數。 使用與資源群組相同的區域。

    $location = (Get-AzResourceGroup -name <rgn>[sandbox Resource Group]</rgn>).location
    

    提示

    您可以使用 [複製] 按鈕將命令複製到剪貼簿。 要貼上命令,請在 Cloud Shell 終端中,以滑鼠右鍵按一下新行,然後選取 [貼上],或使用 Shift+Insert 鍵盤快速鍵 (在 macOS 上為 ⌘+V)。

  2. 接下來,再定義一些便利的變數,以擷取 VM 與「資源群組」的「名稱」。 您在此處使用的是預先建立的資源群組。 一般來說,您會在訂用帳戶中使用 New-AzResourceGroup 建立「新的」資源群組。

    $vmName = "fmdata-vm01"
    $rgName = "<rgn>[sandbox Resource Group]</rgn>"
    
  3. 若要建立新的 VM,請使用 New-AzVm

    New-AzVm `
        -ResourceGroupName $rgName `
        -Name $vmName `
        -Location $location `
        -OpenPorts 3389
    

    當 Cloud Shell 提示您時,請輸入 VM 的使用者名稱與密碼。 此資訊會作為 VM 建立的初始帳戶。

    注意

    由於我們未提供許多選項,所以此命令會使用一些預設值。 具體而言,這會建立大小設定為 Standard_DS1_v2Windows 2016 Server 映像。 請記住,如果您決定要指定 VM 大小,基本層 VM 不支援 ADE。

  4. 在 VM 完成部署之後,請將 VM 詳細資料擷取到變數中。 您可以使用此變數,探索所建立的項目:

    $vm = Get-AzVM -Name $vmName -ResourceGroupName $rgName
    
  5. 您可以使用下列程式碼來確認作業系統磁碟是否連結至 VM:

    $vm.StorageProfile.OSDisk
    
    OsType                  : Windows
    EncryptionSettings      :
    Name                    : fmdata-vm01_OsDisk_1_6bcf8dcd49794aa785bad45221ec4433
    Vhd                     :
    Image                   :
    Caching                 : ReadWrite
    WriteAcceleratorEnabled :
    CreateOption            : FromImage
    DiskSizeGB              : 127
    ManagedDisk             : Microsoft.Azure.Management.Compute.Models.ManagedDiskP
                              arameters
    
  6. 檢查作業系統磁碟 (和任何資料磁碟) 上目前的加密狀態。

    Get-AzVmDiskEncryptionStatus  `
        -ResourceGroupName $rgName `
        -VMName $vmName
    

    請注意,磁碟目前未加密

    OsVolumeEncrypted          : NotEncrypted
    DataVolumesEncrypted       : NotEncrypted
    OsVolumeEncryptionSettings :
    ProgressMessage            : No Encryption extension or metadata found on the VM
    

讓我們改變這點。

使用 Azure 磁碟加密來加密 VM 磁碟

此資料需要保護,讓我們加密磁碟。 您應該記得所需執行的幾個步驟:

  1. 建立金鑰保存庫。

  2. 設定金鑰保存庫以支援磁碟加密。

  3. 通知 Azure 使用儲存在金鑰保存庫中的金鑰來加密 VM 磁碟。

提示

我們將逐步解說各個步驟,但當您在自己的訂用帳戶中執行此工作時,可使用此課程模組的「摘要」區段中連結的便利 PowerShell 指令碼。

建立金鑰保存庫

若要建立 Azure Key Vault,必須啟用訂用帳戶中的服務。 您只需要啟用服務一次。

提示

根據您的訂用帳戶,您可能需要使用 Register-AzResourceProvider Cmdlet 來啟用 Microsoft.KeyVault。 這在 Azure 沙箱訂用帳戶中並非必要。

  1. 決定新金鑰保存庫的名稱。 名稱必須是唯一且介於 3 到 24 個字元之間,其中必須包含數字、字母和虛線。 請嘗試在結尾加上一些亂數,取代下面的 1234

    $keyVaultName = "mvmdsk-kv-1234"
    
  2. 使用 New-AzKeyVault 建立 Azure Key Vault:

    • 務必將其放在和您的 VM 相同的資源群組與位置。
    • 啟用金鑰保存庫來與磁碟加密搭配使用。
    • 指定唯一的金鑰保存庫名稱。
    New-AzKeyVault -VaultName $keyVaultName `
        -Location $location `
        -ResourceGroupName $rgName `
        -EnabledForDiskEncryption
    

    您會收到此命令的警告,指出沒有任何使用者有權存取。

    WARNING: Access policy is not set. No user or app have access permission to use this vault. This warning can occur if the vault was created by a service principal. To set access policies, use Set-AzKeyVaultAccessPolicy.
    

    此警告不會造成任何問題,因為您只是使用保存庫來儲存 VM 的加密金鑰,使用者不需要存取此資料。

將磁碟加密

您幾乎準備好要加密磁碟了。 在您執行之前,有些關於建立備份的警告要注意。

重要

如果這是生產系統,則需要使用 Azure 備份或透過建立快照集來備份受控磁碟。 您可以在 Azure 入口網站中或透過命令列建立快照集。 在 PowerShell 中,您會使用 New-AzSnapshot Cmdlet。 因為這是簡單的練習,而且此資料會在您完成之後捨棄,所以您要跳過此步驟。

  1. 若要保留金鑰保存庫資訊,請定義變數:

    $keyVault = Get-AzKeyVault `
        -VaultName $keyVaultName `
        -ResourceGroupName $rgName
    
  2. 接下來,若要加密 VM 磁碟,請使用 Set-AzVmDiskEncryptionExtension Cmdlet

    • VolumeType 參數可讓您指定要加密的磁碟:[All | OS | Data]。 預設為 [全部]。 您只能加密某些 Linux 發行版本的資料磁碟。
    • 如果沒有快照集,您可以提供受控磁碟的 SkipVmBackup 旗標。
    Set-AzVmDiskEncryptionExtension `
        -ResourceGroupName $rgName `
        -VMName $vmName `
        -VolumeType All `
        -DiskEncryptionKeyVaultId $keyVault.ResourceId `
        -DiskEncryptionKeyVaultUrl $keyVault.VaultUri `
        -SkipVmBackup
    
  3. 此 Cmdlet 會警告您,VM 必須離線,而且工作可能需要幾分鐘才能完成。 請讓其繼續進行:

    Enable AzureDiskEncryption on the VM
    This cmdlet prepares the VM and enables encryption which may reboot the machine and takes 10-15 minutes to
    finish. Please save your work on the VM before confirming. Do you want to continue?
    [Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): Y
    
  4. Cmdlet 執行完成之後,請再次檢查加密狀態:

    Get-AzVmDiskEncryptionStatus  -ResourceGroupName $rgName -VMName $vmName
    

    作業系統磁碟現在應該已經加密。 也會加密 Windows 可見的任何已連結資料磁碟。

    OsVolumeEncrypted          : Encrypted
    DataVolumesEncrypted       : NoDiskFound
    OsVolumeEncryptionSettings : Microsoft.Azure.Management.Compute.Models.DiskEncryptionSettings
    ProgressMessage            : Provisioning succeeded
    

注意

加密之後新增的磁碟「不會」自動加密。 您可以重新執行 Set-AzVMDiskEncryptionExtension Cmdlet 來加密新的磁碟。 若您將磁碟新增至已加密磁碟的 VM,請務必提供新的序號。 此外,作業系統看不到的磁碟將不會加密。 磁碟必須正確分割、格式化並掛接,BitLocker 延伸模組才能看到該磁碟。