Vault - 如何为 mysql 创建动态机密并仅授予对特定数据库的权限

Vault - how to create dynamic secrets for mysql and grant permissions only on specific database

我现在 运行 Vault 为我的 mysql 数据库提供了动态秘密。此时此刻,我的数据库角色如下所示:

回复:

{
   "lease_duration" : 0,
   "data" : {
      "revocation_statements" : [],
      "default_ttl" : 3600,
      "rollback_statements" : [],
      "max_ttl" : 86400,
      "db_name" : "my-mysql-database",
      "creation_statements" : [
         "CREATE USER '{{name}}'@'%' IDENTIFIED BY '{{password}}'",
         "GRANT SELECT ON *.* TO '{{name}}'@'%'"
      ],
      "renew_statements" : []
   },
   "warnings" : null,
   "auth" : null,
   "renewable" : false,
   "request_id" : "f155ede2-12ce-2ab1-f05e-b0f52acb153a",
   "wrap_info" : null,
   "lease_id" : ""
}

最重要的是 creation_statements,其中新用户被授予对每个数据库的权限。我的目标是发送我需要用户的数据库,并仅授予他对该数据库的权限。我还没有看到有关如何实现该目标的任何资源。

我的想法可能是检查 Vault 是否具有特定数据库的角色,如果 Vault 响应错误该角色不存在,我可以为该数据库创建一个新角色,然后生成新的凭据。

据我所知,创建语句是静态的,这意味着一旦创建了“vault_database_secret_backend_role”,就无法更改语句。

我们遇到了类似的问题,最终我们为每个不同的数据库动态创建了新的 vault_database_secret_backend_role

因为我们使用了 terraform,所以我可以模板化创建语句。 (即:当我创建一个名为“abcd”的新数据库时,相应的 vault_database_secret_backend_rolecreation_statement 被“生成”/“呈现”,因此它只授予对此的访问权限(abcd) 数据库。