我在vault和AWS RDS中运行的postgres实例之间设置集成。我的策略如下:
数据库注册
一个。使用RDS主凭据创建名为server_admin的角色:
CREATE ROLE server_admin WITH LOGIN PASSWORD '${password}' CREATEROLE CREATEDB
湾使用server_admin postgres角色(python hvac库)向Vault注册数据库:
vault.write("database/config/{0}".format(database_identifier),
plugin_name=plugin_name,
connection_url=connection_url,
allowed_roles="*")`
℃。接下来,为管理(模式创建)创建文件库角色:
vault.write("database/roles/{0}".format(role_name),
db_name=database_identifier,
creation_statements='"CREATE ROLE \"{{name}}\" WITH LOGIN INHERIT PASSWORD '{{password}}' IN ROLE SERVER_ADMIN;"',
default_ttl="10000h")
架构注册
一个。使用Vault获取具有server_admin角色的用户。 湾创建架构
CREATE SCHEMA IF NOT EXISTS ${schema_name} AUTHORIZATION server_admin
℃。创建3个保管库角色(read_only,read_write,admin)
申请初始化
一个。从具有admin角色的Vault获取数据库用户,并运行flyway迁移
湾从vault获取具有read_write角色的数据库用户以进行正常操作
我的问题是,在我的应用程序(flyway)初始化模式初始化期间,表由动态生成的用户拥有。下次尝试迁移时,我会获得一个具有admin角色的新用户(通过保险库),但它没有权限访问第一个用户创建的表。
使用Vault与postgresql集成时,建议的数据库/架构/表所有权策略是什么?
答案 0 :(得分:1)
我一直在努力解决相同的问题,最后,我实现了本文描述的解决方案。 (相关部分以“使用Liquibase”结尾)https://www.jannikarndt.de/blog/2018/08/rotating_postgresql_passwords_with_no_downtime/
保险柜可用于通过使用保险柜静态角色来如上所述轮换角色。在这种情况下,用户名保持不变,密码由保管箱轮换和管理。 https://learn.hashicorp.com/vault/secrets-management/db-creds-rotation
我使用蓝色/绿色设置,将未使用的角色设置为NOLOGIN并在需要时进行切换。
通过使角色名称保持静态,可以避免新角色不继承先前角色的权限的问题。