首页 > 解决方案 > 如何为 AWS 中的实例类正确创建安全组?

问题描述

所以现在每个可用区有 4 个子网:面向 Internet 的“入口点”子网(与负载均衡器相关联)、用于内部计算的通用“服务”子网、用于所有与数据相关的事物的“数据库”子网以及“外部请求”子网,用于向 Internet 发出请求。这基本上定义了 4 类 EC2 实例。

我现在应该为这 4 类 EC2 实例创建安全组。我想知道的是如何正确地做到这一点(我正在使用 terraform)。

我可以为每个类和每种连接类型创建 1 个用于“入口”(传入)流量的安全组,以及用于“出口”(传出)流量的第二个安全组吗?

所以基本上,我想要这个。我希望互联网入口点与服务对话。该服务只能响应来自互联网的请求,它本身不会发出任何外部互联网请求。该服务可以与数据库和外部请求类对话。数据库只能与服务对话,外部请求只能响应服务。入口点可以以 HTTP 或 HTTPS(或 websockets,仅仅是 HTTPS 吗?)的形式出现。它进入端口 443。这是负载平衡器。然后它将请求转换为 HTTP 并使用端口 3000 连接到计算。我是否应该为每种不同的连接类型设置一个单独的端口?(因此服务层将有 1 个端口供数据库响应,例如 4000,1 个端口供外部请求层响应,例如 5000,等等)。或者那部分重要吗?可以说我们有端口的东西。

我在正确的轨道上吗?我对此很陌生,并试图弄清楚。任何指导将不胜感激,过去一周我一直在阅读 AWS 文档,但在最佳实践和架构方面几乎没有。

标签: amazon-web-servicesnetworkingamazon-ec2architectureamazon-vpc

解决方案


每个ENI(弹性网络接口)最多可以指定5 个单独的安全组。每当建立入站或出站入口规则时,都会评估所有可用规则。

关于通信,只要初始连接被安全组允许,安全组规则在任何允许双向通信的网络通信期间建立隧道(允许有状态通信)。

安全组是有状态的——如果您从实例发送请求,则无论入站安全组规则如何,都允许该请求的响应流量流入。无论出站规则如何,都允许对允许的入站流量的响应流出。

例如:

  • 入站规则允许来自特定 IP 地址的端口 22 上的 SSH,不存在端口 22 的出站规则。用户可以安全地通过 SSH 连接到服务器而没有连接问题,但无法通过 SSH 连接到另一台服务器。如果服务器应该能够出站,则添加出站规则,默认情况下将允许所有。

从上面的示例中,这意味着如果您不允许 HTTP/HTTPS 的出站规则,则只有通过 HTTP/HTTPS 的入站连接将允许它返回。还要注意您将无法从 Internet 下载的修补程序。

关于源,也许您可​​以引用逻辑安全组名称而不是指定子网。这意味着如果任何子网中的资源都附加了该安全组,则目标资源将允许入站访问(这仅适用于私有主机到私有主机的连接)。

流量的来源和目标端口或端口范围。源可以是另一个安全组、IPv4 或 IPv6 CIDR 块、单个 IPv4 或 IPv6 地址或前缀列表 ID。

我建议尝试将资源领域保留在单个安全组中(即数据库服务器都在单个安全组中),主要是为了减少管理开销。

您的 VPC页面的安全组中提供了更多信息。


推荐阅读