我正在研究如何使用Vault 0.11.1和Spring Vault 2.0.2.RELEASE。我已经建立了一个开发保管箱:
vault server -dev
Run Code Online (Sandbox Code Playgroud)
并添加了一些数据
vault kv put secret/certs/jan cert=ABCD
Run Code Online (Sandbox Code Playgroud)
我可以在Spring Vault中阅读
@Autowired
private VaultOperations operations;
String path = "secret/data/certs/jan";
System.out.println(operations.read(path).getData());
Run Code Online (Sandbox Code Playgroud)
注意,奇怪的是,我必须在路径中插入“ data /”才能再次找到它。
删除数据也可以:
operations.delete(path);
Run Code Online (Sandbox Code Playgroud)
但是用写数据
Secret secret = new Secret("ABCD");
operations.write(path, secret);
Run Code Online (Sandbox Code Playgroud)
失败于
org.springframework.vault.VaultException: Status 400 secret/data/certs/jan: no data provided
Run Code Online (Sandbox Code Playgroud)
秘密是一个简单的bean:
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Secret {
String cert;
}
Run Code Online (Sandbox Code Playgroud)
和杰森转换似乎很好:
DEBUG org.springframework.web.client.RestTemplate - Writing [Secret(cert=ABCD)] using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@add0edd]
Run Code Online (Sandbox Code Playgroud)
只是想写一个字符串
operations.write(path, "foo=bar");
Run Code Online (Sandbox Code Playgroud)
也失败:
Status 400 secret/data/certs/jan: failed to parse JSON input: invalid character 'o' in literal false (expecting 'a')
Run Code Online (Sandbox Code Playgroud)
您似乎正在使用Vault的版本化键值后端。默认情况下,Vault 0.10和更高版本的新实例会挂载版本化的后端,在secret/此情况下,您需要使用特定的API。
未版本化(v1)和版本化(v2)键值后端之间存在细微的API差异,这些差异为上下文路径和实际的JSON有效负载添加了其他元素。
键值后端v1的示例:
POST /v1/secret/certs/jan
{"key":"value"}
Run Code Online (Sandbox Code Playgroud)
键值后端v2的示例:
POST /v1/secret/data/certs/jan
{"data":{"key":"value"}}
Run Code Online (Sandbox Code Playgroud)
要使用Spring Vault,这意味着您需要升级到版本2.1.0并使用VaultKeyValueOperationsAPI:
POST /v1/secret/certs/jan
{"key":"value"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
890 次 |
| 最近记录: |