amazon-web-services - 从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 的情况?
我的意图不是公开密码。
解决方案
有几个选项可供您使用:
- 使用最近宣布的IAM 访问 Postgres RDS
- 使用 Systems Manager Parameter Store 存储密码
- 使用 Secrets Manager 存储密码并自动轮换凭证
对于 2 和 3,在 Spring 中使用 PropertyPlaceholderConfiguration 和 AWSSimpleSystemsManagement 客户端(GetParameter 请求)查找应用程序启动时的密码。SystemsManager 可以代理对 SecretsManager 的请求,以在您的代码中保留单个接口来访问参数。
IAM 凭证更安全,因为:
- 如果使用 EC2 实例配置文件,则对数据库的访问使用短期临时凭证。
- 如果不在 EC2 上,您可以生成短期身份验证令牌。
- 密码未存储在您的配置中。
- 如果您有一个单独的数据库团队,他们可以独立于应用程序用户管理访问。
- 可以通过 IAM 删除访问权限
推荐阅读
- css - CSS Grid - 跨列和行?
- visual-studio-code - Visual Studio Code Live Share 扩展错误
- python - 为什么 numpy.asarray() 不适用于大量数组?
- c# - WCF - GetCallbackChannel 可靠吗?
- node.js - 使用 NodeJS 在 MongoDB 上存储用户点击信息
- json - TypeScript:在 JSON 中查找某些键的值
- html-table - 赛普拉斯,读出表格的所有元素,但只有一个精确值-标签
- python - 有没有办法按组在 tensorflow 中的自定义损失函数/层中缩放向量?
- css - 在字符串元素之间应用 CSS
- r - 我的 plot() 代码阻止它编织有问题吗?