我能够像任何其他数据库连接一样成功连接到 RDS。 我使用 spring jpa 数据(存储库)对 postgres 数据库进行 CRUD 操作。 目前我在属性文件中提供数据库 url 和凭据
spring:
datasource:
url: jdbc:postgresql://<rds-endpoint>:5432/<dbschema>
username: <dbuser>
password: <dbpassword>
但是,在连接到生产或预生产时,这不是一个选项。 这里的最佳实践是什么。 AWS 是否提供任何内置机制来从端点读取这些详细信息,例如访问 S3 的情况?
我的目的不是泄露密码。
最佳答案
您可以使用多种选项:
- 使用最近发布的 IAM access to Postgres RDS
- 使用 Systems Manager Parameter Store 存储密码
- 使用 Secrets Manager 存储密码并自动轮换凭据
对于 2 和 3,使用 PropertyPlaceholderConfiguration 和 AWSSimpleSystemsManagement 客户端(GetParameter 请求)在 Spring 中启动应用程序时查找密码。 SystemsManager can proxy requests SecretsManager 以在代码中保留单个接口(interface)来访问参数。
IAM 凭证更加安全,因为:
- 如果使用 EC2 实例配置文件,则对数据库的访问将使用短期临时凭证。
- 如果不在 EC2 上,您可以生成短期身份验证 token 。
- 密码不会存储在您的配置中。
- 如果您有一个单独的数据库团队,他们可以独立于应用程序用户来管理访问权限。
- 可以通过 IAM 删除访问权限
关于amazon-web-services - 从java连接到AWS RDS而不暴露密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52709303/