Databricks访问Azure Key Vault遇PERMISSION_DENIED错误求助
错误信息分析
com.databricks.common.client.DatabricksServiceHttpClientException: PERMISSION_DENIED: Invalid permissions on the specified KeyVault. 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=/
Action: 'Microsoft.KeyVault/vaults/secrets/getSecret/action'
Resource: '/subscriptions//resourcegroups//providers/microsoft.keyvault/vaults//secrets/serviceprincipalid'
Assignment: (not found)
DenyAssignmentId: null
DecisionReason: null
Vault: itidevkv2;location=eastus
","innererror":{"code":"ForbiddenByRbac"}}}"
从错误能看出核心问题是RBAC权限未正确匹配,虽然已配置Contributor和Key Vault Reader,但缺少读取密钥内容的具体权限,且系统未找到对应权限分配记录。
具体解决步骤
- 核对服务主体一致性:确认Azure Key Vault中授权的服务主体,和Databricks密钥范围关联的SP ID完全一致,避免因ID输入错误导致权限不生效。
- 添加Key Vault Secrets User角色:Key Vault Reader仅能读取密钥元数据,无法获取密钥内容。需在Azure Key Vault的「访问控制(IAM)」中,给目标服务主体添加Key Vault Secrets User角色,该角色包含
Microsoft.KeyVault/vaults/secrets/getSecret/action权限,匹配错误中缺失的操作。 - 检查Vault访问策略(旧模式):如果Key Vault未使用RBAC而是采用传统访问策略,需在「访问策略」页面给服务主体分配「机密权限」下的「获取」权限,同时确保「应用程序」选项选中对应服务主体。
- 等待权限生效:Azure RBAC权限变更通常需要5-15分钟完成全局同步,跨区域场景可能耗时更久,修改后不要立即测试。
- 验证密钥范围配置:重新检查Databricks密钥范围关联的Key Vault订阅ID、资源组、Vault名称是否准确,可在工作区「密钥范围」页面编辑确认。
- 排查拒绝分配规则:尽管错误中DenyAssignmentId为null,仍需检查Key Vault的「访问控制(IAM)」->「拒绝分配」,确认没有意外规则限制服务主体权限。
内容的提问来源于stack exchange,提问作者Azat Baatyrbekov

