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

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:

選項 範例/連結
選取程式碼或命令區塊右上角的 [試試看]。 選取 [試試看] 並不會自動將程式碼或命令複製到 Cloud Shell 中。 Screenshot that shows an example of Try It for Azure Cloud Shell.
請前往 https://shell.azure.com,或選取 [啟動 Cloud Shell] 按鈕,在瀏覽器中開啟 Cloud Shell。 Button to launch Azure Cloud Shell.
選取 Azure 入口網站右上方功能表列上的 [Cloud Shell] 按鈕。 Screenshot that shows the Cloud Shell button in the Azure portal

若要使用 Azure Cloud Shell:

  1. 啟動 Cloud Shell。

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

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

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

建立針對磁碟加密啟用的 Azure Key Vault

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

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

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

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

使用現有的 Key Vault

如果您有想要用於磁碟加密的現有 Key Vault,才需要這個步驟。 如果您已在上一節中建立 Key Vault,請略過此步驟。

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

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

建立擴展集

重要

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

首先,使用 Get-credential 設定虛擬機器執行個體的系統管理員使用者名稱和密碼:

$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

啟用加密

若要加密擴展集中的虛擬機器執行個體,首先請使用 Get-AzKeyVault 取得 Key Vault URI 和資源識別碼的部分資訊。 然後使用這些變數,以 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

當虛擬機器執行個體已加密時,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

停用加密

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

Disable-AzVmssDiskEncryption -ResourceGroupName $rgName -VMScaleSetName $vmssName

下一步