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

如何用Python hvac库递归列出Vault指定引擎下所有目录与密钥

实现方案

要递归获取指定KV V2引擎下的全量目录和密钥,按以下逻辑实现即可:

  1. 调用list_secrets查询某路径下的条目时,若查询引擎根目录,path参数传空字符串'',单独指定mount_point为你的引擎名称,不要把引擎名填入path参数
  2. 递归判断返回的条目类型:结尾带/的是子目录,需要再次调用list接口遍历;不带/的是密钥,调用读接口拉取内容
  3. 结果可直接组装为嵌套字典,导出为JSON格式

完整可运行代码

import os
import json
import hvac

# 初始化Vault客户端
client = hvac.Client(
    url=os.environ['VAULT_URL'],
    token=os.environ['VAULT_TOKEN']
)

def get_all_secrets_from_engine(mount_point: str, current_path: str = '') -> dict:
    """
    递归获取指定KV V2引擎下的所有密钥
    :param mount_point: 引擎挂载点名称
    :param current_path: 当前遍历的路径,初始调用留空即可
    :return: 嵌套结构的字典,对应目录和密钥内容
    """
    result = {}
    # 列出当前路径下的所有条目
    list_resp = client.secrets.kv.v2.list_secrets(
        path=current_path,
        mount_point=mount_point
    )
    keys = list_resp['data']['keys']
    
    for key in keys:
        if key.endswith('/'):
            # 是子目录,递归遍历
            sub_dir_name = key.rstrip('/')
            result[sub_dir_name] = get_all_secrets_from_engine(
                mount_point=mount_point,
                current_path=f"{current_path}{key}"
            )
        else:
            # 是密钥,读取最新版本内容
            secret_resp = client.secrets.kv.v2.read_secret_version(
                path=f"{current_path}{key}",
                mount_point=mount_point
            )
            result[key] = secret_resp['data']['data']
    return result

# 调用示例,替换为你的引擎名称
engine_name = 'myEngine'
all_secrets = get_all_secrets_from_engine(engine_name)

# 打印JSON格式结果
print(json.dumps(all_secrets, indent=2, ensure_ascii=False))

注意事项

  • 该实现默认你的账号拥有该引擎下所有路径的list和read权限,否则会抛出权限异常
  • 如果需要保留密钥的版本信息、元数据等内容,可以自行修改读取密钥部分的赋值逻辑,把需要的字段存入结果即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:15:03