无法向Azure KeyVault支持的Databricks范围添加密钥报错
问题现象
在Databricks创建Azure Key Vault(简称AKV)支持的密钥范围abc成功后,执行命令写入密钥时触发报错:
{"error_code":"BAD_REQUEST","message":"Cannot write secrets to Azure KeyVault-backed scope abc"}
复现操作基于Windows CMD环境,执行流程如下:
- 在Azure平台创建Key Vault资源
- 执行命令生成Databricks所需AAD令牌:
az account get-access-token --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d - 将生成的AAD令牌添加到Windows系统环境变量
- 执行命令将AAD令牌写入Databricks配置文件:
databricks configure --aad-token - 执行命令创建AKV支持的密钥范围:
databricks secrets create-scope --scope abc --scope-backend-type AZURE_KEYVAULT --resource-id <keyvault-id> --dns-name <keyvault-dns> --initial-manage-principal users - 执行命令向范围添加密钥时触发上述报错:
databricks secrets put --scope abc --key abc-key
根本原因
Azure Key Vault作为后端的Databricks密钥范围本质是只读映射层,不支持通过Databricks Secrets CLI/API直接写入密钥。
这类密钥范围不会在Databricks侧存储任何机密内容,仅对AKV中已存在的机密做映射引用,Databricks本身没有开放向对接AKV实例写入机密的通道,所有写入类操作都会直接被拦截返回请求错误。
排查解决步骤
- 先确认密钥范围属性:执行
databricks secrets get-scope --scope abc,如果返回结果中scope_backend_type字段值为AZURE_KEYVAULT,即可确认是只读映射范围,无需额外排查CLI配置、令牌权限类问题。 - 直接在Azure Key Vault侧创建所需机密:进入对应AKV资源页,打开「机密」菜单选择「生成/导入」,填入和你计划在Databricks侧使用的key名完全一致的机密名称、对应机密值后保存即可。
- 验证映射可用性:AKV侧创建完机密后无需在Databricks做额外同步操作,执行
databricks secrets get --scope abc --key <你在AKV创建的机密名称>,如果能正常返回密钥元数据(密钥值默认掩码不可见),即表示配置生效,可直接在Databricks笔记本、作业中引用该密钥。 - 若AKV创建机密后Databricks侧无法读取,检查两类权限配置:
- Databricks工作区用于访问AKV的托管标识/服务主体,已在AKV访问策略中被授予「机密获取」权限
- 当前执行CLI操作的AAD账号,同时拥有AKV的机密读取权限、Databricks工作区对应密钥范围的读取权限
- 如果你确实需要通过
databricks secrets put命令直接写入密钥,不要创建AKV后端类型的密钥范围,改为创建Databricks原生托管的密钥范围即可,这类范围的机密存储在Databricks自有托管存储中,支持通过CLI、API完成增删改查操作。
内容的提问来源于stack exchange,提问作者sotn
相关产品推荐
相关产品推荐

