如何基于Azure用户凭据获取ARM API的access_token并保护ML端点
基于Azure AD用户身份保护ML端点的实现方案
一、核心可行性说明
完全可以实现基于Azure AD用户凭据和权限的ML端点保护,Azure ML服务原生支持Azure AD身份验证,可替代服务主体实现用户级别的访问控制。
二、具体实现步骤
1. 配置ML端点的身份验证模式
将你的ML评分端点的身份验证设置为Azure AD令牌认证(而非密钥认证),确保只有携带有效Azure AD令牌的请求才能被处理。
2. 通过Azure RBAC实现权限细分
利用Azure角色访问控制,为用户分配不同粒度的权限,满足“大量用户在工作区但仅部分可访问端点”的需求:
- 关键权限:控制用户能否调用评分端点的核心权限是
Microsoft.MachineLearningServices/workspaces/endpoints/scoring/invoke - 内置角色选择:
- 若要允许用户调用端点,可分配Azure ML评分端点参与者(
Microsoft.MachineLearningServices/workspaces/endpoints/scoring/participant)角色,该角色仅包含调用评分端点的权限 - 工作区的普通用户可分配Azure ML读者角色,仅能查看工作区资源,无法调用评分端点
- 若要允许用户调用端点,可分配Azure ML评分端点参与者(
- 自定义角色:如果内置角色无法满足需求,可创建自定义RBAC角色,精确指定允许的操作(仅包含
invoke权限),避免过度授权
3. 用户获取访问令牌调用端点
用户可通过以下方式获取自己的Azure AD令牌,用于调用ML端点:
- Azure CLI:
命令返回的az account get-access-token --resource https://ml.azure.comaccessToken字段即为可用的令牌 - PowerShell:
Get-AzAccessToken -ResourceUrl https://ml.azure.com - 代码方式(以Python为例):使用MSAL库实现用户交互式登录获取令牌
import msal client_id = "<你的Azure AD应用客户端ID>" authority = "https://login.microsoftonline.com/<你的租户ID>" scope = ["https://ml.azure.com/.default"] app = msal.PublicClientApplication(client_id, authority=authority) result = app.acquire_token_interactive(scopes=scope) if "access_token" in result: access_token = result["access_token"] # 使用access_token调用ML端点
4. 端点验证逻辑
当用户携带令牌请求ML端点时,Azure会自动完成以下验证:
- 验证令牌的有效性(是否过期、签名是否合法)
- 检查令牌对应的用户是否具备该评分端点的
invoke权限 - 仅通过验证的请求会被处理,未授权用户的请求会被直接拒绝
三、匹配你的具体需求
- 凭据与权限验证:通过Azure AD令牌验证用户身份,同时通过RBAC检查用户是否拥有调用权限,双重验证确保合规
- 工作区用户细分:给工作区用户分配不同RBAC角色,仅为需要访问端点的用户分配具备
invoke权限的角色,其余用户分配只读或更低权限角色 - 授权用户准入:未被分配对应权限的用户,即使获取了Azure AD令牌,调用端点时也会因权限不足被拒绝,实现精准访问控制
内容的提问来源于stack exchange,提问作者Onki
相关产品推荐
相关产品推荐

