我已使用MySQL配置了Vault Database Secret Engine。每当我们要求提供临时凭据时,保险柜都会生成一个唯一的用户。有时我们想知道哪个用户在数据库中执行了查询。
找到用户后,我该如何将Vault生成的用户名与从Vault查询凭据的用户名进行映射?例如,如果带令牌的John查询以下网址:
database/creds/vault-mysql-role
Vault生成John的用户名:
v-token-vault-mysq-2OSTesyjNuCk9
我该如何将用户v-token-vault-mysq-2OSTesyjNuCk9
与John匹配,并发现执行查询的是John!我已经检查了审核日志,但似乎没有包含任何此类信息。
答案 0 :(得分:0)
审核日志确实包含此信息,只是不直接包含。
审核日志包括发送给客户端的响应,但所有值均被散列。您可以使用sys/audit-hash endpoint为您要查找的用户名计算哈希,然后在审核日志中搜索将response.data.username
字段设置为此哈希的记录:
$ vault write sys/audit-hash/file input=v-token-vault-mysq-2OSTesyjNuCk9
Key Value
--- -----
hash hmac-sha256:c78424ed34000ffdde18d51bc950507129a2fece391d12fcd1095336204ed460
$ grep hmac-sha256:c78424ed34000ffdde18d51bc950507129a2fece391d12fcd1095336204ed460 audit.log | jq .
{
"auth": {
"token_type": "service",
"client_token": "hmac-sha256:5a134faa99fd944a8be6d58fff9aa0e2794241ca25972e5cd8b65feb4bec9713",
"accessor": "NkBx2TO4h10cN2iqKboDweFE",
"policies": [
"default",
"database"
],
"display_name": "token-bd6b709e-99d6-bd29-fedd-fd5c97ef6564-my-app",
"token_policies": [
"default",
"database"
]
},
"request": {
"operation": "read",
"id": "40198a5b-2796-e4f9-51b4-1094db130468",
"client_token_accessor": "NkBx2TO4h10cN2iqKboDweFE",
"client_token": "hmac-sha256:5a134faa99fd944a8be6d58fff9aa0e2794241ca25972e5cd8b65feb4bec9713",
"path": "database/creds/vault-mysql-role",
"namespace": {
"id": "root"
},
"remote_address": "192.0.2.1"
},
"response": {
"data": {
"username": "hmac-sha256:f746cf79101e8aa1f5f225af1a5bcc43d34040ccb00739551aa8be6455951a25",
"password": "hmac-sha256:c78424ed34000ffdde18d51bc950507129a2fece391d12fcd1095336204ed460"
},
"secret": {
"lease_id": "database/creds/my-app/ISAf9HmK4REjTBhVnKbzJ3sw"
}
},
"type": "response"
}
当然,我把这些值都做了计算,但是您可以看到auth
字段包含了一堆有关客户端的信息。
如果auth字段不足,则可以将auth.accessor
字段与auth/token/lookup-accessor endpoint结合使用,以获取更多信息,例如,entity_id,可以将其映射为角色(参见Identity: Entities and Groups,identity/lookup/entity)。