Vault - AWS RDS Postgres集成

时间:2018-06-01 08:25:07

标签: postgresql amazon-web-services amazon-rds flyway hashicorp-vault

我在vault和AWS RDS中运行的postgres实例之间设置集成。我的策略如下:

  1. 数据库注册

    一个。使用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")
    
  2. 架构注册

    一个。使用Vault获取具有server_admin角色的用户。 湾创建架构

    CREATE SCHEMA IF NOT EXISTS ${schema_name} AUTHORIZATION server_admin
    

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

  3. 申请初始化

    一个。从具有admin角色的Vault获取数据库用户,并运行flyway迁移

    湾从vault获取具有read_write角色的数据库用户以进行正常操作

  4. 我的问题是,在我的应用程序(flyway)初始化模式初始化期间,表由动态生成的用户拥有。下次尝试迁移时,我会获得一个具有admin角色的新用户(通过保险库),但它没有权限访问第一个用户创建的表。

    使用Vault与postgresql集成时,建议的数据库/架构/表所有权策略是什么?

1 个答案:

答案 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并在需要时进行切换。

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