我正在用 Python 编写一个方法,它接受引擎名称,并列出该目录中的所有子目录和 secret 。我一直在研究 HVAC,并且能够使用以下命令列出特定目录中的所有 secret :
client = hvac.Client()
client = hvac.Client(
url=os.environ['VAULT_URL'],
token=os.environ['VAULT_TOKEN']
)
path='myDirectory'
mount_point='myEngine'
response=client.secrets.kv.read_secret_version(
path=path,
mount_point=mount_point
)
print(response['data']['data'])
如上所述,这确实成功工作,并且它确实输出指定路径内的内容,但如果我想列出 mount_point
内的所有内容,我找到了应该使用的答案list_secrets
,但如果不指定path
,我似乎无法让 list_secrets
工作。
我尝试了以下方法,但收效甚微。
mount_point = 'myEngine'
list_response = client.secrets.kv.v2.list_secrets(
path=mount_point
)
list_folders = list_response['data']['keys']
print(list_folders)
这显然不起作用,但如果我同时给它path
和mount_point
,它就会起作用,但这给了我路径的内容,并且我需要引擎中的所有内容。
我知道给它提供路径的 mount_point
似乎很奇怪,但我真的想不出还能做什么来列出整个 mount_point
并且我'我见过与此类似的旧示例。
有没有一种方法可以像我想要的那样获取 JSON 输出,或者甚至是一种仅列出引擎本身内部的所有内容(递归地)然后自己构建 json 的方法,那就太好了。
最佳答案
您可以使用client.adapter.request()
功能来实现您的需求。将挂载名称传递到以下调用中:
client.adapter.request("GET", "v1/<mount name>/metadata/?list=1")
这将返回 JSON,您可以解析该 JSON 以获取您要查找的键。下面的示例 JSON:
{'request_id': '16fedd1b-50b3-f46a-44c7-22d0a0c8edef', 'lease_id': '', 'renewable': False, 'lease_duration': 0, 'data': {'keys': ['test', 'test2']}, 'wrap_info': None, 'warnings': None, 'auth': None}
上面的输出对应于 Vault UI 中的以下 View :
关于python - 列出 Vault 中的所有目录和 secret (递归),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69124511/