共用方式為


使用 Azure PowerShell 加密虛擬機器擴展集中的 OS 和連結的資料磁碟

這很重要

Azure 磁碟加密預定於 2028 年 9 月 15 日退休。 在此之前,您可以繼續使用 Azure 磁碟加密,不會中斷。 2028 年 9 月 15 日,啟用 ADE 的工作負載仍可繼續運行,但加密磁碟在虛擬機重啟後將無法解鎖,導致服務中斷。

為新的虛擬機器使用主機端加密。 所有啟用 ADE 的虛擬機(包括備份)必須在退休日前遷移至主機加密,以避免服務中斷。 詳情請參見「 從 Azure 磁碟加密遷移到主機加密 」。

Azure PowerShell 模組可用來從 PowerShell 命令列或腳本中建立和管理 Azure 資源。 本文說明如何使用 Azure PowerShell 來建立和加密虛擬機器擴展集。 如需將 Azure 磁碟加密套用至虛擬機器擴展集的詳細資訊,請參閱 虛擬機器擴展集的 Azure 磁碟加密

Azure Cloud Shell

Azure Cloud Shell 是裝載於 Azure 中的互動式殼層環境,可在瀏覽器中使用。 您可以使用 Bash 或 PowerShell 搭配 Cloud Shell,與 Azure 服務共同使用。 您可以使用 Cloud Shell 預先安裝的命令,執行本文提到的程式碼,而不必在本機環境上安裝任何工具。

要啟動 Azure Cloud Shell:

Option 範例/連結
選取程式碼或命令區塊右上角的 [試試看]。 選取 [試試看] 並不會自動將程式碼或命令複製到 Cloud Shell 中。 顯示 Azure Cloud Shell 的「試試看」範例的螢幕擷取畫面。
前往 https://shell.azure.com,或選取 [啟動 Cloud Shell] 按鈕,在瀏覽器中開啟 Cloud Shell。 啟動 Azure Cloud Shell 的按鈕。
選取 Azure 入口網站右上方功能表列上的 [Cloud Shell] 按鈕。 顯示 Azure 入口網站中 Cloud Shell 按鈕的螢幕擷取畫面

若要使用 Azure Cloud Shell:

  1. 啟動 Cloud Shell。

  2. 選取程式碼區塊 (或命令區塊) 上的 [複製] 按鈕以複製程式碼或命令。

  3. 透過在 Windows 和 Linux 上選取 Ctrl+Shift+V;或在 macOS 上選取 Cmd+Shift+V,將程式碼或命令貼到 Cloud Shell 工作階段中。

  4. 選取 Enter 鍵執行程式碼或命令。

建立已啟用磁碟加密的 Azure 金鑰保存庫

Azure 金鑰保存庫可以儲存金鑰、秘密或密碼,讓您在應用程式和服務中安全地實作它們。 密碼編譯金鑰會使用軟體保護儲存在 Azure 金鑰保存庫中,或者您可以在經過 FIPS 140 驗證 標準認證的硬體安全性模組 (HSM) 中匯入或產生金鑰。 這些加密金鑰可用來加密和解密連結至 VM 的虛擬磁碟。 您保留對這些加密金鑰的控制權,並可以稽核其使用情況。

使用 New-AzKeyVault 建立金鑰保存庫。 若要允許 Key Vault 用於磁碟加密,請設定 EnabledForDiskEncryption 參數。 下列範例也會定義資源群組名稱、金鑰保存庫名稱和位置的變數。 提供您自己的唯一金鑰保存庫名稱:

$rgName="myResourceGroup"
$vaultName="myuniquekeyvault"
$location = "EastUS"

New-AzResourceGroup -Name $rgName -Location $location
New-AzKeyVault -VaultName $vaultName -ResourceGroupName $rgName -Location $location -EnabledForDiskEncryption

使用現有的金鑰保存庫

只有在您有想要搭配磁碟加密使用的現有金鑰保存庫時,才需要此步驟。 如果您在上一節中建立金鑰保存庫,請略過此步驟。

您可以使用 Set-AzKeyVaultAccessPolicy,在與磁碟加密的擴展集相同之訂用帳戶與區域中,啟用現有的 Key Vault。 在 $vaultName 變數中定義現有金鑰保存庫的名稱,如下所示:

$vaultName="myexistingkeyvault"
Set-AzKeyVaultAccessPolicy -VaultName $vaultName -EnabledForDiskEncryption

