You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程方式使用用户托管标识访问Azure BatchClient?

使用托管标识(DefaultAzureCredential)实例化BatchClient

可以通过Azure Identity 库结合 Batch 服务客户端,实现无需提供BatchAccountKey的认证方式,具体方案如下:

1. 必备依赖包

若基于.NET开发,需确保项目安装以下NuGet包:

  • Azure.Identity:提供DefaultAzureCredential等标识认证能力
  • Azure.ResourceManager.Batch:新版Batch管理客户端,原生支持基于标识的认证

2. 代码实现示例

方式一:用DefaultAzureCredential直接创建可操作的BatchClient

通过DefaultAzureCredential获取访问令牌,结合Batch账户端点构建客户端:

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

// 初始化DefaultAzureCredential,自动适配多种认证场景
var credential = new DefaultAzureCredential();

// 配置Batch账户基础信息
string subscriptionId = "你的订阅ID";
string resourceGroupName = "目标资源组名称";
string batchAccountName = "Batch账户名称";

// 创建Batch管理客户端,获取账户资源信息
var batchManager = BatchManagementClientFactory.CreateArmClient(subscriptionId, credential);
var batchAccount = await batchManager.GetBatchAccountAsync(resourceGroupName, batchAccountName);

// 构建用于操作作业、任务的Batch服务客户端
var batchServiceClient = new BatchClient(
    new BatchServiceClientOptions(),
    new TokenCredentialAuthenticationProvider(credential, new[] { "https://batch.core.windows.net/.default" })
);
batchServiceClient.Endpoint = batchAccount.Data.AccountEndpoint;

方式二:配置托管标识权限

确保你的托管标识(如VM/云函数的系统分配标识)已被添加到Batch账户的IAM访问控制中,需赋予对应权限,比如:

  • Batch账户参与者角色(覆盖大部分常规操作)
  • 或自定义角色,包含Microsoft.Batch/batchAccounts/read、Microsoft.Batch/batchAccounts/pools/*、Microsoft.Batch/batchAccounts/jobs/*等必要操作权限

3. 认证场景适配

DefaultAzureCredential会自动适配不同环境的认证逻辑:

  • 本地开发:复用Azure CLI、Visual Studio/VS Code的登录凭据
  • 生产环境:自动使用Azure VM/VMSS、云函数、App Service的托管标识

注意事项

  • 若仍在使用旧版Microsoft.Azure.Batch包,可通过TokenCredentials结合DefaultAzureCredential获取的令牌实现认证,但更推荐使用新版Azure.ResourceManager.Batch库,契合Azure SDK统一范式
  • 若出现权限不足错误,优先检查托管标识的IAM权限配置是否正确

内容的提问来源于stack exchange,提问作者user2634574

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 19:54:56