在 HashiCorp Vault 中,我创建了秘密引擎
a
,如下所示:
vault secrets enable -path=a kv
Success! Enabled the kv secrets engine at: a/
然后我创建一个这样的秘密:
vault kv put -mount=a b c=d
Success! Data written to: a/b
可以获取数据:
vault kv get -mount=a b
== Data ==
Key Value
--- -----
c d
现在我想使用Python HVAC库:
client = hvac.Client(...) # client is initialized and authenticated
client.secrets.kv.v2.read_secret(path='b', mount_point='a') # this throws exception:
hvac.exceptions.InvalidPath: None, on get http://localhost:8200/v1/a/data/b
我想知道为什么使用 localhost:8200/v1/a/data/b 。根据文档,看起来确实使用了该路径/{mount_point}/data/{path}。这不是我创建的路径。
我不知道如何在没有 /data/ 子目录的情况下使用该库。它可以以某种方式被覆盖吗?我是否错误地使用了 HVAC 或 Vault 机密?
编辑: 这个例子创建了一个秘密:
client.secrets.kv.v2.create_or_update_secret(path='b', secret=dict(c='d'), mount_point='a')
可以这样得到:
vault kv get -mount=a data/b
===== Data =====
Key Value
--- -----
data map[c:d]
options map[]
所以我什至不确定是否可以使用 HVAC 和 CLI 放置相同的数据。
好像和KV版本的V1、V2有关。 如果我使用 V1,我可以获取在命令行上创建的数据。
client.secrets.kv.v1.read_secret('b', 'a')['data']
{'c': 'd'}