建立擴展集

這很重要

自 2023 年 11 月起,如果未指定協調流程模式,則使用 PowerShell 和 Azure CLI 建立的 VM 擴展集會預設為彈性協調流程模式。 如需此變更的詳細資訊,以及您應該採取的動作,請前往針對 VMSS PowerShell/CLI 客戶的重大改變 - Microsoft 社群中樞

首先,使用 Get-Credential 設定 VM 執行個體的系統管理員使用者名稱和密碼:

$cred = Get-Credential

現在使用 New-AzVmss 建立虛擬機器規模設定。 為了將流量散發到個別的虛擬機器執行個體,也會建立負載平衡器。 負載平衡器包含在 TCP 連接埠 80 上散發流量的規則,同時允許 TCP 連接埠 3389 上的遠端桌面流量以及 TCP 連接埠 5985 上的 PowerShell 遠端流量:

$vmssName="myScaleSet"

New-AzVmss `
    -ResourceGroupName $rgName `
    -VMScaleSetName $vmssName `
    -OrchestrationMode "flexible" `
    -Location $location `
    -VirtualNetworkName "myVnet" `
    -SubnetName "mySubnet" `
    -PublicIpAddressName "myPublicIPAddress" `
    -LoadBalancerName "myLoadBalancer" `
    -Credential $cred

啟用加密

若要加密規模設定中的 VM 執行個體,請先使用 Get-AzKeyVault 取得金鑰保存庫的 URI 和資源 ID。 然後,這些變數可用來使用 Set-AzVmssDiskEncryptionExtension 啟動加密程式:

$diskEncryptionKeyVaultUrl=(Get-AzKeyVault -ResourceGroupName $rgName -Name $vaultName).VaultUri
$keyVaultResourceId=(Get-AzKeyVault -ResourceGroupName $rgName -Name $vaultName).ResourceId

Set-AzVmssDiskEncryptionExtension -ResourceGroupName $rgName -VMScaleSetName $vmssName `
    -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $keyVaultResourceId -VolumeType "All"

出現提示時,輸入 y 以繼續擴展集虛擬機器執行個體上的磁碟加密程序。

使用 KEK 啟用加密以包裝金鑰

加密虛擬機器擴展集時,您也可以使用金鑰加密金鑰來增加安全性。

$diskEncryptionKeyVaultUrl=(Get-AzKeyVault -ResourceGroupName $rgName -Name $vaultName).VaultUri
$keyVaultResourceId=(Get-AzKeyVault -ResourceGroupName $rgName -Name $vaultName).ResourceId
$keyEncryptionKeyUrl = (Get-AzKeyVaultKey -VaultName $vaultName -Name $keyEncryptionKeyName).Key.kid;

Set-AzVmssDiskEncryptionExtension -ResourceGroupName $rgName -VMScaleSetName $vmssName `
    -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $keyVaultResourceId `
    -KeyEncryptionKeyUrl $keyEncryptionKeyUrl -KeyEncryptionKeyVaultId $keyVaultResourceId -VolumeType "All"

備註

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]

檢查加密進度

若要檢查磁碟加密的狀態,請使用 Get-AzVmssDiskEncryption

Get-AzVmssDiskEncryption -ResourceGroupName $rgName -VMScaleSetName $vmssName

加密 VM 執行個體時, EncryptionSummary 程式碼會報告 ProvisioningState/succeeded ,如下列範例輸出所示:

ResourceGroupName            : myResourceGroup
VmScaleSetName               : myScaleSet
EncryptionSettings           :
  KeyVaultURL                : https://myuniquekeyvault.vault.azure.net/
  KeyEncryptionKeyURL        :
  KeyVaultResourceId         : /subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/myuniquekeyvault
  KekVaultResourceId         :
  KeyEncryptionAlgorithm     :
  VolumeType                 : All
  EncryptionOperation        : EnableEncryption
EncryptionSummary[0]         :
  Code                       : ProvisioningState/succeeded
  Count                      : 2
EncryptionEnabled            : True
EncryptionExtensionInstalled : True

停用加密

如果您不想再使用加密的 VM 執行個體磁碟,您可以使用 Disable-AzVmssDiskEncryption 停用加密,如下所示:

Disable-AzVmssDiskEncryption -ResourceGroupName $rgName -VMScaleSetName $vmssName

後續步驟