在 AWS 中配置对 EC2 和 RDS 实例的访问的要求

Requirements for configuring access to EC2 and RDS instances in AWS

我在 AWS 中有 2 个 EC2 实例(应用程序和堡垒)和一个 RDS 实例(数据库)。我希望我的 RDS 只能通过堡垒访问(因为当我作为管理员想要手动更改数据库中的内容时)和应用程序(用户可以在其中对数据库进行更改,但只能根据应用)。对于 EC2 实例,我希望堡垒只能由我在我的笔记本电脑上访问(因此只有我可以执行管理员更改),并且我希望应用程序 EC2 实例可供互联网上的每个人使用(因为它是 public 应用程序)。我在 AWS 中配置了如下几个设置,但我只是想确认下面的假设是否正确,以及它们是否足以满足我上面概述的要求?

I've placed the application EC2 instance in a public subnet - is this enough for making sure that anyone on the internet can (safely/securely) use the app?

假设您已经在您的 EC2 实例上设置了一个安全组,允许来自您的网络服务器端口(可能是 80 和 443)上的 0.0.0.0/0(public 互联网)的流量并且它是放置在 public 子网中,互联网上的任何人都可以访问它。这是否安全取决于您的威胁模型:-) - 我肯定会确保您的应用程序提供用于加密通信的 HTTPS 端点。

您还应该向安全组添加一条规则,允许来自堡垒主机安全组的流量用于您需要的协议,例如HTTP、HTTPS、SSH。

I've placed the bastion in a different public subnet, but it requires a public/private key pair (which only I have) to access - is this enough to keep it secure?

关于堡垒主机,您似乎也将其置于 public 子网中,鉴于其功能,这是有道理的。我建议您确保附加到它的安全组只允许端口 22 (ssh) 上的流量到您的 IP,或者至少不允许整个互联网。虽然 public/private key auth 很不错,但减少攻击者的表面积只是一种很好的做法。

Based on my RDS instance's availability zone, it seems to be in a subnet that when I check the route table, destination 0.0.0.0/0 has target set to iw-..... does this mean it's a public subnet, and if so is there a way to smoothly move it to a private subnet without losing connectivity to the application and bastion EC2 instances? I've also set public accessibility to no, so does that mean it can't be accessed publicly even if it's in a public subnet?

该实例位于您所描述的 public 子网中。如果路由 table 具有到 Internet 网关的直接路由(igw-... 条目),则子网定义为 public。这将使您的数据库从 Internet 原则上 可访问。 但是:您似乎已将 public 可访问性设置为否,这导致数据库无法获得 public IP 地址。这实际上确保了它无法从 Internet 访问,因此只能在您的 VPC 内访问。

将其移至私有子网是一种很好的做法,但这会导致停机。我还认为,从纯技术角度 ,这并不重要,因为 RDS 没有 need/use 互联网连接,并且有一个像样的安全组,你会没事的(移动它仍然是一个干净的设置需要考虑的事情)。

我的建议是为数据库设置安全组,只允许来自应用程序服务器安全组和堡垒主机安全组的数据库端口上的流量。

根据我概述的对安全组的更改,此设置应该可以满足您的要求。