HVAC无法读取HashiCorp Vault密钥?问题排查与解决
问题描述
本地运行开发模式的Vault Docker容器,创建了v1版本的KV密钥引擎kv1,并添加密钥kv1/mega_secret(键值对为"hell": "yeah")。通过CLI命令可正常读取:
# vault kv get kv1/mega_secret ==== Data ==== Key Value --- ----- hell yeah
但使用HVAC Python客户端读取时触发错误:
hvac.exceptions.InvalidPath: no handler for route "secret/kv1/mega_secret".
route entry not found., on get http://localhost:8200/v1/secret/kv1/mega_secret
使用的代码如下:
import hvac client = hvac.Client(url="http://localhost:8200", token="hvs.4MzADdB9pIHAggqaQWQZASx0", namespace="") assert client.is_authenticated() assert not client.sys.is_sealed() print(client.kv.v1.read_secret(path="kv1/mega_secret")) # 执行此处报错
解决方法
错误根源是HVAC的kv.v1.read_secret方法默认会在请求路径前拼接secret/前缀,但你的KV引擎挂载在kv1路径下,因此需要显式指定mount_point参数匹配你的引擎挂载点:
修改后的代码:
import hvac client = hvac.Client(url="http://localhost:8200", token="hvs.4MzADdB9pIHAggqaQWQZASx0", namespace="") assert client.is_authenticated() assert not client.sys.is_sealed() # 指定mount_point为kv1,path传入密钥的相对路径mega_secret print(client.kv.v1.read_secret(path="mega_secret", mount_point="kv1"))
调整后,HVAC会请求正确的路径http://localhost:8200/v1/kv1/mega_secret,与CLI命令的逻辑一致,即可正常读取密钥内容。
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

