AWS - 安全组是否足够或是否需要私有和 public 子网?

AWS - Are security groups enough or is there a need for private and public subnets?

假设我有一个 Web 服务器,它是一个 EC2 实例和一个 RDS。

EC2实例与RDS通信。

出于安全考虑,我可以在 Application Load Balancer 后面进行设置,并使用安全组仅允许入站流量通过 ALB。 ALB 将仅通过 HTTPS 与互联网通信。

我可以在内部设置一个安全组,它只接受来自 ALB 安全组的传入流量。我会将此安全组附加到 EC2 实例。然后我可以有另一个安全组,只允许来自 EC2 实例的传入流量。此安全组将附加到 RDS。

EC2 实例的安全组将允许出于更新、下载包等目的通过 HTTPS 出站流量

根据我对这个设置如何工作的(有限的)理解,与 RDS 的通信必须严格从 EC2 实例发生,并且到 EC2 实例的入站通信必须严格从配置为只接受通过 SSL 的请求。

在安全方面,这个设置安全吗?

运行这样的设置有什么风险?

配置私有和 public 子集有什么好处,如所示 here

以下是我能想到的一些最佳实践 -

  1. 拥有 3 层企业架构,其中包含 1 个 public 子网、1 个私有子网和 1 个用于数据库。只有 public 个子网有直接互联网连接,其余子网有 NAT 网关
  2. 不要将 RDS (DB) 保留在 public 子网中。 public只暴露你的数据库是不好的(即使你有 SGs)
  3. 为允许和拒绝语句实施 ACL 以及 SG。 ACL 在子网级别运行

对于企业级,您肯定需要更高的安全性,具体取决于架构

这完全取决于您的风险偏好

额外的安全层使事情变得更安全,但它们也使事情更难使用——看看机场安检、申请新护照或使用 NAT 网关获取互联网访问权限。

通过将资源放入 私有子网,可以获得额外的安全层。可以放心的是,私有子网中的资源不会因安全组的错误配置而意外 public(但 可以 public子网配置错误!)。

网络安全人员通过使用 public/private 子网熟悉 传统安全方法 ,并且没有在传统网络中拥有安全组的奢侈。因此,他们更多地 'comfortable' 使用旧式安全方法 以及 现代安全组。

因此,如果您愿意将资源放在 public 子网 中并使用安全组来限制它们,那么这取决于您。如果您不给私有资源 public IP 地址,您可以进一步保护资源,这将进一步保护它们免受访问。

至少,将您的数据库设置为 Publicly Accessible = No