在Azure ML运行作业脚本时无法访问ADLS Gen2数据的认证问题
解决Azure ML管道访问ADLS Gen2权限被拒问题
针对你遇到的管道作业无法访问ADLS Gen2但笔记本环境正常的问题,可按以下步骤排查解决:
1. 修正权限角色类型
已分配的Blob Storage Contributor是存储账户的管理角色,不具备数据访问权限。需为AML计算集群的托管身份和工作区身份分配Storage Blob Data Contributor角色:
- 进入ADLS Gen2存储账户的「访问控制(IAM)」页面
- 添加角色分配,选择
Storage Blob Data Contributor,将AML计算集群的系统托管身份、工作区身份添加为目标主体
2. 调整数据输入路径配置
确保data_input_path使用Azure ML数据存储的URI格式,而非直接的ADLS路径:
- 先在AML工作区中注册指向ADLS Gen2的数据存储
- 将输入路径改为:
data_input_path = "azureml://datastores/[你的ADLS数据存储名]/paths/[数据文件路径]"
这种方式会让AML自动使用预配置的身份进行认证,避免直接路径的权限问题。
3. 验证计算集群的托管身份
- 进入AML计算集群
my-model-compute的「标识」页面,确认已启用系统分配的托管身份 - 确保该托管身份已被添加到ADLS Gen2的
Storage Blob Data Contributor角色中
4. 规范脚本内的认证逻辑
确保data_prep.py中使用DefaultAzureCredential获取凭据,而非硬编码或其他过时方式:
from azure.identity import DefaultAzureCredential from azure.storage.filedatalake import DataLakeServiceClient # 使用默认凭据访问ADLS Gen2 credential = DefaultAzureCredential() service_client = DataLakeServiceClient( account_url="https://<你的存储账户名>.dfs.core.windows.net", credential=credential ) # 后续读取数据逻辑...
在AML作业环境中,DefaultAzureCredential会自动调用计算集群的托管身份,无需额外配置。
5. 排查网络限制
如果ADLS Gen2配置了防火墙或专用端点:
- 确保AML工作区和计算集群所在的虚拟网络已被加入ADLS的允许访问列表
- 检查是否开启了「允许受信任的Microsoft服务访问此存储账户」选项
内容的提问来源于stack exchange,提问作者Keyser
相关产品推荐
相关产品推荐

