Azure ML计算实例权限异常:用户无法访问自建实例
核心差异点
Terraform创建的AML计算实例和UI创建的实例,核心区别有两个:
- Terraform用订阅Owner权限的服务主体创建,且绑定了指定的用户分配托管身份;
- UI创建默认使用系统分配身份,创建者是普通用户账号,权限上下文和服务主体不同。
可能的问题原因
1. 计算实例的身份权限缺失
Terraform代码里,计算实例绑定了用户分配身份,并且依赖了密钥库策略和角色分配模块,这个身份已经拥有访问AML工作区关联资源(存储、密钥库等)的权限。而UI创建的实例如果用系统分配身份,大概率没有这些预配置的权限,导致用户访问时身份验证链断裂。
2. 角色缺少数据层面权限
你在资源组级别的角色(包括自定义角色AZURE-Datascience-AML-dev-Contributor)都没有配置dataActions,但访问计算实例的终端、Jupyter、VSCode需要数据层面的权限,仅靠资源管理层面的actions不足以完成访问授权。
3. 创建者权限上下文的继承问题
服务主体以Owner身份创建实例时,会自动为实例赋予完整的权限基础;普通用户哪怕有资源组Owner权限,在AML计算实例的内部权限映射逻辑上,和服务主体创建的实例存在差异,后续分配给其他用户时无法正常继承访问权限。
解决方案
方案1:UI创建时指定用户分配身份
在UI创建计算实例的步骤中,手动选择和Terraform代码里相同的用户分配身份(azurerm_user_assigned_identity.aml_user_assigned_identity),确保实例拥有和Terraform创建的实例一致的身份权限池。
方案2:补充角色的DataActions权限
更新自定义角色AZURE-Datascience-AML-dev-Contributor,添加计算实例相关的数据权限:
{ "properties": { "permissions": [ { "actions": [ "Microsoft.MachineLearningServices/workspaces/*/read", "Microsoft.MachineLearningServices/workspaces/*/action", "Microsoft.MachineLearningServices/workspaces/*/delete", "Microsoft.MachineLearningServices/workspaces/*/write", "Microsoft.Network/virtualNetworks/*/read", "Microsoft.Network/virtualNetworks/subnets/join/action" ], "dataActions": [ "Microsoft.MachineLearningServices/workspaces/computes/instances/*/read", "Microsoft.MachineLearningServices/workspaces/computes/instances/*/action" ], "notActions": [], "notDataActions": [] } ] } }
也可以直接使用Azure内置的AzureML Compute Instance Operator角色,该角色天然包含访问计算实例所需的全部数据权限。
方案3:直接在计算实例级别分配权限
对于已经通过UI创建的实例,手动为目标用户分配AzureML Compute Instance Operator或AzureML Data Scientist角色到计算实例资源本身,不依赖资源组级别的权限继承。
方案4:快速验证(排除网络问题)
虽然子网IP充足,但可以临时开启计算实例的公网IP(创建时勾选Enable public IP),测试是否能访问——如果能访问,说明是权限问题而非网络问题;如果还是不行,再回到权限排查。
验证步骤
- 按方案1创建实例,尝试访问终端、Jupyter;
- 更新角色权限后,重新分配给用户,测试UI创建的实例;
- 直接给UI创建的实例分配权限,验证访问情况。
内容的提问来源于stack exchange,提问作者BeGreen

