Azure Batch 支持通过 Microsoft Entra ID 进行身份验证,后者是 Azure 提供的多租户、基于云的目录和身份管理服务。 Azure 使用 Microsoft Entra ID 对其自己的客户、服务管理员和组织用户进行身份验证。
Azure Batch应用进行身份验证的建议方法是使用Azure标识客户端库,该库提供基于令牌的身份验证类(例如DefaultAzureCredential,ManagedIdentityCredentialClientSecretCredential和InteractiveBrowserCredential),无论应用是在本地、Azure还是本地运行,都一致地工作。 有关建议的身份验证策略的概述,请参阅:
本文介绍了使用 Microsoft Entra ID 对Azure Batch进行身份验证的两种常见方案:
集成(交互式)身份验证 对与应用程序交互的用户进行身份验证。 使用凭据,例如
InteractiveBrowserCredential或DefaultAzureCredential(它们可通过 Azure CLI、Visual Studio 和 Visual Studio Code 等开发人员工具登录进行链式验证)。服务主体或托管标识身份验证 对无人参与的应用程序进行身份验证。 对于托管在 Azure 上的应用,请使用诸如
ManagedIdentityCredential之类的凭据;对于使用已注册应用程序的机密或证书进行身份验证的应用,请使用ClientSecretCredential/ClientCertificateCredential。
有关 Microsoft Entra ID 的详细信息,请参阅 Microsoft Entra 文档。
获取用于身份验证的端点
若要使用 Microsoft Entra ID 对 Batch 应用程序进行身份验证,需要在代码中包含 Microsoft Entra 终结点和 Batch 资源终结点。
Microsoft Entra 终结点
Microsoft Entra 的基本颁发机构终结点为 https://login.chinacloudapi.cn/。 若要使用 Microsoft Entra ID 进行身份验证,请使用此终结点,并提供用于标识要用于身份验证的 Microsoft Entra 租户的 租户 ID:
https://login.chinacloudapi.cn/<tenant-id>
可以从 Azure 门户中的主 Microsoft Entra ID 页面获取租户 ID。 还可以在左侧导航中选择“属性”,在“属性”页面上查看“租户 ID”。
重要
使用服务主体进行身份验证时,需要租户专用的 Microsoft Entra 终结点。
使用集成身份验证时,建议使用租户特定终结点,但这并非必需。 在未提供特定租户时,还可以使用 Microsoft Entra 通用终结点来提供通用凭据收集界面。 常用终结点为
https://login.chinacloudapi.cn/common。
有关 Microsoft Entra 终结点的详细信息,请参阅身份验证和授权。
批处理资源终结点
使用 Batch 资源终结点 https://batch.chinacloudapi.cn/ 获取用于对发往 Batch 服务的请求进行身份验证的令牌。
在租户中注册应用程序
使用 Microsoft Entra 身份验证的第一步是在 Microsoft Entra 租户中注册应用程序。 注册应用程序后,可以使用代码中的Azure标识库凭据来获取 Batch 服务的Microsoft Entra令牌。 注册你的应用程序是机密客户端(服务主体)流程以及任何需要租户专用应用注册的交互式流程所必需的。
Tip
如果代码使用DefaultAzureCredential并通过开发人员工具(Azure CLI、Azure PowerShell、Visual Studio或Visual Studio Code)或托管标识登录,则无需注册单独的应用程序 , 凭据将使用已在该环境中配置的标识。
注册应用程序时,需要向 Microsoft Entra ID 提供关于应用程序的信息。 随后,Microsoft Entra ID 会提供一个 应用程序 ID,也称为 客户端 ID,你可以在运行时使用它将你的应用程序与 Microsoft Entra ID 相关联。 有关应用程序 ID 的详细信息,请参阅 Microsoft Entra ID 中的应用程序对象和服务主体对象。
请按照注册应用程序中介绍的步骤,注册 Azure Batch 应用程序。
注册应用程序后,即可在应用程序的“概述”页面上看到“应用程序(客户端)ID”。
配置集成身份验证
若要使用集成身份验证进行验证,需要授予应用程序连接到 Azure Batch 服务 API 的权限。 此步骤使应用程序可使用 Microsoft Entra ID 对 Batch 服务 API 的调用进行验证。
注册应用程序后,请按照以下步骤为应用程序授予对 Azure Batch 服务的访问权限:
- 在 Azure 门户中,搜索并选择“应用注册”。
- 从“应用注册”页面中选择你的应用程序。
- 在应用程序的页面的左侧导航栏中选择“API 权限”。
- 在“API 权限”页上,选择“添加权限”。
- 在“请求 API 权限”页面上,选择“Azure Batch”。
- 在“Azure Batch”页面上,“选择权限”之下,选中“user_impersonation”旁边的复选框,然后选择“添加权限”。
现在,“API 权限”页面会显示你的 Microsoft Entra 应用程序有权访问 Microsoft Graph 和 Azure Batch。 将应用注册到 Microsoft Entra ID 时,系统会自动向 Microsoft Graph 授予权限。
配置服务主体
若要对以无人参与方式运行的应用程序进行验证,可以使用服务主体。 使用服务主体对应用程序进行验证时,它将同时向 Microsoft Entra ID 发送应用程序 ID 和密钥。
注册应用程序后,请按照 Azure 门户中的下列步骤配置服务主体:
- 为您的应用程序请求一个密钥。
- 将 Azure 基于角色的访问控制 (Azure RBAC) 分配到应用程序。
为你的应用程序申请密钥
按照以下步骤创建并复制要在代码中使用的密钥:
- 在 Azure 门户中,搜索并选择“应用注册”。
- 从“应用注册”页面中选择你的应用程序。
- 在应用程序页上,从左侧导航中选择“证书和机密”。
- 在 “证书和密码” 页面上,选择 “新建客户端密码”。
- 在“添加客户端密码”页面中,输入说明并选择密钥的过期时长。
- 选择“添加”以创建机密并将其显示在“证书和机密”页上。
- 将密钥值复制到安全的位置,因为离开此页而后将无法再次访问它。 如果无法访问密钥,可以生成一个新密钥。
将 Azure RBAC 分配到应用程序
按照以下步骤将 Azure RBAC 角色分配给应用程序。 有关详细信息,请参阅 Azure Batch 服务的基于角色的访问控制。
- 在 Azure 门户中,导航到应用程序使用的 Azure Batch 帐户。
- 在左侧导航栏中,选择“访问控制(IAM)”。
- 在“访问控制(IAM)”页上,选择“添加角色分配”。
- 在“添加角色分配”页上,选择“角色”选项卡,然后为应用选择 Azure Batch 内置 RBAC 角色之一。
- 选择“成员”选项卡,然后选择“成员”下的“选择成员”。
- 在“选择成员”屏幕上,搜索并选择你的应用程序,然后选择“选择”。
- 在“添加角色分配”页面上,选择“查看 + 分配”。
现在,Azure Batch 帐户的“访问控制 (IAM)”页面的“角色分配”选项卡上会显示你的应用程序。
代码示例
本节中的代码示例演示了如何使用 Azure Identity 库中的凭据,通过 Microsoft Entra ID 对 Azure Batch 进行身份验证。 这些示例使用.NET和Python,但相同的模式适用于其他Azure SDK语言。
注意
Microsoft Entra 身份验证令牌在一小时后过期。 使用长期存在的BatchClient对象时,你提供的Azure IdentityTokenCredential会自动缓存并刷新令牌,因此仅在必要时才会从 Microsoft Entra ID 获取新令牌。 有关 Microsoft Entra ID 中的令牌的详细信息,请参阅安全令牌。
Tip
对于大多数方案,请使用 DefaultAzureCredential。 它会自动尝试多种身份验证方法(托管标识、环境变量、开发人员工具登录等),因此,无论应用是在开发期间、Azure还是本地运行,相同的代码都有效。 有关选择正确凭据的指导,请参阅“对.NET应用进行身份验证”和“对Python应用进行身份验证”。
代码示例:从.NET对Azure Batch进行身份验证
此示例使用 Azure.Compute.Batch 和 Azure.Identity 库。
安装
Azure.Compute.Batch和Azure.IdentityNuGet 包。在代码中声明以下
using语句:using Azure.Compute.Batch; using Azure.Core; using Azure.Identity;参阅你的 Batch 帐户终结点:
private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.chinacloudapi.cn";创建凭据并将其传递给
BatchClient构造函数。 使用该客户端对 Batch 服务执行后续操作。推荐:
DefaultAzureCredential— 在本地可配合开发人员工具登录使用(Azure CLI、Visual Studio、Visual Studio Code),并在应用于 Azure 上运行时自动使用托管标识:TokenCredential credential = new DefaultAzureCredential(); BatchClient client = new BatchClient(new Uri(BatchAccountUrl), credential); await foreach (BatchJob job in client.GetJobsAsync()) { Console.WriteLine(job.Id); }交互式(集成)登录 - 提示用户通过系统浏览器登录。 当你的应用必须以交互方式对特定用户进行身份验证时,请使用此功能:
TokenCredential credential = new InteractiveBrowserCredential( new InteractiveBrowserCredentialOptions { TenantId = "<tenant-id>", ClientId = "<application-id>", // optional; required only if you registered your own app RedirectUri = new Uri("http://localhost") }); BatchClient client = new BatchClient(new Uri(BatchAccountUrl), credential);服务主体(客户端密码) - 用于使用应用注册机密进行身份验证的无人参与应用:
TokenCredential credential = new ClientSecretCredential( tenantId: "<tenant-id>", clientId: "<application-id>", clientSecret: "<client-secret>"); BatchClient client = new BatchClient(new Uri(BatchAccountUrl), credential);Managed identity — 当应用在具有系统分配或用户分配托管标识的Azure资源(例如 VM、应用服务或容器应用)上运行时使用:
// System-assigned managed identity TokenCredential credential = new ManagedIdentityCredential(); // Or, user-assigned managed identity // TokenCredential credential = new ManagedIdentityCredential(clientId: "<user-assigned-client-id>"); BatchClient client = new BatchClient(new Uri(BatchAccountUrl), credential);
代码示例:从Python对Azure Batch进行身份验证
此示例使用 azure-batch 客户端,并采用来自 azure-identity 库的凭据。 旧 azure.common.credentials.ServicePrincipalCredentials 类已弃用;请改用 azure-identity 凭据。
安装所需的包:
pip install azure-batch azure-identity参考你的 Batch 账户终结点和 Batch 资源作用域:
BATCH_ACCOUNT_URL = "https://<myaccount>.<mylocation>.batch.chinacloudapi.cn" BATCH_SCOPE = "https://batch.core.chinacloudapi.cn/.default"创建凭据并将其传递给
BatchServiceClient.推荐:
DefaultAzureCredential— 在本地使用开发人员工具登录,并在Azure上运行时自动使用托管标识:from azure.batch import BatchServiceClient from azure.identity import DefaultAzureCredential credential = DefaultAzureCredential() batch_client = BatchServiceClient( credentials=credential, batch_url=BATCH_ACCOUNT_URL, )交互式(集成)登录 - 提示用户通过系统浏览器登录:
from azure.batch import BatchServiceClient from azure.identity import InteractiveBrowserCredential credential = InteractiveBrowserCredential( tenant_id="<tenant-id>", client_id="<application-id>", # optional; required only if you registered your own app ) batch_client = BatchServiceClient( credentials=credential, batch_url=BATCH_ACCOUNT_URL, )服务主体(客户端密码) - 用于无人参与的应用:
from azure.batch import BatchServiceClient from azure.identity import ClientSecretCredential credential = ClientSecretCredential( tenant_id="<tenant-id>", client_id="<application-id>", client_secret="<client-secret>", ) batch_client = BatchServiceClient( credentials=credential, batch_url=BATCH_ACCOUNT_URL, )托管标识 - 当应用在具有托管标识的Azure资源上运行时使用:
from azure.batch import BatchServiceClient from azure.identity import ManagedIdentityCredential # System-assigned managed identity credential = ManagedIdentityCredential() # Or, user-assigned managed identity # credential = ManagedIdentityCredential(client_id="<user-assigned-client-id>") batch_client = BatchServiceClient( credentials=credential, batch_url=BATCH_ACCOUNT_URL, )