使用服务主体挂载ADLS到Databricks时KeyVault权限不足问题求助
解决Databricks挂载ADLS时KeyVault权限拒绝问题
错误分析
从报错信息可定位核心问题:
com.databricks.common.client.DatabricksServiceHttpClientException: PERMISSION_DENIED: Invalid permissions on the specified KeyVault https://azkv*.vault.azure.net/. Wrapped Message: Status code 403, {\"error\": {\"code\":\"Forbidden\",\"message\": \"Caller is not authorized to perform action on resource. If role assignments, deny assignments or role definitions were changed recently, please observe propagation time. Caller: name=AzureDatabricks;appid=xxxxxxxxxxxxxxxxxxxxxx;oid=xxxxxxxxxxxxxx;iss=https://sts.windows.net/xxxxxxxxxxxxxxxxxxx9945/ Action: 'Microsoft.KeyVault/vaults/secrets/getSecret/action' Resource: '/subscriptions/6b60a61d-3e92-4501-8794-fd7725066113/resourcegroups/streamproject/providers/microsoft.keyvault/vaults/azkv*/secrets/clientsecret' Assignment: (not found) DecisionReason: 'DeniedWithNoValidRBAC' Vault: azkv*;location=eastus\" \"innererror\":{\"code\":\"ForbiddenByRbac\"} } }
执行挂载的Azure Databricks服务主体缺少KeyVault读取密钥的RBAC权限,具体缺失Microsoft.KeyVault/vaults/secrets/getSecret/action操作权限。
解决方案
1. 为Databricks服务主体分配Key Vault Secrets User角色
- 登录Azure门户,找到目标KeyVault(
azkv*) - 进入访问控制(IAM) 页面
- 点击添加 → 添加角色分配
- 在角色列表中选择Key Vault Secrets User(该角色包含读取密钥的全部必要权限)
- 切换到成员标签页,点击选择成员,搜索报错中
appid对应的服务主体(或名称AzureDatabricks),选中后完成添加 - 点击查看+分配确认角色分配
2. 等待权限传播
RBAC权限变更需5-15分钟生效,请勿立即测试挂载,等待权限完全传播后重试。
3. 验证权限(可选)
用Azure CLI确认服务主体已获得对应权限:
az role assignment list --assignee <报错中的appid值> --scope "/subscriptions/6b60a61d-3e92-4501-8794-fd7725066113/resourcegroups/streamproject/providers/microsoft.keyvault/vaults/azkv*"
输出应包含Key Vault Secrets User角色的分配记录。
注意事项
若KeyVault启用了Azure RBAC权限模型,旧的KeyVault访问策略会失效,必须通过RBAC分配权限,禁止混用两种权限模型。
内容的提问来源于stack exchange,提问作者Boris
相关产品推荐
相关产品推荐

