在不暴露密码的情况下从 java 连接到 AWS RDS

Connecting to AWS RDS from java without exposing password

我能够像任何其他数据库连接一样成功连接到 RDS。 我使用 spring jpa 数据(存储库)对 postgres 数据库进行 CRUD 操作。 目前我在属性文件

中提供数据库 url 和凭证
spring:
  datasource:
    url: jdbc:postgresql://<rds-endpoint>:5432/<dbschema>
    username: <dbuser>
    password: <dbpassword>

但是,在连接到生产或试生产时,这不是一个选项。 这里的最佳做法是什么。 AWS 是否提供任何内置机制来像访问 S3 一样从端点读取这些详细信息?

我的本意是不暴露密码

您有多种选择:

  1. 使用最近公布的IAM access to Postgres RDS
  2. 使用 Systems Manager Parameter Store 存储密码
  3. 使用 Secrets Manager 存储密码并自动轮换凭据

对于 2 和 3,在 Spring 中使用 PropertyPlaceholderConfiguration 和 AWSSimpleSystemsManagement 客户端(GetParameter 请求)在应用程序启动时查找密码。 SystemsManager can proxy requests 到 SecretsManager 以在您的代码中保留一个接口来访问参数。

IAM 凭据在以下方面更安全:

  1. 如果使用 EC2 实例配置文件,访问数据库将使用短期临时凭证。
  2. 如果不在 EC2 上,您可以生成短期身份验证令牌。
  3. 密码未存储在您的配置中。
  4. 如果您有一个单独的数据库团队,他们可以独立于应用程序用户管理访问。
  5. 可以通过 IAM 删除访问权限

我发现的另一个通用选项是使用 AWS Secret Manager (doc link)

RDS 特定解决方案是使用 IAMDBAuth

连接到 DB Instance Using the AWS SDK