我在AWS中有2个EC2实例(应用程序和堡垒)和一个RDS实例(数据库)。我希望我的RDS只能通过堡垒访问(当我作为管理员想要手动更改数据库中的东西时)和应用程序(用户可以对数据库进行更改,但只能按照应用程序提供的功能)。对于EC2实例,我希望堡垒只能由我在笔记本电脑上访问(因此只有我可以执行管理更改),并且我希望应用程序EC2实例对互联网上的每个人都可用(因为它是一个公共应用程序)。我在AWS上做了如下的一些设置,但我只是想确认一下以下的假设是否正确,是否足以满足我上面概述的需求?
- 我已经将应用程序EC2实例放在公共子网中-这是否足以确保互联网上的任何人都可以(安全/安全地)使用该应用程序?
- 我已经把堡垒放在一个不同的公共子网,但它需要一个公钥/私钥对(只有我有)访问-这足以保持它的安全吗?
- 基于我的RDS实例的可用性区域,它似乎是在一个子网中,当我检查路由表时,目的地0.0.0.0/0的目标设置为w-.....这是否意味着它是一个公共子网,如果是这样,是否有一种方法可以在不失去与应用程序和堡垒EC2实例的连接的情况下将其顺利移动到私有子网?我还将公共可访问性设置为no,这是否意味着即使它在公共子网中也不能公开访问?
我已经将应用程序EC2实例放在公共子网中-这是否足以确保互联网上的任何人都可以(安全/安全地)使用该应用程序?
假设你已经在你的EC2实例上设置了一个安全组,允许来自0.0.0.0/0
(公共互联网)的流量在你的web服务器端口上(可能是80和443),并且它被放置在一个公共子网中,互联网上的任何人都可以访问它。如果这是安全的取决于你的威胁模型:-)-我肯定会确保你的应用程序提供一个HTTPS端点进行加密通信。
您还应该在安全组中添加一条规则,允许来自堡垒主机的安全组的流量用于您需要的协议,例如HTTP, HTTPS, SSH。
我已经把堡垒放在一个不同的公共子网中,但它需要一个公钥/私钥对(只有我有)来访问——这足以保证它的安全吗?
关于堡垒主机,您似乎也将其放置在公共子网中,鉴于其功能,这是有意义的。我建议您确保连接到它的安全组只允许端口22 (ssh)上的流量到您的IP,或者至少不允许整个互联网。虽然公钥/私钥认证是体面的,但这只是减少攻击者表面积的好做法。
基于我的RDS实例的可用性区域,似乎是在一个子网中,当我检查路由表时,目的地0.0.0.0/0的目标设置为iw-.....这是否意味着它是一个公共子网,如果是这样,是否有一种方法可以在不失去与应用程序和堡垒EC2实例的连接的情况下将其顺利移动到私有子网?我还将公共可访问性设置为no,这是否意味着即使它在公共子网中也不能公开访问?
实例位于您所描述的公共子网中。根据定义,如果路由表有到internet网关的直接路由,则子网是公共的。条目)。这将使您的数据库原则上可以从internet访问。然而:您似乎已将公共可访问性设置为no,这导致数据库没有获得公共IP地址。这实际上可以确保,它不能从互联网访问,因此只能在您的VPC内访问。
将其移动到私有子网中将是一个很好的做法,但这会导致停机时间。我还认为,从纯粹的技术角度来看,这并不重要,因为RDS不需要/使用互联网连接,并且有一个体面的安全组,你会没事的(移动它仍然是一个干净的设置需要考虑的事情)。
我的建议是为数据库设置安全组,只允许来自应用服务器安全组和堡垒主机安全组的数据库端口上的流量。
通过对我概述的安全组的更改,该设置应该满足您的要求。