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

问题描述

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

  • 我已将应用程序 EC2 实例置于公共子网中 - 这是否足以确保互联网上的任何人都可以(安全/可靠地)使用该应用程序?
  • 我已将堡垒放置在不同的公共子网中,但它需要一个公钥/私钥对(只有我拥有)才能访问 - 这足以保证它的安全吗?
  • 根据我的 RDS 实例的可用区,它似乎在一个子网中,当我检查路由表时,目标 0.0.0.0/0 的目标设置为 iw-..... 这是否意味着它是一个公共子网,如果是这样,是否有一种方法可以将其平滑地移动到私有子网,而不会丢失与应用程序和堡垒 EC2 实例的连接?我还将公共可访问性设置为 no,这是否意味着即使它位于公共子网中也无法公开访问?

解决方法

我已将应用程序 EC2 实例置于公共子网中 - 这是否足以确保互联网上的任何人都可以(安全/可靠地)使用该应用程序?

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

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

我已将堡垒放置在不同的公共子网中,但它需要一个公钥/私钥对(只有我拥有)才能访问 - 这足以保证它的安全吗?

关于堡垒主机,您似乎也将其放置在公共子网中,考虑到其功能,这是有道理的。我建议您确保连接到它的安全组只允许端口 22 (ssh) 上的流量到您的 IP 或至少不允许整个互联网。虽然公钥/私钥身份验证很不错,但减少攻击者的表面积只是一种很好的做法。

基于我的 RDS 实例的可用区,它似乎在一个子网中,当我检查路由表时,目标 0.0.0.0/0 的目标设置为 iw-..... 这是否意味着它是一个公共子网,如果是这样,是否有一种方法可以将其平滑地移动到私有子网,而不会丢失与应用程序和堡垒 EC2 实例的连接?我还将公共可访问性设置为 no,那么这是否意味着即使它位于公共子网中也无法公开访问?

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

将其移动到私有子网是一种很好的做法,但这会导致停机。我还认为,从纯粹的技术角度来看,这无关紧要,因为 RDS 不需要/使用互联网连接,并且有一个不错的安全组,你会没事的(移动它仍然会干净的设置需要考虑)。

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

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