python - 列出 Vault 中的所有目录和 secret (递归)

标签 python hashicorp-vault vault

我正在用 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)

这显然不起作用,但如果我同时给它pathmount_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 :

Vault UI view of keys

关于python - 列出 Vault 中的所有目录和 secret (递归),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69124511/

相关文章:

docker - 无法从 pod 容器内访问 kubernetes api

c# - Vaultsharp : System. AggregateException: 'One or more errors occurred. ({"错误": ["no handler for route ' kv-v2/data'

python - 如何仅使用返回的元组的一部分

python - 在 Python 中将任何可迭代对象转换为数组

azure-keyvault - Vault .NET - 版本化 K/V secret 引擎的无效路径

active-directory - 如何在 Hashicorp Vault 中对成员资格搜索进行分组

kubernetes - 将 KOPS CA key 和证书存储在 Vault 中

python - 重定向的 URL 列表比较

python - 在浏览器中将图像作为附件发送