使用开放连接在AWS中旋转RDS机密

时间:2019-01-08 15:15:56

标签: amazon-web-services amazon-rds aws-secrets-manager

如果当前与RDS的连接处于打开状态时轮换了机密,那么该连接是否仍可以查询数据库,或者它将变为非活动状态?

3 个答案:

答案 0 :(得分:3)

如果您旋转用户帐户的密码,用户将被从数据库中切断,直到他们获取新密码。

一种常见的策略是拥有两个用户帐户(user1和user2)并按交错的时间表轮流使用其密码。客户端检测到user2并开始使用它时,user1的凭据仍将起作用。请注意,要使此方法有效,客户端将必须定期检查更新的凭据。

https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets-two-users.html

答案 1 :(得分:1)

更改密码时,大多数数据库(包括RDS中的所有数据库)都不会关闭会话/连接(例如,参见此answer for oracle)。终止会话需要显式的终止命令。

如果您正在使用Java和连接池管理器,则可以在需要重新建立连接时使用AWS提供的JDBC wrapper自动获取最新密码。

我可以通过以下方式对此进行测试:

  • 启动MySQL RDS实例
  • 将主密码存储在Secrets Manager中
  • 通过控制台设置单用户轮换
  • 使用MySQL CLI连接到数据库
  • 通过查询验证连接
  • 通过从CLI启动子外壳,使连接保持打开状态
  • 转储当前密码
  • 开始异步轮换并稍等
  • 通过复制新密码来验证轮换身份
  • 退出子Shell,返回CLI中的现有MySQL连接
  • 运行另一个查询

    $ mysql -h testdb -Dmysql -u root -p$(aws --region us-east-2 secretsmanager get-secret-value --secret-id testdb-root --query SecretString --output text | jq -r '.password')
       ...
    mysql> select user from user;
    +-----------+
    | user      |
    +-----------+
    | root      |
    | mysql.sys |
    | rdsadmin  |
    +-----------+
    3 rows in set (0.05 sec)

    mysql> \! bash
    $ # Show current password
    $ aws --region us-east-2 secretsmanager get-secret-value --secret-id testdb-root --query SecretString --output text | jq -r '.password'
    3%c70'-e9s<Dy5ecX-(0mV%&E6Y[<jnJ
    $ aws --region us-east-2 secretsmanager rotate-secret --secret-id testdb-root
       ...
    $ sleep 60 # Give rotation time to complete
    $ aws --region us-east-2 secretsmanager get-secret-value --secret-id testdb-root --query SecretString --output text | jq -r '.password'
    .z,B{,P]jE~pr3?0mZ5H,6rJi;aXrQVO
    $ exit
    mysql> select user from user;
    +-----------+
    | user      |
    +-----------+
    | root      |
    | mysql.sys |
    | rdsadmin  |
    +-----------+
    3 rows in set (0.05 sec)

答案 2 :(得分:1)

从Secret Manager documentation

秘密管理器可以按照指定的时间表为您自动旋转您的秘密。如果您选择存储一组完整的用户或帐户凭据而不是密码,则可以旋转凭据而不会中断服务。如果仅更改或旋转密码,则旧密码将立即过时,客户端必须立即开始使用新密码,否则将失败。如果您可以改用新密码创建一个新用户,或者至少在两个用户之间切换,那么旧用户和密码可以继续与新用户并存,直到您选择弃用旧用户为止。当您测试和验证新凭据时,所有客户端都可以继续工作时,这为您提供了一个时间窗口。新凭据通过测试后,您将使所有客户端都使用新凭据并删除旧凭据。