You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何相同凭证下Azure ML Flow API在Azure计算节点出现403未授权?

解决Azure计算节点上MLflow下载模型403未授权问题

问题核心

在Azure计算节点的Docker容器中,通过az login -u USERNAME -p PASSWORD登录成功后,调用mlflow.artifacts.download_artifacts()仍返回403错误;本地WSL环境下Docker运行正常,但复制本地有效令牌到节点~/.azure/msal_token_cache.json也无法解决问题。

可行解决方案

1. 改用服务主体认证替代用户名密码登录

用户令牌的存储和上下文依赖容易出问题,换成服务主体认证更稳定:

  • 先创建服务主体,给它分配模型注册表及关联存储账户的必要权限(比如Storage Blob Data Reader或AzureML Data Scientist角色)
  • 容器脚本里用以下命令登录:
    az login --service-principal -u <SP_CLIENT_ID> -p <SP_CLIENT_SECRET> --tenant <TENANT_ID>
    
  • 确认服务主体对模型所在的存储资源有数据访问权限(别只给管理权限)

2. 强制MLflow使用Azure CLI凭据

MLflow可能没正确读取Azure CLI的令牌,在代码里显式指定:

import mlflow
from azure.identity import AzureCliCredential

# 获取Azure CLI的凭据
credential = AzureCliCredential()
# 为MLflow设置令牌环境变量
import os
os.environ["AZUREML_TOKEN_CREDENTIAL"] = credential.get_token("https://ml.azure.com/.default").token

3. 统一Docker容器的用户上下文

计算节点容器默认用root运行,Azure CLI的令牌缓存可能受用户权限影响,试试创建非root用户:
在Dockerfile里添加:

RUN useradd -m mluser
USER mluser

脚本里用这个用户执行az login,MLflow也用同一用户运行,确保令牌存储路径和读取上下文一致。

4. 直接用Azure ML SDK下载模型

绕开MLflow的认证问题,用Azure ML SDK直接拉取模型:

from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

ml_client = MLClient.from_config(credential=DefaultAzureCredential())
model = ml_client.models.get(name="你的模型名", version="你的模型版本")
model_path = ml_client.models.download(model=model, download_path="./model")

关键排查点

  • 检查权限:确认登录的主体(用户/服务主体)有模型注册表和存储账户的数据访问权限,而非仅管理权限
  • 网络验证:计算节点的NSG或防火墙是否允许访问模型注册表和存储账户的端点
  • 日志调试:开启MLflow debug日志(export MLFLOW_DEBUG=1),查看实际使用的令牌是否正确

内容的提问来源于stack exchange,提问作者jhlavka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:00:22