建立已啟用磁碟加密的集區

當您使用虛擬機器組態建立 Azure Batch 集區時,可以藉由指定磁碟加密組態,使用平台管理金鑰來加密集區中的計算節點。

本文說明如何建立啟用磁碟加密的 Batch 集區。

重要

Azure 磁碟加密 (ADE) for Azure Batch pools 將於 2028 年 9 月 15 日淘汰。 在此日期之前,將依賴 ADE 進行臨時磁碟加密的池配置遷移至 主機加密。 淘汰不會影響受控磁碟的預設伺服器端加密。

為什麼要使用具有磁碟加密設定的集區?

有了 Batch 集區,您就可以在 OS 和計算節點的暫存磁碟上存取和儲存資料。 使用平台代控金鑰對伺服器端磁碟進行加密,將會以低額外負荷且便利的方式保護此資料。

Batch 會根據集區設定和區域支援性,在計算節點上套用其中一種磁碟加密技術。

磁碟加密目標不會直接選擇加密技術。 你指定想要加密的目標磁碟,Batch 會根據集區組態選擇適用的技術。 你可以在虛擬機安全設定檔中明確要求主機加密。 下圖展示了Batch如何做出選擇。

重要

如果你用 Linux 自訂映像建立池,只有當池使用支援主機加密的虛擬機容量時,才能啟用磁碟加密。

對於使用者訂閱池,請在包含池資源的訂閱中註冊 Microsoft.Compute/EncryptionAtHost 功能,並明確設定 securityProfile.encryptionAtHost 為 true。 欲了解更多資訊,請參閱 主機加密的先決條件。

Azure 入口網站中建立集區的螢幕快照。

某些磁碟加密設定需要集區的 VM 系列支援主機加密。 請參閱使用主機加密進行端對端加密,以判斷哪些 VM 系列支援主機加密。

Note

在不支援主機加密的 VM 大小上,暫存磁碟加密需要使用 Azure 磁碟加密 (ADE)。 ADE 不支援 Basic、A 系列、v6 系列、v7 系列(及更新)虛擬機大小,或記憶體少於 2 GB 的虛擬機。 如果您在這些不受支援的規格上啟用暫存磁碟加密,Batch 會因發生 AzureDiskEncryptionNotSupportedOnVMSize 錯誤而拒絕建立集區。 若要使用臨時磁碟加密而不使用 ADE,請選擇支援主機加密的虛擬機大小與訂閱。 對於批次服務集區,不要明確停用主機端加密。 對於用戶訂閱池,明確設定 securityProfile.encryptionAtHost 為 true。

Azure 磁碟加密 淘汰

Azure 磁碟加密 (ADE) for Batch pools 將於 2028 年 9 月 15 日淘汰。 停用日期過後,批次集區不再支援 ADE。 持續依賴 ADE 的池組態在 Batch 佈建或替換運算節點時可能會發生中斷。

如果您的池設定要求臨時磁碟加密並可選擇 ADE,請在停用日期前完成遷移。 用主機端加密作為替代方案。 主機端加密會加密暫時磁碟、臨時作業系統磁碟,以及虛擬機器主機上的作業系統和資料磁碟快取。

ADE 淘汰不會影響 Azure 管理磁碟預設啟用的平台管理金鑰靜態加密。

判斷你的集區是否需要採取行動

批次集區屬性會顯示您要求的磁碟加密目標,但不會指出 Batch 為節點選取的加密技術。 請參考下表評估池組是否會依賴 ADE。

集區設定 ADE 相依性 Action
diskEncryptionConfiguration 未設定或 TemporaryDisk 未包含在目標中 這個配置不依賴 ADE 來進行臨時磁碟加密。 此淘汰項目無需採取任何動作。
當批次服務集區配置模式為 TemporaryDisk、VM 大小支援主機端加密,且未明確停用主機端加密時 批次選取主機端加密。 不需要遷移。 繼續使用支援主機加密的虛擬機大小。
要求的批次服務集區配置模式為 TemporaryDisk,且 VM 大小不支援主機加密 配置可依 ADE 而異。 遷移到支援主機加密的 VM 大小。
用戶訂閱池分配模式,TemporaryDisk 已要求,但 securityProfile.encryptionAtHost 並未設定為 true 配置可依 ADE 而異。 Batch 不會自動啟用使用者訂閱集區的主機加密功能。 在池子訂閱中註冊主機端加密功能,並明確啟用主機端加密。
securityProfile.encryptionAtHost 明確設定為 false ,且 TemporaryDisk 被請求 配置可依 ADE 而異。 使用支援的虛擬機大小,並設定 encryptionAtHost 為 true。

要判斷虛擬機大小是否支援主機加密,請參見 支援的虛擬機大小。

設定新的集區

對於需要臨時磁碟加密的新儲存池,請選擇支援主機加密的虛擬機大小。 不要在主機上明確關閉加密功能。

對於使用者訂閱池,也在包含池資源的訂閱中註冊 Microsoft.Compute/EncryptionAtHost 該功能,並設定 securityProfile.encryptionAtHost 為 true。

將現有的池移轉為主機端加密

