托管联机终结点的身份验证

适用范围:Azure CLI ml 扩展 v2(当前版本)Python SDK azure-ai-ml v2(当前版本)

本文介绍联机终结点上下文中标识和权限的概念。 我们首先讨论支持 Azure RBACMicrosoft Entra ID。 根据 Microsoft Entra 标识的用途,我们将其称为用户标识或终结点标识

用户标识是一个可用于创建终结点及其部署,或者用于与终结点或工作区交互的 Microsoft Entra ID。 换句话说,如果标识向终结点、部署或工作区发出请求,则可以将其视为用户标识。 用户标识需要适当的权限才能对终结点或工作区执行控制平面和数据平面操作。

终结点标识是一个用于在部署中运行用户容器的 Microsoft Entra ID。 换句话说,如果标识与终结点相关联,并用于要部署的用户容器,则称为终结点标识。 终结点标识还需要适当权限,以便用户容器根据需要与资源交互。 例如,终结点标识需要适当的权限才能从 Azure 容器注册表拉取映像,或与其他 Azure 服务交互。

通常,用户标识和终结点标识具有单独的权限要求。 有关管理标识和权限的详细信息,请参阅如何对联机终结点的客户端进行身份验证。 有关自动为机密添加额外权限的特殊情况的详细信息,请参阅用户标识的其他权限

限制

仅托管联机终结点支持 Microsoft Entra ID 身份验证 (aad_token)。 对于 Kubernetes 联机终结点,可以使用密钥或 Azure 机器学习令牌 (aml_token)。

用户标识所需的权限

使用 Microsoft 帐户(例如,使用 az login)登录到 Azure 租户时,需要完成用户身份验证步骤(通常称为 authn),然后确定你作为用户的身份。 现在,假设要在工作区下创建联机终结点,则需要获得适当的权限才能执行此操作。 这里就需要授权(通常称为 authz)

控制平面操作

控制平面操作控制并更改联机终结点。 这些操作包括在联机终结点和联机部署上进行的创建、读取、更新和删除 (CRUD) 操作。 对于联机终结点和部署,执行控制平面操作的请求将转到 Azure 机器学习工作区。

控制平面操作的身份验证

对于控制平面操作,可以通过一种方法对工作区验证客户端的身份:使用 Microsoft Entra 令牌

根据用例,可以从多个身份验证工作流中进行选择以获取此令牌。 用户标识还需要允许适当的 Azure 基于角色的访问控制 (Azure RBAC) 才能访问资源。

控制平面操作的授权

对于控制平面操作,用户标识需要允许适当的 Azure 基于角色的访问控制 (Azure RBAC) 才能访问资源。 具体而言,对于联机终结点和部署上的 CRUD 操作,需要标识来分配具有以下操作的角色:

操作 所需的 Azure RBAC 角色 为其分配角色的范围
创建/更新联机终结点和部署上的操作 所有者、参与者或任何允许 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/write 的角色 工作区
删除联机终结点和部署上的操作 所有者、参与者或任何允许 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/delete 的角色 工作区
通过 Azure 机器学习工作室创建/更新/删除联机终结点和部署上的操作 所有者、参与者或任何允许 Microsoft.Resources/deployments/write 的角色 工作区所属的资源组
读取联机终结点和部署上的操作 所有者、参与者或任何允许 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/read 的角色 工作区
从工作区提取用于调用(托管和 Kubernetes)联机终结点的 Azure 机器学习令牌 (aml_token) 所有者、参与者或任何允许 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action 的角色 endpoint
从工作区提取用于调用(托管和 Kubernetes)联机终结点的密钥 所有者、参与者或任何允许 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listKeys/action 的角色 endpoint
重新生成(托管和 Kubernetes)联机终结点的密钥 所有者、参与者或任何允许 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/regenerateKeys/action 的角色 endpoint
提取用于调用托管联机终结点的 Microsoft Entra 令牌 (aad_token) 不需要角色。 不适用

注意

登录后,可以直接从 Microsoft Entra ID 提取 Microsoft Entra 令牌 (aad_token),无需对工作区具有额外的 Azure RBAC 权限。

强制访问默认机密存储时用户标识的其他权限

如果打算使用机密注入功能,并在创建终结点时设置标志以强制访问默认机密存储,则用户标识需要有权从工作区连接读取机密。

使用系统分配的标识 (SAI) 创建终结点时,该标志设置为强制访问默认的机密存储,则在创建端点和在端点下创建部署时,用户身份需要有从工作区连接读取机密的权限。 此限制可确保只有具有读取机密权限的用户标识才能授予终结点标识读取机密的权限。

  • 如果用户标识无权从工作区连接读取机密,但尝试使用 SAI 创建终结点,并将终结点的标志设置为强制访问默认机密存储,则会拒绝终结点创建。

  • 同样,如果用户标识无权从工作区连接读取机密,但尝试在终结点下创建一个部署,而该终结点的标志设置为强制访问默认机密存储,则会拒绝部署创建。

