Vault-AWS RDS Postgres集成

问题描述 投票:4回答:1

我正在设置保管库和在AWS RDS中运行的Postgres实例之间的集成。我的策略如下:

  1. 数据库注册

    a。使用RDS主凭据创建一个名为server_admin的角色:

    CREATE ROLE server_admin WITH LOGIN PASSWORD '${password}' CREATEROLE CREATEDB
    

    b。使用server_admin postgres角色(python hvac库)向Vault注册数据库:

    vault.write("database/config/{0}".format(database_identifier),
      plugin_name=plugin_name,
      connection_url=connection_url,
      allowed_roles="*")`
    

    c。接下来,创建用于管理的库角色(模式创建):

    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")
    
  2. 模式注册

    a。使用保管库获取具有server_admin角色的用户。b。创建模式

    CREATE SCHEMA IF NOT EXISTS ${schema_name} AUTHORIZATION server_admin
    

    c。创建3个保管库角色(read_only,read_write,admin)

  3. 应用程序初始化

    a。从具有管理员角色的库中获取数据库用户,然后运行飞行迁移]

    b。从库中以read_write角色获取数据库用户以进行正常操作

我的问题是,在由我的应用程序(flyway)进行初始架构初始化期间,表归动态生成的用户所有。下次我尝试迁移时,我(具有库角色)获得了一个新用户(通过保管库),但该用户无权访问第一个用户创建的表。

与PostgreSQL结合使用保管库时,数据库/模式/表所有权的推荐策略是什么?

postgresql amazon-web-services amazon-rds flyway hashicorp-vault
1个回答
0
投票

我一直在努力解决相同的问题,最后,我实现了本文描述的解决方案。 (相关部分以“使用Liquibase”结尾)https://www.jannikarndt.de/blog/2018/08/rotating_postgresql_passwords_with_no_downtime/

Vault可通过使用Vault静态角色如上所述来轮换角色。在这种情况下,用户名保持不变,密码由保管箱轮换和管理。 https://learn.hashicorp.com/vault/secrets-management/db-creds-rotation

我使用蓝色/绿色设置,将未使用的角色设置为NOLOGIN并在需要时进行切换。

通过使角色名称保持静态,可以避免新角色不继承前一角色的权限的问题。

© www.soinside.com 2019 - 2024. All rights reserved.