本文内容
Batch 终结点支持 Microsoft Entra 身份验证,或aad_token
。 这意味着,若要调用批处理终结点,用户必须向批处理终结点 URI 提供有效的 Microsoft Entra 身份验证令牌。 授权在终结点级别执行。 以下文章解释了如何正确地与批处理终结点交互及其安全要求。
若要调用批处理终结点,用户必须提供一个代表安全主体的有效 Microsoft Entra 令牌。 此主体可以是用户主体或服务主体。 在任一情况下,一旦调用终结点,就会在与令牌关联的标识下创建批处理部署作业。 该标识需要以下权限才能成功创建作业:
- 读取批处理终结点/部署。
- 在批量推理终结点/部署中创建作业。
- 创建试验/运行。
- 从/向数据存储读取和写入数据。
- 列出数据存储机密。
有关详细的 RBAC 权限列表,请参阅为批处理终结点的调用配置 RBAC。
重要
用于调用批处理终结点的标识可能无法用于读取基础数据,具体取决于数据存储的配置方式。 更多详细信息,请参阅配置计算群集以便进行数据访问。
以下示例演示了使用不同类型的凭据启动批处理部署作业的不同方式:
重要
在启用了专用链接的工作区上工作时,无法从 Azure 机器学习工作室中的 UI 调用批处理终结点。 请改用 Azure 机器学习 CLI v2 来创建作业。
- 此示例假定你已将模型正确部署为批处理终结点。 特别是,我们正在使用在批量部署中使用 MLflow 模型教程中创建的心脏病分类器。
在这种情况下,我们需要使用当前登录用户的标识执行批处理终结点。 执行以下步骤:
使用 REST 时,建议使用服务主体调用批处理终结点。 但是,如果要通过自己的凭据使用 REST 测试特定部署,可以通过为帐户生成 Microsoft Entra 令牌来执行此操作。 执行以下步骤:
为用户帐户获取有效令牌的最简单方法是使用 Azure CLI。 在控制台中运行以下命令:
az account get-access-token --resource https://studio.ml.azure.cn \ --query "accessToken" \ --output tsv
记下生成的输出。
通过身份验证后,向调用 URI 发出请求,将
<TOKEN>
替换为你之前获取的值。请求:
POST jobs HTTP/1.1 Host: <ENDPOINT_URI> Authorization: Bearer <TOKEN> Content-Type: application/json
正文:
{ "properties": { "InputData": { "mnistinput": { "JobInputType" : "UriFolder", "Uri": "https://azuremlexampledata.blob.core.chinacloudapi.cn/data/heart-disease-uci" } } } }
在这种情况下,我们需要使用已在 Microsoft Entra ID 中创建的服务主体执行批处理终结点。 若要完成身份验证,必须创建机密以执行身份验证。 请执行下列步骤:
按照选项 3:创建新的客户端机密中的说明创建用于身份验证的机密。
使用 Azure 中的登录服务获取授权令牌。 授权令牌是针对特定范围颁发的。 Azure 机器学习的资源类型为
https://studio.ml.azure.cn
。 请求应如下所示:请求:
POST /{TENANT_ID}/oauth2/token HTTP/1.1 Host: login.partner.microsoftonline.cn
正文:
grant_type=client_credentials&client_id=<CLIENT_ID>&client_secret=<CLIENT_SECRET>&resource=https://studio.ml.azure.cn
重要
请注意,用于调用批处理终结点的资源范围 (
https://studio.ml.azure.cn
) 不同于用于管理它们的资源范围。 Azure 中的所有管理 API 都使用资源范围https://management.chinacloudapi.cn
,包括 Azure 机器学习。完成身份验证后,请使用查询运行批处理部署作业:
请求:
POST jobs HTTP/1.1 Host: <ENDPOINT_URI> Authorization: Bearer <TOKEN> Content-Type: application/json
正文:
{ "properties": { "InputData": { "mnistinput": { "JobInputType" : "UriFolder", "Uri": "https://azuremlexampledata.blob.core.chinacloudapi.cn/data/heart-disease-uci" } } } }
可以使用托管标识调用批处理终结点和部署。 注意,此管理标识不属于批处理终结点,但它是用于执行终结点(因此也用于创建批处理作业)的标识。 在此场景中,用户分配的标识和系统分配的标识都可使用。
可以使用 Azure 机器学习的 REST API 使用托管标识启动批处理终结点作业。 具体步骤因所使用的基础服务而异。 部分示例包括(但不限于):
还可以使用 Azure CLI 获取托管标识的身份验证令牌,并将其传递至批处理终结点 URI。
批处理终结点会公开一个使用者可用于生成作业的持久 API。 调用程序会请求适当的权限,以便能够生成这些作业。 可使用一个内置安全角色,也可按需创建自定义角色。
若要成功调用批处理终结点,需要向用于调用终结点的标识授予以下显式操作。 有关分配权限的说明,请参阅分配 Azure 角色的步骤。
"actions": [
"Microsoft.MachineLearningServices/workspaces/read",
"Microsoft.MachineLearningServices/workspaces/data/versions/write",
"Microsoft.MachineLearningServices/workspaces/datasets/registered/read",
"Microsoft.MachineLearningServices/workspaces/datasets/registered/write",
"Microsoft.MachineLearningServices/workspaces/datasets/unregistered/read",
"Microsoft.MachineLearningServices/workspaces/datasets/unregistered/write",
"Microsoft.MachineLearningServices/workspaces/datastores/read",
"Microsoft.MachineLearningServices/workspaces/datastores/write",
"Microsoft.MachineLearningServices/workspaces/datastores/listsecrets/action",
"Microsoft.MachineLearningServices/workspaces/listStorageAccountKeys/action",
"Microsoft.MachineLearningServices/workspaces/batchEndpoints/read",
"Microsoft.MachineLearningServices/workspaces/batchEndpoints/write",
"Microsoft.MachineLearningServices/workspaces/batchEndpoints/deployments/read",
"Microsoft.MachineLearningServices/workspaces/batchEndpoints/deployments/write",
"Microsoft.MachineLearningServices/workspaces/batchEndpoints/deployments/jobs/write",
"Microsoft.MachineLearningServices/workspaces/batchEndpoints/jobs/write",
"Microsoft.MachineLearningServices/workspaces/computes/read",
"Microsoft.MachineLearningServices/workspaces/computes/listKeys/action",
"Microsoft.MachineLearningServices/workspaces/metadata/secrets/read",
"Microsoft.MachineLearningServices/workspaces/metadata/snapshots/read",
"Microsoft.MachineLearningServices/workspaces/metadata/artifacts/read",
"Microsoft.MachineLearningServices/workspaces/metadata/artifacts/write",
"Microsoft.MachineLearningServices/workspaces/experiments/read",
"Microsoft.MachineLearningServices/workspaces/experiments/runs/submit/action",
"Microsoft.MachineLearningServices/workspaces/experiments/runs/read",
"Microsoft.MachineLearningServices/workspaces/experiments/runs/write",
"Microsoft.MachineLearningServices/workspaces/metrics/resource/write",
"Microsoft.MachineLearningServices/workspaces/modules/read",
"Microsoft.MachineLearningServices/workspaces/models/read",
"Microsoft.MachineLearningServices/workspaces/endpoints/pipelines/read",
"Microsoft.MachineLearningServices/workspaces/endpoints/pipelines/write",
"Microsoft.MachineLearningServices/workspaces/environments/read",
"Microsoft.MachineLearningServices/workspaces/environments/write",
"Microsoft.MachineLearningServices/workspaces/environments/build/action",
"Microsoft.MachineLearningServices/workspaces/environments/readSecrets/action"
]
批处理终结点确保只有授权用户才能调用批处理部署和生成作业。 但是,根据输入数据的配置方式,可以使用其他凭据来读取基础数据。 在下表中了解使用哪些凭据:
数据输入类型 | 存储中的凭据 | 使用的凭据 | 访问权限授予者 |
---|---|---|---|
数据存储 | 是 | 工作区中的数据存储凭据 | 访问密钥或 SAS |
数据资产 | 是 | 工作区中的数据存储凭据 | 访问密钥或 SAS |
数据存储 | 否 | 作业的标识 + 计算群集上的托管标识 | RBAC |
数据资产 | 否 | 作业的标识 + 计算群集上的托管标识 | RBAC |
Azure Blob 存储 | 不适用 | 作业的标识 + 计算群集上的托管标识 | RBAC |
对于显示计算群集作业标识和托管标识的表中的项,计算群集的托管标识用于装载和配置存储帐户。 但作业标识仍用于读取基础数据,从而可以实现精细的访问控制。 这意味着,若要成功地从存储中读取数据,运行部署的计算群集的托管标识对存储帐户至少需要拥有存储 Blob 数据读取器访问权限。
若要配置计算群集进行数据访问,请执行以下步骤:
转到 Azure 机器学习工作室。
依次导航到“计算”和“部署集群”,选择部署正在使用的计算群集。
将托管标识分配给计算群集:
在“托管标识”部分中,验证计算是否分配了托管标识。 如果没有,请选择“编辑”选项。
选择“分配托管标识”,并根据需要对其进行配置。 可以使用系统分配的托管标识或用户分配的托管标识。 如果使用系统分配的托管标识,则系统会将其命名为“[工作区名称]/computes/[计算群集名称]”。
保存更改。
转到 Azure 门户并导航到数据所在的关联存储帐户。 如果输入的数据是数据资产或数据存储,请查找放置这些资产的存储帐户。
在存储帐户中分配存储 Blob 数据读取器访问级别:
转到访问控制(标识和访问管理)部分。
选择“角色分配”选项卡,然后单击“添加>角色分配”。
查找名为“存储 Blob 数据读取器”的角色并选中,然后单击“下一步”。
单击“选择成员”。
查找已创建的托管标识。 如果使用系统分配的托管标识,则系统会将其命名为“[工作区名称]/computes/[计算群集名称]”。
添加帐户并完成向导。
终结点已准备好从所选存储帐户接收作业和输入的数据。