Apache Drill从Hashicorp Vault获取存储凭证失败求助
解决Apache Drill从Hashicorp Vault获取凭证的问题
1. 先修复配置中的笔误
你的Drill存储配置里,propertyNames的password映射了错误的Vault密钥名:
"propertyNames": { "username": "usernameSecret", "password": "usernamePassword" // 这里写错了,Vault里的密码密钥是passwordSecret }
修正为:
"propertyNames": { "username": "usernameSecret", "password": "passwordSecret" }
这是导致日志提示“没有匹配配置属性名的凭证”的直接原因之一。
2. 适配Vault KV引擎版本
场景A:继续使用KV V1引擎
Drill依赖的vault-java-driver 5.1.0默认按KV V2的路径规则处理(自动在secretPath后追加/data),而KV V1的API路径不需要这个后缀。你需要:
- 确保Drill的Vault客户端配置强制使用KV V1模式(若Drill支持配置
engineVersion,设置为1) - 保持
secretPath为kv/pg_gen,避免路径被错误追加/data
场景B:切换到KV V2引擎
KV V2的响应是嵌套的data.data结构,但当前版本的Drill VaultCredentialsProvider只会解析第一层data,导致无法读取到实际密钥。有两种解决方式:
方式1:修改Drill代码适配嵌套结构
修改VaultCredentialsProvider类的密钥提取逻辑,从第二层data中读取密钥:
// 原逻辑(仅读取第一层data) Map<String, Object> secretData = response.getData(); // 修改后(读取嵌套的第二层data) Map<String, Object> outerData = response.getData(); Map<String, Object> secretData = (Map<String, Object>) outerData.get("data");
重新编译Drill或替换对应插件JAR包即可生效。
方式2:调整secretPath路径
将Drill配置中的secretPath改为KV V2的完整数据路径:
"secretPath": "kv/data/pg_gen"
注意需确认Drill不会再额外追加/data后缀,否则会导致请求路径错误。
验证步骤
- 修正配置后重启Drill服务
- 查看DEBUG日志,确认Vault请求路径正确、响应数据解析正常
- 测试数据库连接,验证凭证是否成功获取
内容的提问来源于stack exchange,提问作者kichma
相关产品推荐
相关产品推荐

