写入时发生 Vault 错误

Vault error while writing

我想测试 Spring Cloud Vault 配置。

我在本地安装了一个 Vault 服务器,当我尝试 write 一些键值时失败了,并要求我使用 vault kv put 命令。

虽然 Spring Cloud Config in this link 的示例显示了 vault write 命令的用法

这是我得到的错误是

$ vault write secret/my-app foo=bar
Error writing data to secret/my-app: Error making API request.

URL: PUT http://127.0.0.1:8200/v1/secret/my-app
Code: 404. Errors:


WARNING! The following warnings were returned from Vault:

  * Invalid path for a versioned K/V secrets engine. See the API docs for the
  appropriate API endpoints to use. If using the Vault CLI, use 'vault kv put'
  for this operation.

使用以下命令启用单独的路径后,我能够写入

vault secrets enable -path=my-app kv
vault write my-app/my-app password=123

在 Spring Cloud Config 中,我不得不在 bootstrap.yml 文件

中提到文件夹名称作为后端
spring:
  cloud:
    vault:
      token: bc53d1a4-2551-4869-9574-7a9e60501ec1
      scheme: http
      generic:
        backend: my-app

尝试以下..

./vault kv put secret/my-app password=123

我要补充一点,这是 0.10.0 中的新功能。

似乎 0.10.0 有一些重大的 API 变化...所以解决方案 #2 是使用早期版本的 Vault (v0.9.6)。这包括默认为版本控制的 KV 秘密引擎的 v2。

解决方案 #3 是使用 KV 的 v1 重新创建 /secret 引擎。 运行 以下:

./vault secrets disable secret 
./vault secrets enable -version=1 -path=secret kv

在 windows 中尝试以下操作,(在命令提示符下),

设置VAULT_TOKEN=00000000-0000-0000-0000-000000000000

设置VAULT_ADDR=http://127.0.0.1:8200

vault kv put secret/gs-vault-config example.username=demouser example.password=demopassword

(现在在 Hashicorp Vault 中创建键值有变化。使用 kv put 而不是 write。)

我在使用 python、hvac、vault 和 kv 作为引擎时遇到了同样的错误。并且 kv-engine 是版本化的。我使用了 hvac 客户端

client.write("secret/taras", data=dict(python='is secret'))

所以我得到了

InvalidPath: "request_id":"d5c0f889-2c42-4141-1cc6-31ed1336c768","lease_id":"","renewable":false,"lease_duration":0,"data":null,"wrap_info":null,"warnings":["Invalid path for a versioned K/V secrets engine. See the API docs for the appropriate API endpoints to use. If using the Vault CLI, use 'vault kv put' for this operation."],"auth":null}

我解决这个问题的方法是改变存储秘密的路径

client.write("secret/data/taras", data=dict(python='is secret'))

PS:如您所知,我的秘密名称是"taras"。