Python调用hvac读取Vault KVv2密钥认证成功但报权限拒绝错误如何解决
问题原因
- 策略路径匹配规则错误:你调整后的策略使用了
kv-v2/data/lambda-function/*路径,末尾的通配符*仅能匹配lambda-function路径下的子密钥(比如lambda-function/db),无法匹配lambda-function本身这个根路径密钥,导致权限校验不通过。 - 前两种代码写法存在路径参数错误:hvac的kv v2接口
read_secret_version的path参数不需要携带挂载点名称,挂载点需要通过单独的mount_point参数传入,写法一、二的路径参数不符合接口要求。
解决方案
第一步:修正Vault策略
根据你的使用场景二选一即可:
- 仅需要读取
kv-v2/lambda-function单个密钥:
path "kv-v2/data/lambda-function" { capabilities = ["read"] }
- 需要同时读取
lambda-function路径下的所有子密钥:
path "kv-v2/data/lambda-function" { capabilities = ["read"] } path "kv-v2/data/lambda-function/*" { capabilities = ["read"] }
修改策略后不需要重新绑定角色,策略会自动生效。
第二步:使用正确的代码写法
直接用你之前的写法三即可,也可以简化为:
response = client.secrets.kv.v2.read_secret_version( mount_point='kv-v2', path='lambda-function' )
补充说明
你在控制台使用vault kv get命令可以正常读取,是因为KV专属命令会自动在路径中补全data段,且控制台登录账号的权限范围大于你绑定给IAM角色的权限范围,所以不会触发权限报错。
内容的提问来源于stack exchange,提问作者Koenig Lear
相关产品推荐
相关产品推荐

