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_role
的 creation_statement
被“生成”/“呈现”,因此它只授予对此的访问权限(abcd
) 数据库。
我现在 运行 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_role
的 creation_statement
被“生成”/“呈现”,因此它只授予对此的访问权限(abcd
) 数据库。