dsh-credentials-vault:HashiCorp Vault 后端

前言

DeepSeek Harness (DSH) 的 credentials-local 插件将 API 密钥存储在 agent 主机上的文件中。文件权限虽然能限制普通用户,但无法防止模型进程本身访问密钥,且难以在多台机器间统一轮换或审计。

dsh-credentials-vault 插件通过对接 HashiCorp Vault,解决了上述问题。它将提供者密钥从主机移至 Vault,通过 AppRole 机制提供机器认证,支持无需重启的密钥轮换,并利用 Vault 的审计设备记录所有读取行为。

是什么

dsh-credentials-vault 是一个为 DSH credential seam (ctx.credentials) 提供的 HashiCorp Vault 后端。它由用户 tancheng33 维护,许可证为 MIT。

该插件的核心作用是替代 credentials-local,使 DSH 在无头环境、容器或 CI 代理中运行时,能够安全地获取和轮换密钥,而无需在 agent 主机上保存长期有效的密钥文件。

核心功能

根据已核实的事实,该插件具备以下能力:

  • 集中化轮换:在 Vault 中修改密钥后,DSH 代理即可生效。
  • AppRole 机器认证:代理主机持有的是 AppRole 的 Role ID 和 Secret ID,用于获取临时令牌,而非长期密钥。
  • 无需重启的密钥轮换:通过 KV v2 的 CAS 机制和实时读取(默认配置),修改 Vault 中的值后,下一次 LLM 请求即可使用新密钥,无需重启 agent 进程。
  • 审计支持:利用 Vault 的审计设备记录所有密钥读取操作。
  • 环境兼容:支持无头模式、容器环境以及 CI 代理。
  • 并发控制:使用 KV v2 的 Compare-and-Swap (CAS) 机制防止并发写入冲突。

安装与启用

安装该插件需要使用 DSH 的插件管理命令。

dsh plugin --profile <name> add dsh-credentials-vault

安装后,需要在 DSH 的配置文件中覆盖默认行为。DSH 的插件机制通过 cordis.patch.yml 文件来定义实现。

典型用法

配置文件(如 cordis.patch.yml)中需要声明 id 为 credentials-vault,并填入 Vault 的连接信息。

- id: credentials-vault
  config:
    address: https://vault.internal:8200
    mount: secret
    path: dsh
    kvVersion: 2
    approleMount: approle
    roleIdRef: VAULT_ROLE_ID
    secretIdRef: VAULT_SECRET_ID
    environmentWins: true
    cacheTtlMs: 0
    timeoutMs: 10000

在 Vault 中,密钥以扁平映射的形式存储在指定的路径下。DSH 会根据凭证引用(如 DEEPSEEK_API_KEY)作为键名读取。

vault kv put secret/dsh DEEPSEEK_API_KEY=sk-... OPENAI_API_KEY=sk-...

配置说明

安装与配置主要涉及以下参数:

配置项 说明
address Vault 服务地址,默认为 http://127.0.0.1:8200。
namespace Vault Enterprise 命名空间,空字符串表示不使用。
mount KV secrets engine 的挂载点,默认为 secret。
path 密钥存储的子路径,默认为 dsh。
kvVersion KV 引擎版本,默认为 2,支持 CAS 和版本控制。
tokenRef 环境变量名,用于存储静态 Token。
roleIdRef / secretIdRef 环境变量名,用于存储 AppRole 的 Role ID 和 Secret ID。
readOnly 是否拒绝写入操作,默认为 false。
environmentWins 环境变量是否覆盖 Vault 配置,默认为 true。
cacheTtlMs 缓存时间,0 表示每次请求都读取 Vault,无缓存。
timeoutMs 请求超时时间,默认为 10000。

注意:配置文件中不应包含任何实际的密钥。机密信息(如 Token、Role ID、Secret ID)必须通过环境变量注入,由插件读取。

适用场景与注意

该插件适合需要严格审计、密钥集中管理或在 CI/CD 环境中运行的场景。

在使用前,需注意以下限制与特性:

  1. 仅支持 KV Secrets Engine:插件目前仅支持 HashiCorp Vault 的 KV secrets engine,不支持数据库、PKI 或 transit 等其他类型的动态密钥引擎。
  2. 单一路径与扁平映射:所有凭证引用必须存储在同一路径下的扁平 Key-Value 映射中。
  3. AppRole 机制:AppRole 认证模式下,插件不支持令牌的自动续约(Renewal),仅支持定期重新登录。这对于高频调用的场景影响极小。
  4. 外部修改无感知:如果通过其他方式(非插件)修改了 Vault 中的密钥,DSH 代理不会自动感知并更新缓存,除非缓存过期或重启。
  5. 运行时权限:该插件不阻止正在运行的 agent 进程使用其已获取的授权密钥进行网络请求。这是密钥安全边界的问题,属于网络层(如 dsh-egress-guard)的职责,而非凭证加载插件的职责。

总结

dsh-credentials-vault 提供了将 DeepSeek Harness 的凭证管理从本地文件迁移至 HashiCorp Vault 的能力。通过 AppRole 机制和无头支持,它满足了现代 DevOps 和安全审计的需求。所有配置项和源码可参考 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