当 (1) 使用 UAI 创建终结点时,(2)标志设置为强制访问默认机密存储,即使终结点使用 SAI,用户标识也不需要有权从工作区连接读取机密。 在这种情况下,终结点标识不会自动授予读取机密的权限,但你仍可以通过根据需要分配适当的角色来手动授予终结点标识此权限。 无论角色分配是自动执行还是手动完成,如果在部署定义中使用机密引用映射环境变量,则仍会触发机密检索和注入,并且它将使用终结点标识执行此操作。

有关管理对 Azure 机器学习工作区的授权的详细信息,请参阅“管理对 Azure 机器学习的访问权限”。

有关机密注入的详细信息,请参阅“联机终结点中的机密注入”。

数据平面操作

数据平面操作不会更改联机终结点,而是使用数据与终结点交互。 数据平面操作的一个示例是向联机终结点发送评分请求并从中获取响应。 对于联机终结点和部署,执行数据平面操作的请求将转到终结点的评分 URI。

数据平面操作的身份验证

对于数据平面操作,可以从三种方法中进行选择来对客户端进行身份验证,以将请求发送到终结点的评分 URI:

  • key
  • Azure 机器学习令牌 (aml_token)
  • Microsoft Entra 令牌 (aad_token)

有关如何验证客户端身份以执行数据平面操作的详细信息,请参阅如何验证联机终结点客户端的身份

数据平面操作的授权

对于数据平面操作,用户标识需要允许适当的 Azure 基于角色的访问控制 (Azure RBAC) 才能访问资源,前提是终结点设置为使用 Microsoft Entra 令牌 (aad_token)。 具体而言,对于联机终结点和部署上的数据平面操作,需要标识来分配具有以下操作的角色:

操作 所需的 Azure RBAC 角色 为其分配角色的范围
使用密钥或 Azure 机器学习令牌 (aml_token) 调用联机终结点。 不需要角色。 不适用
使用 Microsoft Entra 令牌 (aad_token) 调用托管联机终结点 所有者、参与者或任何允许 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/score/action 的角色 endpoint
使用 Microsoft Entra 令牌 (aad_token) 调用 Kubernetes 联机终结点 不需要角色。 不适用

终结点标识所需的权限

联机部署使用终结点标识(即与终结点关联的托管标识)运行用户容器。 终结点标识是支持 Azure RBACMicrosoft Entra ID。 因此,可以将 Azure 角色分配给终结点标识,以控制执行操作所需的权限。 此终结点标识可以是系统分配的标识 (SAI),也可以是用户分配的标识 (UAI)。 可以在创建终结点时决定是使用 SAI 还是 UAI。

  • 对于系统分配的标识,在创建终结点时系统会自动创建该标识,并自动分配具有基本权限(例如 Azure 容器注册表拉取权限和存储 Blob 数据读取者权限)的角色
  • 对于用户分配的标识,用户首先需要创建该标识,然后在创建终结点时将其与终结点相关联。 用户还负责根据需要向 UAI 分配适当的角色。

终结点标识的自动角色分配

如果终结点标识是系统分配的标识,方便起见,则会向终结点标识分配一些角色。

角色 说明 自动角色分配的条件
AcrPull 允许终结点标识从与工作区关联的 Azure 容器注册表 (ACR) 拉取映像。 终结点标识是系统分配的标识 (SAI)。
Storage Blob Data Reader 允许终结点标识从工作区的默认数据存储读取 Blob。 终结点标识是系统分配的标识 (SAI)。
AzureML Metrics Writer (preview) 允许终结点标识将指标写入工作区。 终结点标识是系统分配的标识 (SAI)。
Azure Machine Learning Workspace Connection Secrets Reader1 允许终结点标识从工作区连接读取机密。 终结点标识是系统分配的标识 (SAI)。 终结点是使用标志创建的,用于强制访问默认机密存储。 创建终结点的用户标识具有从工作区连接读取机密的相同权限。 2

1 有关 Azure Machine Learning Workspace Connection Secrets Reader 角色的详细信息,请参阅向标识分配权限

2 即使终结点标识为 SAI,如果未设置强制标志或用户标识没有权限,则此角色没有自动角色分配。 有关详细信息,请参阅“如何使用机密注入部署联机终结点”。

如果终结点标识是用户分配的标识,则不会有自动角色分配。 在这种情况下,需要根据需要手动将角色分配给终结点标识。

选择授权的权限和范围

Azure RBAC 允许定义和分配一组在特定范围具有允许的和/或拒绝的操作的角色。 可以根据业务需求自定义这些角色和范围。 以下示例作为起点,可以根据需要进行扩展。

用户标识示例

  • 为了控制上述控制平面操作表数据平面操作表中列出的所有操作,可以考虑使用包含权限操作 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*/actions 的内置角色 AzureML Data Scientist
  • 若要控制特定终结点的操作,请考虑使用范围 /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>/onlineEndpoints/<endpointName>
  • 若要控制工作区中所有终结点的操作,请考虑使用范围 /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>

终结点标识的示例

  • 若要允许用户容器读取 blob,请考虑使用包含权限数据操作 Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read 的内置角色 Storage Blob Data Reader

有关控制平面操作指南的详细信息,请参阅管理对 Azure 机器学习的访问。 有关角色定义、范围和角色分配的详细信息,请参阅 Azure RBAC。 若要了解已分配角色的范围,请参阅了解 Azure RBAC 的范围