hashicorp 保险库 - 无法使用 API 列出秘密,但可以使用 CLI 成功验证

hashicorp vault - unable to list a secret using the API but can successfully verify using CLI

我有一个处于开发模式的本地 Vault 服务器,因此我可以学习和理解如何使用 Vault。 在这个练习中,我的目标是 load/put 使用 API 将证书放入秘密引擎。我已经能够通过这个 curl 命令做到这一点:

curl --header "X-Vault-Token: $VAULT_TOKEN" \
   --request POST \
   --data @payload-cert.json \
   http://127.0.0.1:8200/v1/kv-v1/prod/cert1/mysql

我可以通过 运行 CLI 命令验证此证书是否存在:

vault kv get kv-v1/prod/cert1/mysql

示例输出显示它在那里:

==== Data ====
Key     Value
---     -----
cert    -----BEGIN CERTIFICATE-----
MIICyjCCAbICCQDrpZYh8et7yTANBgkqhkiG9w0BAQsFADAnMQswCQYDVQQGEwJV
UzELMAkGA1UECAwCQ0ExCzAJBgNVBAcMAlNGMB4XDTE4MTExMjIwNDEwNVoXDTE4
MTIxMjIwNDEwNVowJzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQswCQYDVQQH
DAJTRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnIdgpml8+xk+Oj
1RGMCyJ1P15RiM6rdtszT+DFBg893Lqsjoyd5YgwELLz0Ux8nviG4L5OXOujEpAP
2cQBxTSLQjBELBZY9q0Qky3+2ewqV6lSfcXrcf/JuDJGR5K8HSqwNG35R3WGnZ+O
JhY0Dmx06IAs/FF8gP88zTQ8M7zuaThkF8MaF4sWPf6+texQwjzk4rewknGBFzar
9wFxVwNCyDD6ewIYPtgDxdJ1bwBVoX3KKKXm8GStl/Zva0aEtbSq/161J4VbTro2
dxArMPKzxjD6NLyF59UNs7vbzyfiw/Wq7BJzU7Kued5KdGt0bEiyWZYO+EvvxGmE
1pHfqysCAwEAATZNBgkqhkiG9w0BAQsFAAOCAQEAavj4CA+7XFVHbwYMbK3c9tN/
73hkMvkAZWix5bfmOo0cNRuCeJnRIX+o6DmusIc8eXJJJV/20+zoSvUwlsLDPXoN
+c41GfIiEUSaSdSBtETMy8oPga718nIwAvNgYiUHXnV3B0nLYBUpYSnsD00/6VXG
xZUIEVBd7Ib5aRwmK8U5drxoWaBoG5qdvH9iapwTrCcPsRjsLBq7Iza2oBORGlfF
CjqiW2+KJzwRiTQj70yceniGVHM+VSpFYCLJ0mXeyLfITy7joqxr4AGYz+EhpLuf
iDpYDNYlr0JDVQqogskWjrnWOh0YcIJKgVtiTh2HDM5TdQgeXg4wv5IqLok0Tw==
-----END CERTIFICATE-----

但是,我需要使用 API 来验证这一点。我怎么做?我正在使用这个命令:

curl -s --header "X-Vault-Token:$VAULT_TOKEN" --request LIST http://127.0.0.1:8200/v1/kv-v1/prod/cert1/mysql | jq

结果显示为空:

{
  "errors": []
}

我刚刚使用 CLI 验证了它的存在。我的 curl 语句遗漏了什么或做错了什么?

当您需要尝试列出文件夹时,您正在尝试列出单个项目。如果您只是从 URL 中删除 mysql,它应该会显示 mysql 项目:

curl -s --header "X-Vault-Token:$VAULT_TOKEN" --request LIST http://127.0.0.1:8200/v1/kv-v1/prod/cert1/ | jq

参见https://www.vaultproject.io/api-docs/secret/kv/kv-v1#list-secrets

如果您想复制从 CLI 获得的响应,您需要使用 GET 请求:

curl -s --header "X-Vault-Token:$VAULT_TOKEN" --request GET http://127.0.0.1:8200/v1/kv-v1/prod/cert1/mysql | jq