您可以更新現有的集區,而不刪除 Batch 集區。 當你再次擴展池時,更新會取代底層的運算部署。

  1. 停止在池子排程新工作,等執行任務完成或移到其他池子。
  2. 將專用節點與 Spot 或低優先權目標節點的計數都調整為零。
  3. 等到池配置狀態為 穩定 且目前節點計數為 0。
  4. 使用 Batch Management 平面 Pool - Update API 版本 2024-07-01 或更新版本以:
    • 如果目前的虛擬機大小不支援加密,請選擇一個支援主機加密的虛擬機大小。
    • 將 deploymentConfiguration.virtualMachineConfiguration.securityProfile.encryptionAtHost 設定為 true。
    • 保留所需的磁碟加密目標及其他虛擬機配置屬性。
  5. 將池大小調整到所需的目標節點數量。 批次會利用更新後的配置建立新的底層運算部署。

例如,管理平面 PATCH 請求的相關部分為:

{
  "properties": {
    "vmSize": "<encryption-at-host-supported-vm-size>",
    "deploymentConfiguration": {
      "virtualMachineConfiguration": {
        "imageReference": {
          "publisher": "<publisher>",
          "offer": "<offer>",
          "sku": "<sku>",
          "version": "<version>"
        },
        "nodeAgentSkuId": "<node-agent-sku-id>",
        "diskEncryptionConfiguration": {
          "targets": [
            "OsDisk",
            "TemporaryDisk"
          ]
        },
        "securityProfile": {
          "encryptionAtHost": true
        }
      }
    }
  }
}

Caution

包含集區必須保留的現有虛擬機器設定屬性,例如虛擬機器映像參考、節點代理程式 SKU、作業系統磁碟設定、容器設定、擴充功能及資料磁碟。 在更新生產池之前,先取得其目前的設定,並建立包含所有所需值的請求。

欲了解更多關於零節點更新及更新行為的資訊,請參閱 更新批次池屬性。

Azure 入口網站

在 Azure 入口網站建立 Batch 集區時,請選取 [磁碟加密設定] 下的 OsDisk、TemporaryDisk 或 OsAndTemporaryDisk。

Azure 入口網站 中磁碟加密組態選項的螢幕快照。

建立集區之後,您可以在集區的 [屬性] 區段中看到磁碟加密設定目標。

顯示 Azure 入口網站 中磁碟加密組態目標的螢幕快照。

範例

以下範例展示了如何使用 Azure.ResourceManager.Batch SDK、Batch REST API 及 Azure CLI 加密批次池中的作業系統與暫存磁碟。

Azure.ResourceManager.Batch SDK

using Azure;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Batch;
using Azure.ResourceManager.Batch.Models;

//...

public async Task SetDiskEncryption()
{
    ArmClient client = new ArmClient(new DefaultAzureCredential());

    ResourceIdentifier batchAccountResourceId =
        BatchAccountResource.CreateResourceIdentifier("subscriptionId", "resourceGroupName", "accountName");
    BatchAccountResource batchAccount = client.GetBatchAccountResource(batchAccountResourceId);

    BatchAccountPoolCollection poolCollection = batchAccount.GetBatchAccountPools();

    BatchAccountPoolData poolData = new BatchAccountPoolData()
    {
        VmSize = "standard_ds1_v2",
        DeploymentConfiguration = new BatchDeploymentConfiguration()
        {
            VmConfiguration = new BatchVmConfiguration(
                imageReference: new BatchImageReference()
                {
                    Publisher = "Canonical",
                    Offer = "UbuntuServer",
                    Sku = "22.04-LTS"
                },
                nodeAgentSkuId: "batch.node.ubuntu 22.04")
            {
                 DiskEncryptionConfiguration = new BatchDiskEncryptionConfiguration()
                 {
                     Targets = { BatchDiskEncryptionTarget.OSDisk, BatchDiskEncryptionTarget.TemporaryDisk }
                 }
            }
        }
    };

    ArmOperation<BatchAccountPoolResource> pool = await poolCollection.CreateOrUpdateAsync(
        WaitUntil.Completed, "diskencryptionPool", poolData);
}

批次 REST API

REST API URL:

POST {batchURL}/pools?api-version=2020-03-01.11.0
client-request-id: 00000000-0000-0000-0000-000000000000

要求主體:

"pool": {
    "id": "pool2",
    "vmSize": "standard_a1",
    "virtualMachineConfiguration": {
        "imageReference": {
            "publisher": "Canonical",
            "offer": "UbuntuServer",
            "sku": "22.04-LTS"
        },
        "diskEncryptionConfiguration": {
            "targets": [
                "OsDisk",
                "TemporaryDisk"
            ]
        },
        "nodeAgentSKUId": "batch.node.ubuntu 22.04"
    },
    "resizeTimeout": "PT15M",
    "targetDedicatedNodes": 5,
    "targetLowPriorityNodes": 0,
    "taskSlotsPerNode": 3,
    "enableAutoScale": false,
    "enableInterNodeCommunication": false
}

Azure CLI

az batch pool create \
    --id diskencryptionPool \
    --vm-size Standard_DS1_V2 \
    --target-dedicated-nodes 2 \
    --image canonical:ubuntuserver:22.04-LTS \
    --node-agent-sku-id "batch.node.ubuntu 22.04" \
    --disk-encryption-targets OsDisk TemporaryDisk

下一步