通过CLI创建Azure KeyVault托管的Databricks密钥范围遇矛盾错误
解决CLI创建Azure KeyVault托管Databricks密钥范围的矛盾错误方案
问题根源
近期Databricks CLI更新后,userAADToken参数的传递逻辑发生了变更:旧版本允许直接在命令中指定该字段,但新版本的API请求结构调整后,该字段既不被顶层CLI参数接受,又被底层API要求必须提供,导致出现矛盾报错。
2024年可行的两种配置方案
方案1:利用环境变量传递AAD令牌(推荐)
获取Databricks服务的AAD访问令牌:
az account get-access-token --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d --query accessToken -o tsv(
2ff814a6-3304-4ab8-85cb-cd0e6f879c1d是Databricks服务的固定资源ID)将令牌存入环境变量,CLI会自动读取该变量:
export DATABRICKS_AAD_TOKEN=$(az account get-access-token --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d --query accessToken -o tsv)执行密钥范围创建命令,无需显式指定
userAADToken:databricks secrets create-scope \ --scope <你的密钥范围名称> \ --scope-backend-type AZURE_KEYVAULT \ --backend-config "AzureKeyVaultResourceId=/subscriptions/<订阅ID>/resourceGroups/<资源组>/providers/Microsoft.KeyVault/vaults/<AKV名称>" \ --backend-config "AzureKeyVaultDNSName=https://<AKV名称>.vault.azure.net/"
方案2:直接调用Databricks REST API(绕过CLI参数冲突)
如果CLI仍存在兼容性问题,可直接使用curl调用API,手动构造合规请求:
curl -X POST \ https://<你的Databricks工作区URL>/api/2.0/secrets/scopes/create \ -H "Authorization: Bearer <你的Databricks个人访问令牌>" \ -H "X-Databricks-Azure-SP-Management-Token: $(az account get-access-token --resource https://vault.azure.net --query accessToken -o tsv)" \ -d '{ "scope": "<密钥范围名称>", "scope_backend_type": "AZURE_KEYVAULT", "backend_config": { "azure_keyvault_resource_id": "/subscriptions/<订阅ID>/resourceGroups/<资源组>/providers/Microsoft.KeyVault/vaults/<AKV名称>", "azure_keyvault_dns_name": "https://<AKV名称>.vault.azure.net/" } }'
关键注意事项
- 必须使用
0.200.0及以上版本的Databricks CLI,旧版本参数逻辑已完全过时。 - 执行命令的账号需同时具备:
- Databricks工作区的
Secret Manager权限 - Azure KeyVault的
密钥管理参与者角色,或自定义访问策略中允许密钥的获取、列出操作
- Databricks工作区的
- 禁止在CLI命令中显式传递
userAADToken参数,新版本会通过环境变量或内部令牌流程自动处理该字段
内容的提问来源于stack exchange,提问作者Andrew McDevitt
相关产品推荐
相关产品推荐

