【发布时间】:2020-07-31 17:19:27
【问题描述】:
所以现在每个可用区有 4 个子网:面向互联网的“入口点”子网(与负载均衡器相关联)、用于内部计算的通用“服务”子网、用于所有与数据相关的事物的“数据库”子网、以及用于向 Internet 发出请求的“外部请求”子网。这基本上定义了 4 类 EC2 实例。
我现在应该为这 4 类 EC2 实例创建安全组。我想知道的是如何正确地做到这一点(我正在使用 terraform)。
我能否为每个类、每种连接类型创建 1 个用于“入口”(传入)流量的安全组,以及用于“出口”(传出)流量的第二个安全组?
所以基本上,我想要这个。我希望互联网入口点与服务对话。该服务只能响应来自互联网的请求,它本身不会发出任何外部互联网请求。该服务可以与数据库和外部请求类对话。数据库只能与服务对话,外部请求只能响应服务。入口点可以以 HTTP 或 HTTPS(或 websockets,仅仅是 HTTPS 吗?)的形式出现。它进入端口 443。这是负载平衡器。然后它将请求转换为 HTTP 并使用端口 3000 连接到计算。我应该为每种不同的连接类型设置一个单独的端口吗? (因此服务层将有 1 个端口供数据库响应,例如 4000,1 个端口供外部请求层响应,例如 5000,等等)。或者那部分重要吗?假设我们有端口的东西。
- sg1(安全组 1):入口 443 -> 3000(负载均衡器 -> 服务)
- sg2:出口 3000 -> 互联网?那是 0.0.0.0/0 吗?我不希望它向连接的客户端发出免费请求。
- sg3:入口 3000 -> 4000(服务 -> 数据库),指定数据库子网
- sg3: egress 4000 -> 3000 (database -> service),指定服务子网等
我在正确的轨道上吗?我对此很陌生,并试图弄清楚。任何指导都将不胜感激,过去一周我一直在阅读 AWS 文档,但在最佳实践和架构方面几乎没有。
【问题讨论】:
-
通常的做法是将出站规则保留为“完全开放”,因为您通常可以“信任”在您自己的系统上运行的代码。因此,在连接
ec2 -> database时,在数据库上设置一个限制Inbound规则,但允许ec2有完全开放的Outbound设置。这也将允许 EC2 实例在必要时与 Internet 通信。在高度安全的情况下,如果需要,您可以进一步锁定出站规则。
标签: amazon-web-services networking amazon-ec2 architecture amazon-vpc