你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。

在启用磁盘加密的情况下创建池

在使用虚拟机配置创建 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 系列支持主机端加密。

注释

对于不支持主机加密的虚拟机规格,临时磁盘加密需要 Azure 磁盘加密 (ADE)。 ADE 不支持 Basic 版本、A 系列、V6 系列、v7 系列(及更高版本)虚拟机大小,也不支持 RAM 少于 2 GB 的虚拟机。 如果你在这些不受支持的规格上启用临时磁盘加密,Batch 会因出现 AzureDiskEncryptionNotSupportedOnVMSize 错误而拒绝创建池。 要在不使用ADE的情况下使用临时磁盘加密,请选择支持主机加密的虚拟机大小和订阅。 对于 Batch 服务池,不要显式禁用主机加密。 对于用户订阅池,明确将 securityProfile.encryptionAtHost 设置为 true。

Azure 磁盘加密 停用

Azure 磁盘加密 (ADE) for Batch pools 将于 2028 年 9 月 15 日退役。 退役日期过后,批处理池不再支持 ADE。 当 Batch 预配或替换计算节点时,继续依赖 ADE 的池配置可能会遇到中断。

如果池配置请求临时磁盘加密并可以选择 ADE,请在停用日期之前完成迁移。 用主机端加密作为替代。 主机加密对临时磁盘、临时操作系统磁盘以及虚拟机主机上的操作系统和数据磁盘缓存进行加密。

ADE的退役不会影响使用平台管理密钥的托管磁盘静态数据加密,而该加密默认在Azure托管磁盘上是启用的。

确定你的池是否需要采取措施

批处理池属性显示了你请求的磁盘加密目标,但没有标明批处理为节点选择的加密技术。 请使用下表评估池配置是否可以依赖于ADE。

池配置 ADE依赖 Action
diskEncryptionConfiguration 未设置,或其目标中未包含 TemporaryDisk 该配置的临时磁盘加密不依赖 ADE。 此次退休无需采取任何行动。
Batch 服务池分配模式,请求了 TemporaryDisk,VM 大小支持主机加密,并且未显式禁用主机加密 Batch 选择主机加密。 无需迁移。 继续使用支持主机加密的 VM 大小。
Batch 服务池分配模式,请求了 TemporaryDisk,并且 VM 大小不支持主机加密 配置可能取决于 ADE。 迁移到支持主机加密的虚拟机规模。
用户订阅池分配模式,请求了 TemporaryDisk,并且 securityProfile.encryptionAtHost 未设置为 true 配置可能取决于 ADE。 Batch 不会自动为用户订阅池启用主机加密。 在池的订阅中注册主机端加密功能,并明确启用主机端加密。
securityProfile.encryptionAtHost 显式设置为 false ,且 TemporaryDisk 被请求 配置可能依赖于 ADE。 使用支持的 VM 大小并将 encryptionAtHost 设置为 true。

要确定虚拟机大小是否支持主机加密,请参见 支持的虚拟机大小。

配置新池

对于需要临时磁盘加密的新池,选择支持主机加密的虚拟机大小。 不要在主机上明确禁用加密。

对于用户订阅池,还要在包含池资源的订阅中注册 Microsoft.Compute/EncryptionAtHost 功能,并将 securityProfile.encryptionAtHost 设置为 true。

将现有池迁移到主机加密

你可以更新现有的池而不删除批处理池。 当你再次扩展池时,更新会替换底层的计算部署。

  1. 停止在池上安排新工作,等待正在运行的任务完成或将这些任务移至另一个池。
  2. 将专用节点和Spot或低优先级目标节点的计数都调整为零。
  3. 等待,直到池分配状态为稳定且当前节点数为零。
  4. 使用 Batch 管理平面池 - 更新 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 加密 Batch 池上的 OS 和临时磁盘。

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

后续步骤