多个 EC2 安全组 - 允许还是限制?

多个 EC2 安全组 - 允许还是限制?

当我将多个安全组分配给一个实例时会发生什么?如果任何一个安全组允许,流量就会进入,这种情况下,这种做法是允许的。还是说,如果每个安全组都必须允许流量进入,这种做法是限制的?

例如,假设我有一类实例只会与同一帐户中的其他实例通信。我还有一类实例只接受通过 HTTP(端口 80)的流量。

是否可以通过创建和应用两个安全组来限制对内部实例的访问并仅通过 HTTP 进行访问:

  1. “内部”安全组。允许该安全组其他成员的所有流量通过所有端口和所有传输方式(TCP、UDP、ICMP)进入
  2. 创建一个“http”安全组。允许所有来源的流量通过 TCP 进入端口 80。

或者我是否被迫创建一个单独的安全组,允许来自源本身的端口 80 的流量?

答案1

如果实例具有多个安全组,则它具有各个组中所有规则的总和。

例如,假设我有一类实例只会与同一帐户中的其他实例通信。我还有一类实例只会通过 http(端口 80)接受流量。

这对于 AWS 虚拟私有云来说是一个完美的情况。将内部实例放在私有子网中,将面向公众的实例放在公共子网中。

答案2

寬闊。

根据 AWS 的说法:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html

如果某个特定端口有多条规则,我们将应用最宽松的规则。例如,如果您有一条规则允许从 IP 地址 203.0.113.1 访问 TCP 端口 22 (SSH),另一条规则允许所有人访问 TCP 端口 22,则每个人都可以访问 TCP 端口 22。

答案3

以下是 AWS 文档支持的回复。他们表示将更新文档:

我找到了一些论坛帖子,它们解决了一个或多个安全组内规则冲突的类似问题:

https://forums.aws.amazon.com/thread.jspa?messageID=221768

https://forums.aws.amazon.com/thread.jspa?messageID=349244吼

当多个安全组应用于一个实例时,这些规则会聚合起来以创建一个大型规则集。在 EC2 中,安全组规则只是宽容的,换句话说,您不能添加任何 DENY 规则。这意味着最宽容的规则将始终适用。例如,如果您有一个安全组允许从 IP 地址 10.10.10.10 访问端口 22,另一个安全组允许所有人访问端口 22,则每个人都可以访问实例上的端口 22。

答案4

当您将安全组指定为规则的源或目标时,该规则将影响与该安全组关联的所有实例。根据与源安全组关联的实例的私有 IP 地址(而不是公有 IP 或弹性 IP 地址)允许传入流量。有关 IP 地址的更多信息,请参阅 Amazon EC2 实例 IP 寻址。如果您的安全组规则引用对等 VPC 中的安全组,并且引用的安全组或 VPC 对等连接被删除,则该规则将被标记为过时。有关更多信息,请参阅 Amazon VPC 对等指南中的使用过时的安全组规则。

如果某个特定端口有多条规则,我们将应用最宽松的规则。例如,如果您有一条规则允许从 IP 地址 203.0.113.1 访问 TCP 端口 22 (SSH),另一条规则允许所有人访问 TCP 端口 22,则每个人都可以访问 TCP 端口 22。

当您将多个安全组与一个实例关联时,每个安全组的规则都会被有效地聚合起来以创建一组规则。我们根据这组规则来确定是否允许访问。

注意:由于您可以为一个实例分配多个安全组,因此一个实例可以有数百条适用的规则。这可能会在您访问实例时造成问题。因此,我们建议您尽可能精简规则。

相关内容