【问题标题】:How to properly create security groups for instance classes in AWS?如何为 AWS 中的实例类正确创建安全组?
【发布时间】: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


【解决方案1】:

您可以根据ENI (Elastic Network Interface) 指定upto 5 individual security groups。每当建立入站或出站入口规则时,都会评估所有可用规则。

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

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

例如:

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

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

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

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

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

更多信息请访问Security groups for your VPC 页面。

【讨论】:

  • “还要注意补丁,您将无法从 Internet 下载。”什么意思?
  • 如果 HTTP/HTTPS 的出站丢失,您将无法访问 Internet 以获取任何补丁或软件包更新 :)
  • 您应该在一个安全组中同时定义入口和出口,还是分成两个,或者这有关系吗?
  • 这确实是一种选择,但通常安全组用于特定的服务器目的而不是行进方向。这有助于减少管理开销:)
猜你喜欢
  • 2019-02-23
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 2018-02-01
  • 2020-03-13
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多