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

使用hvac操作Hashicorp Vault更新密钥丢失原有键值对问题

问题原因与解决方案

问题根源

HashiCorp Vault KV v2引擎的create_or_update_secret方法默认采用全量覆盖逻辑:你传入的secret字典会直接替换当前版本的所有键值对,而非仅更新指定键。这就是执行代码后k2丢失的原因——你只传入了k1,Vault便用这个单键字典覆盖了原有的k1+k2组合。

UI中的「创建新版本」功能本质是先读取当前版本的所有键值对,修改指定项后再提交完整字典,以此实现增量更新的效果。

解决方法

要复刻UI的行为,需先读取当前版本的secret,将新键值对合并到原有字典中,再提交完整的合并结果:

import hvac

client = hvac.Client(url='http://localhost:8200', token='hvs.xxxxxxxxxx')

try:
    # 读取当前版本的secret数据
    current_data = client.secrets.kv.v2.read_secret_version(path='foo')['data']['data']
    # 合并新键值对(新值会覆盖原有同名键)
    updated_data = {**current_data, 'k1': 'test123'}
except hvac.exceptions.InvalidPath:
    # 如果路径不存在,直接使用新键值对创建
    updated_data = {'k1': 'test123'}

# 提交更新,生成新版本
client.secrets.kv.v2.create_or_update_secret(path='foo', secret=updated_data)

补充说明

  • 若业务场景需要频繁增量更新,建议封装一个工具函数,统一处理「读取-合并-提交」流程
  • 注意并发场景:如果在读取和提交之间有其他客户端修改了secret,会覆盖中间的修改。若需强一致性,可考虑使用Vault的版本号控制(指定version参数)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:12:33