首页 > 解决方案 > 从java连接到AWS RDS而不暴露密码

问题描述

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

spring:
  datasource:
    url: jdbc:postgresql://<rds-endpoint>:5432/<dbschema>
    username: <dbuser>
    password: <dbpassword>

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

我的意图不是公开密码。

标签: amazon-web-servicesspring-data-jpaamazon-rdsaws-sdk-java-2.0

解决方案


有几个选项可供您使用:

  1. 使用最近宣布的IAM 访问 Postgres RDS
  2. 使用 Systems Manager Parameter Store 存储密码
  3. 使用 Secrets Manager 存储密码并自动轮换凭证

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

IAM 凭证更安全,因为:

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

推荐阅读