设置 Amazon RDS 数据库的推荐安全设置是什么

What are the recommended security settings for setting up an Amazon RDS database

我有一个连接到 Amazon RDS 数据库的 node.js 应用程序,该应用程序本身托管在 Elastic Beanstalk 上。

为了让它开始工作,我在数据库中允许了“所有 public 连接”并进行了设置,以便所有入站流量都可以访问数据库。但是,如果有人将端点 link 获取到我的数据库,他们可以访问它,但如果我理解正确的话,他们想要访问它,所以我现在问你我应该如何在我的应用程序设置中设置安全性?

在客户端,我的应用程序将写入用户登录数据并存储一些关于他们的信息,他们将能够在应用程序中看到他们自己的数据和来自他们“朋友”的人的数据。

我已经通读了一些文档,但由于我对这一切还很陌生,所以很难理解什么是对我来说最好的解决方案。

谢谢。

从网络安全的角度来看,您希望确保只有需要与您的数据库通信的资源才能这样做,即您希望在您的网络层采用“最低权限”方法。

在 AWS 中实现这一点的方法是通过安全组和子网。由于数据库永远不应公开访问,因此应将其部署到私有子网中。这将确保数据库不会意外暴露在互联网上。同时确保 network/VPC 中的资源仍然能够将流量发送到数据库(原则上)。

这是下一层安全措施的用武之地,我们尝试将对数据库的访问限制为只有真正需要它的实例。做到这一点的方法是通过安全组。这些本质上是实例级防火墙,用于控制允许谁访问实例。您的 beantalk 实例也将有一个安全组。安全组可以使用对其他安全组的引用,因此理想情况下,您将数据库安全组配置为仅允许来自 Elastic Beanstalk 实例的安全组的数据库端口(例如 MySQL 的 3306)上的流量。

之后只有 beantalk 实例才能与您的数据库对话,这是很好的第一步。

现在只有您的应用程序服务器可以访问数据库服务器,您应该考虑如何处理来自这些服务器的身份验证。您应该避免在机器上对数据库凭证进行硬编码,而是将它们存储在某些外部服务中,例如 AWS Secrets Manager 或 Systems Manager Parameter Store。之后,您通过扩展实例角色的权限授予实例从那里获取凭据的权限。然后,您应该编写代码以从应用程序中的这些来源之一获取凭据 + 连接字符串。

为了提高安全性,请确保使用某种形式 SSL/TLS 对与数据库的连接在传输过程中进行加密,具体设置取决于您的数据库引擎。

我还建议您看一下 security section of the RDS documentation - 这是您应该考虑的第一步的概述,但总有更多事情要做:)

参考资料