在 Batch 池中配置托管标识

Azure 资源托管标识可为 Microsoft Entra ID 中的 Azure 资源提供标识并使用该标识来获取 Microsoft Entra ID 令牌,从而使开发人员无需管理凭据。

本主题介绍如何在 Batch 池上启用用户分配的托管标识,以及如何在节点内使用托管标识。

重要

必须使用虚拟机配置来配置池,才能使用托管标识。

可以使用 Batch .NET 管理库创建具有托管标识的池,但 Batch .NET 客户端库当前不支持创建具有托管标识的池。

创建用户分配的托管标识

首先,在与 Batch 帐户相同的租户中创建用户分配的托管标识。 可以使用 Azure 门户、Azure 命令行接口 (Azure CLI)、PowerShell、Azure 资源管理器或 Azure REST API 创建标识。 此托管标识无需位于同一资源组中,甚至不需要位于同一订阅中。

创建包含用户分配的托管标识的 Batch 池

创建一个或多个用户分配的托管标识后,可以创建具有此标识或这些标识的 Batch 池。 您可以:

警告

池具有活动节点时,不支持池托管标识的就地更新。 现有计算节点不会随更改一起更新。 建议在修改标识集合之前将池缩减至零,以确保所有 VM 都分配有相同的标识集。

在 Azure 门户中创建 Batch 池

通过 Azure 门户创建包含用户分配的托管标识的 Batch 池:

  1. 登录 Azure 门户
  2. 在搜索栏中,输入并选择“Batch 帐户”。
  3. 在“Batch 帐户”页上,选择要在其中创建 Batch 池的 Batch 帐户。
  4. 在 Batch 帐户菜单中的“功能”下,选择“池”。
  5. 在“池”菜单中,选择“添加”以添加新的 Batch 池。
  6. 对于“池 ID”,请输入池的标识符。
  7. 对于“标识”,请将设置更改为“用户分配”。
  8. 在“用户分配的托管标识”下,选择“添加”。
  9. 选择要使用的一个或多个用户分配的托管标识。 然后选择“添加”。
  10. 在“操作系统”下,选择要使用的发布者、产品/服务和 SKU。
  11. 根据需要,在容器注册表中启用托管标识:
    1. 对于“容器配置”,请将设置更改为“自定义”。 然后,选择自定义配置。
    2. 对于“启动任务”,请选择“已启用”。 然后,选择“资源文件”并添加存储容器信息。
    3. 启用“容器设置”。
    4. 将“容器注册表”更改为“自定义”
    5. 对于“标识参考”,请选择存储容器。

使用 .NET 创建 Batch 池

要使用 Batch .NET 管理库创建包含用户分配的托管标识的 Batch 池,请使用以下示例代码:

var credential = new DefaultAzureCredential();
ArmClient _armClient = new ArmClient(credential);

var batchAccountIdentifier = ResourceIdentifier.Parse("your-batch-account-resource-id");   
BatchAccountResource batchAccount = _armClient.GetBatchAccountResource(batchAccountIdentifier);

var poolName = "HelloWorldPool";
var imageReference = new BatchImageReference()
{
    Publisher = "canonical",
    Offer = "0001-com-ubuntu-server-jammy",
    Sku = "22_04-lts",
    Version = "latest"
};
string nodeAgentSku = "batch.node.ubuntu 22.04";

var batchAccountPoolData = new BatchAccountPoolData()
{
    VmSize = "Standard_DS1_v2",
    DeploymentConfiguration = new BatchDeploymentConfiguration()
    {
        VmConfiguration = new BatchVmConfiguration(imageReference, nodeAgentSku)
    },
    ScaleSettings = new BatchAccountPoolScaleSettings()
    {
        FixedScale = new BatchAccountFixedScaleSettings()
        {
            TargetDedicatedNodes = 1
        }
    }
};

ArmOperation<BatchAccountPoolResource> armOperation = batchAccount.GetBatchAccountPools().CreateOrUpdate(
    WaitUntil.Completed, poolName, batchAccountPoolData);
BatchAccountPoolResource pool = armOperation.Value;

在 Batch 节点中使用用户分配的托管标识

许多可直接在计算节点上访问其他 Azure 资源(如 Azure 存储或 Azure 容器注册表)的 Azure Batch 功能支持使用托管标识。 如需进一步了解如何在 Azure Batch 中使用托管标识,请参阅以下链接:

你还可以手动配置任务,以便托管标识可以直接访问支持托管标识的 Azure 资源

在 Batch 节点中,你可以获取托管标识令牌,并使用它们通过 Azure 实例元数据服务进行 Microsoft Entra 身份验证。

对于 Windows,用于获取进行身份验证的访问令牌的 PowerShell 脚本是:

$Response = Invoke-RestMethod -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource={Resource App Id Url}' -Method GET -Headers @{Metadata="true"}

对于 Linux,Bash 脚本是:

curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource={Resource App Id Url}' -H Metadata:true

有关详细信息,请参阅如何在 Azure VM 上使用 Azure 资源的托管标识获取访问令牌

后续步骤