You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks笔记本更新秘钥失败:dbutils.secrets.put报错及KeyVault疑问

在Databricks笔记本中更新密钥的解决方案

为什么dbutils.secrets.put会报错

dbutils.secrets API没有put方法,这是Databricks的设计限制——该API仅提供读取密钥的能力(如get、list),不支持在笔记本中直接写入或更新密钥,无论密钥范围是Databricks托管还是云厂商托管的。你遇到的报错是正常现象,不需要额外激活任何dbutils功能。

方案1:更新Databricks托管的密钥范围中的密钥

若要在笔记本中实现更新,需通过调用Databricks REST API完成,步骤如下:

  1. 获取当前笔记本的API Token用于身份认证
  2. 发送POST请求到/api/2.0/secrets/put端点

示例代码:

import requests
import json

# 获取当前笔记本的API Token与工作区URL
api_token = dbutils.notebook.entry_point.getDbutils().notebook().getContext().apiToken().get()
workspace_url = dbutils.notebook.entry_point.getDbutils().notebook().getContext().apiUrl().get()

# 构建请求参数
payload = {
    "scope": "你的密钥范围名称",
    "key": "要更新的密钥名称",
    "string_value": "新的access token/refresh token内容"
}

# 发送更新请求
response = requests.post(
    f"{workspace_url}/api/2.0/secrets/put",
    headers={"Authorization": f"Bearer {api_token}"},
    json=payload
)

# 校验结果
if response.status_code == 200:
    print("密钥更新成功")
else:
    print(f"更新失败:{response.text}")

注意:执行代码的笔记本会话需拥有密钥范围的WRITE权限,否则会返回权限错误。

方案2:更新KeyVault托管的密钥范围中的密钥

对于KeyVault托管的密钥范围,Databricks仅作为引用层,实际密钥存储在云厂商的KeyVault服务中。因此无需在Databricks内操作,直接更新KeyVault中的对应密钥即可,Databricks会自动同步最新值(通常延迟在几秒内)。

在笔记本中可通过云厂商SDK直接更新KeyVault密钥,以Azure Key Vault为例:

  1. 确保集群拥有KeyVault的Set Secret权限
  2. 使用azure-keyvault-secrets库执行更新

示例代码:

from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

# 你的KeyVault URL
key_vault_url = "https://你的keyvault名称.vault.azure.net/"

# 初始化认证与密钥客户端
credential = DefaultAzureCredential()
client = SecretClient(vault_url=key_vault_url, credential=credential)

# 更新密钥(不存在则创建,存在则生成新版本)
client.set_secret("密钥名称", "新的access token/refresh token内容")

print("KeyVault密钥更新成功")

内容的提问来源于stack exchange,提问作者play_something_good

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:39:56