Azure ML私有工作区访问私有存储账户SAS请求403禁止访问问题
Azure ML工作区专用终结点下存储账户访问403问题排查与解决方案
环境配置
- Azure机器学习(AML)工作区已配置专用终结点
- 关联存储账户同样配置专用终结点,且禁用公共访问,网络配置如下:

问题现象
从门户启动AML工作区后,多数功能正常,但某API调用返回403 Forbidden错误:
https://0121921-12012191-12121.workspace.eastus2.api.azureml.ms/notebook/v2.0/subscriptions/<sub-ib>/resourceGroups/<rg>/providers/Microsoft.MachineLearningServices/workspaces/<aml-name>/storage/sasurl?expirationInMinutes=60&containerId=391ff5ac-6576-460f-ba4d-7e03433c68b6
错误响应详情:
{ "error": { "code": "UserError", "severity": null, "message": "Request authorization to storage account failed. Storage account might be behind a VNET.", "messageFormat": null, "messageParameters": null, "referenceCode": null, "detailsUri": null, "target": null, "details": [], "innerError": { "code": "ForbiddenError", "innerError": null }, "debugInfo": null, "additionalInfo": null }, "correlation": { "operation": "c738a5a6cc2342328058bc3ad77a9520", "request": "1946a6fcdffd7236" }, "environment": "eastus2", "location": "eastus2", "time": "2024-07-08T07:17:00.8941898+00:00", "componentName": "notebook-instance", "statusCode": 403 }
核心疑惑
从错误信息可推断AML无法访问存储账户生成SAS令牌,但AML与存储账户的多数集成已通过RBAC处理,且已配置正确角色,计算资源、笔记本均正常工作,仅该API调用失败,不解为何该服务需要SAS令牌。
已尝试的无效操作
- 将AML实例直接添加到存储账户的网络允许列表(资源实例)
- 添加访问AML所用设备的公网IP到存储账户网络允许列表
此外,已启用存储账户(账户级)诊断日志,但未找到SAS令牌生成相关的失败请求日志,无法获取来源IP添加白名单。
合规解决方案建议
验证专用终结点的网络连通性
- 确认AML工作区的专用终结点与存储账户的专用终结点处于同一VNet或通过对等互连的VNet中,确保没有网络安全组(NSG)或防火墙规则阻止两者之间的流量。
- 检查存储账户的专用终结点DNS配置是否正确,确保AML服务能通过专用终结点解析存储账户的私有IP。
配置AML服务托管标识权限
- 确保AML工作区的系统托管标识拥有存储账户的Storage Account Contributor或Storage Blob Data Contributor角色,该标识需要权限生成SAS令牌。
- 若使用用户托管标识,需确认该标识已被AML工作区关联,并拥有对应的存储账户权限。
检查存储账户的私有端点策略
- 确认存储账户的私有端点是否允许来自AML工作区所在VNet的流量,可在存储账户的网络配置中,检查“允许的虚拟网络”是否包含AML工作区的VNet(即使已配置专用终结点,部分场景仍需显式添加)。
启用AML工作区的虚拟网络注入
- 若AML工作区未配置虚拟网络注入,考虑将工作区注入到与存储账户相同的VNet中,确保服务内部流量完全在VNet内传输,避免依赖公共网络。
排查笔记本服务的流量路径
- 该API来自
notebook-instance组件,需确认笔记本服务的流量是否通过专用终结点访问存储账户,而非尝试公共访问。可检查AML工作区的网络隔离设置,确保笔记本服务启用了VNet隔离。
- 该API来自
内容的提问来源于stack exchange,提问作者Jayendran
相关产品推荐
相关产品推荐

