建议设置亚马逊RDS数据库的安全设置是什么



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

为了让它开始工作,我允许";所有公共连接";并进行设置,以便所有入站流量都可以访问数据库。但是,如果有人获得了我数据库的端点链接,如果我正确理解,他们可以随心所欲地访问它,所以我现在问你,我应该如何在应用程序的设置中设置安全性?

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

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

谢谢。

从网络安全的角度来看,您希望确保只有需要与数据库对话的资源才能做到这一点,即您希望;最低特权";方法。

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

这就是下一个安全层的作用,我们试图将对数据库的访问限制在真正需要的实例。实现这一点的方法是通过安全组。这些本质上是实例级防火墙,用于控制允许谁访问实例。你的豆茎实例也会有一个安全组。安全组可以使用对其他安全组的引用,因此理想情况下,您应该将数据库安全组配置为只允许来自Elastic Beanstalk实例的安全组的数据库端口(例如,MySQL的3306(上的流量。

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

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

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

我还建议您查看RDS文档的安全部分-这是您应该考虑的第一步的概述,但总有更多的工作要做:(

参考

  • RDS数据库创建专有网络指南
  • SSL/TLS配置
  • 安全组和RDS
  • 使用Secrets Manager旋转DB凭据