批处理终结点支持 Microsoft Entra 身份验证或 aad_token
。 这意味着,若要调用批处理终结点,用户必须向批处理终结点 URI 提供有效的 Microsoft Entra 身份验证令牌。 授权在终结点级别强制执行。 以下文章介绍了如何正确与批处理终结点交互及其安全要求。
若要调用批处理终结点,用户必须提供表示 安全主体的有效Microsoft Entra 令牌。 此 主体可以是用户主体 或服务 主体。 在任何情况下,调用终结点后,就会在与令牌关联的标识下创建批处理部署作业。 标识需要具备以下权限才能成功创建作业:
- 读取批处理终结点/部署。
- 在批处理推理终结点/部署中创建作业。
- 创建试验/运行。
- 从数据存储中读取和写入数据。
- 列出数据存储机密。
有关 RBAC 权限的详细列表,请参阅 为批处理终结点调用配置 RBAC 。
重要
用于调用批处理终结点的标识可能不用于读取基础数据,具体取决于数据存储的配置方式。 有关更多详细信息 ,请参阅配置计算群集以便进行数据访问 。
以下示例演示了使用不同类型的凭据启动批处理部署作业的不同方法:
重要
在启用了专用链接的工作区中,无法通过 Azure 机器学习工作室的 UI 调用批量终结点。 请改用 Azure 机器学习 CLI v2 来创建作业。
- 此示例假定已将模型正确部署为批处理终结点。 特别是,我们使用在本教程中创建的心脏状况分类器,在批量部署中使用 MLflow 模型。
在这种情况下,我们希望使用当前登录的用户的标识执行批处理终结点。 执行以下步骤:
使用 Azure CLI 通过交互式身份验证或设备代码身份验证登录:
az login
进行身份验证后,使用以下命令运行批处理部署作业:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \ --input https://azuremlexampledata.blob.core.chinacloudapi.cn/data/heart-disease-uci
在这种情况下,我们希望使用已在 Microsoft Entra ID 中创建的服务主体执行批处理终结点。 若要完成身份验证,必须创建机密来执行身份验证。 执行以下步骤:
按照选项 3:创建新的客户端机密中的说明创建用于身份验证的机密。
若要使用服务主体进行身份验证,请使用以下命令。 有关详细信息,请参阅 使用 Azure CLI 登录。
az login --service-principal \ --tenant <tenant> \ -u <app-id> \ -p <password-or-cert>
进行身份验证后,使用以下命令运行批处理部署作业:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \ --input https://azuremlexampledata.blob.core.chinacloudapi.cn/data/heart-disease-uci/
可以使用托管身份来调用批处理端点和进行部署。 请注意,此管理标识不属于批处理终结点,但它是用于执行终结点的标识,因此会创建批处理作业。 在此方案中,可以使用用户分配标识和系统分配标识。
在配置了托管身份的 Azure 资源上,可以使用托管身份登录。 使用资源的标识登录是通过 --identity
标志执行的。 有关详细信息,请参阅 使用 Azure CLI 登录。
az login --identity
进行身份验证后,使用以下命令运行批处理部署作业:
az ml batch-endpoint invoke --name $ENDPOINT_NAME \
--input https://azuremlexampledata.blob.core.chinacloudapi.cn/data/heart-disease-uci
Batch 终结点公开使用者可用于生成作业的持久的 API。 调用程序请求适当的权限,以便能够生成这些作业。 可以使用其中一个 内置安全角色 ,也可以根据目的创建自定义角色。
若要成功调用批处理终结点,需要向用于调用终结点的身份授予以下显式操作。 有关分配 Azure 角色的说明,请参阅 “分配 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"
]
Batch 终结点确保只有经过授权的用户能够调用批处理部署并生成作业。 但是,根据输入数据的配置方式,其他凭据可用于读取基础数据。 使用下表了解使用了哪些凭据:
数据输入类型 | 存储中的凭据 | 使用的凭据 | 授予访问权限的主体 |
---|---|---|---|
数据存储 | 是的 | 工作区中的数据存储凭据 | 访问密钥或共享访问签名 (SAS) |
数据资产 | 是的 | 工作区中的数据存储凭据 | 访问密钥或 SAS |
数据存储 | 否 | 作业标识 + 计算群集的托管标识 | RBAC |
数据资产 | 否 | 作业标识 + 计算群集的托管标识 | RBAC |
Azure Blob 存储 | 不适用 | 作业标识 + 计算群集的托管标识 | RBAC |
对于表中显示“作业标识 + 计算群集托管标识”的项目,将使用计算群集的托管标识来装载和配置存储帐户。 但是,作业的标识仍用于读取基础数据,以便实现精细访问控制。 这意味着,若要从存储成功读取数据,运行部署的计算群集的托管标识必须至少具有对存储帐户的 存储 Blob 数据读取器 访问权限。
若要配置计算群集进行数据访问,请执行以下步骤:
转到 Azure 机器学习工作室。
导航到 “计算”,然后 导航到“计算群集”。
选择部署正在使用的计算群集。 此作将打开计算群集的 “详细信息 ”页。
将托管标识分配给计算群集:
转到页面的 “托管标识 ”部分,验证计算是否分配了托管标识。 如果没有,请选择铅笔图标以编辑托管标识。
选择 “分配托管标识 ”旁边的滑块以根据需要启用和配置它。 可以使用 System-Assigned 托管标识或 User-Assigned 托管标识。 如果使用 System-Assigned 托管标识,则会将其命名为“[工作区名称]/computes/[计算群集名称]”。
保存更改。
转到 Azure 门户 ,导航到数据所在的关联存储帐户。 如果数据输入是数据资产或数据存储,请查找放置这些资产的存储帐户。
在存储帐户中分配存储 Blob 数据读取器访问级别:
转到 访问控制(IAM)部分。
选择“ 角色分配”选项卡,然后单击“ 添加>角色分配”。
查找名为 “存储 Blob 数据读取者”的角色,选择它,然后单击“ 下一步”。
单击“选择成员”。
查找已创建的托管标识。 如果使用 System-Assigned 托管标识,则会将其命名为“[工作区名称]/computes/[计算群集名称]”。
添加帐户并完成向导。
您的端点已准备好接收来自所选存储帐户的作业和输入数据。