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


27

当我为一个实例分配多个安全组时会发生什么?如果任何一个安全组都允许,则在允许流量的意义上说是允许的。还是在每个安全组都必须允许流量传入的意义上讲,这是限制性的?

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

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

  1. 一个“内部”安全组。允许所有端口(所有TCP / UDP,ICMP)上来自该安全组其他成员的所有流量进入所有端口。
  2. 创建一个“ http”安全组。允许任何来源通过TCP的所有流量进入端口80。

还是我被迫创建一个单独的安全组,该安全组允许来自端口80的通信,而端口80本身就是源?

Answers:


5

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

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

这对于AWS Virtual Private Cloud是一个完美的情况。将内部实例放在专用子网中,而将面向公众的实例放在公共子网中。


ceejayoz-这是“限制性”案件吗?这意味着两个安全组解决方案会起作用吗?同意VPC解决方案;我的示例更多是为了了解多个小组的工作方式。您是从哪里找到答案的?
SFun28年

您需要一个安全组用于内部实例,另一个安全组用于面向公众的实例。将面向公众的80:0.0.0.0/0组添加到内部实例将使它们可用于公共Internet。
ceejayoz 2013年

1
只是要非常清楚,您是说如果单个安全组中的任何一个允许通信进入,那么这是允许的吗?您对“所有规则的总和”的评论使我不满意,因为当我想到总和时,我会想到AND而不是OR。
SFun28年

2
是的,如果应用于实例的任何组允许它,则允许它。组规则是“或”运算,而不是“与”运算。
ceejayoz

7
人们为什么不能仅仅回答所提出的问题,而不是插入他们应该做什么的想法。如果您要这样做,至少要先正确回答问题。Jeez
Bill Rosmus


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。


0

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

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

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

注意因为您可以为一个实例分配多个安全组,所以一个实例可以具有数百条适用的规则。当您访问实例时,这可能会导致问题。因此,我们建议您尽可能地精简规则。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.