我正在测试在 EC2 实例上运行的虚拟负载均衡器。我希望能够更改设置并在各种条件下测试平衡器。为了模拟物理负载均衡器,我为该实例分配了三个网络接口:
- 外部(主要) - 向 Web 公开的接口。AWS 规则将设置为允许所有流量到此接口。负载均衡器将设置自己的 IP/端口规则以在内部过滤此流量。到此接口的连接将来自 VPC 内部和外部。
- 管理 - 专用接口,设置规则以允许 HTTPS 流量到负载均衡器的 Web 界面或 SSH 流量到在负载均衡器上运行的管理 shell。管理连接将从 VPC 外部的计算机建立。
- 内部 - 负载均衡器后面的所有实例将通过该接口进行连接。负载均衡器会将此接口上的连接映射到外部接口上的连接。只有位于 VPC 内的实例才会与内部接口建立连接。
为了模拟物理连接,我想对这些接口应用一些 AWS 安全组规则,以便只允许 VPC 中的某些实例之间的连接(即:它们相互插入)。为了做到这一点,我为每个接口(内部、管理和外部)创建了一个单独的安全组。
我的理解是,安全组内的规则适用于属于它们的接口上的所有入站和出站流量。由于此设置中的每个接口都充当不同的角色,我希望每个接口都属于一个(只有一个) 安全组。
我不清楚的是实例本身(而不是其接口)属于安全组意味着什么。 我的想法是,由于负载均衡器实例将在所有三个接口上进行通信,因此它应该属于所有三个安全组。
不幸的是,当我将内部和管理安全组应用于实例时,它会强制外部接口也位于内部和管理安全组中。
同样,当我从外部接口删除内部和管理安全组时,它也会从这些安全组中删除实例。
应用于实例的安全组是否只是一种多余的配置快捷方式(即:只有应用于网络接口的安全组才真正重要),是否有其他方法可以实现我想要的配置,或者我是否错误地考虑了这个问题并且 AWS 有理由阻止这种配置?
答案1
虽然可能暗示 AWS 实例具有安全组,但实际上网络接口也有安全组。每个接口(随实例或埃尼) 可以拥有自己的安全组。任何安全组都可以根据需要应用于任意数量的网络接口。
答案2
因为这就是它的工作原理,以及它的工作方式。
将安全组应用于实例的能力只是语法糖。据记载,它将安全组应用于该实例的主网络接口。