我的应用程序在Web组件层中具有ELB,NGNIX和ECS,并且将它们全部分组到一个安全组中,并且ELB,NGNIX和ECS之间存在内部通信。我想为这三个之间的通信创建自我参照端口,我是否必须编写自我入口规则或自我出口规则,以便该通信是这三个入站或出站之间的内部通信?
答案 0 :(得分:4)
默认的 Outbound 安全组允许所有流量,因此除非您有特定的网络要求(例如,强制执行其他限制以满足合规性),否则请不要更改它们。
您可以配置安全组以允许来自其自身的 Inbound 连接(即,该安全组具有自己的ID作为入站连接的源)。这将使与安全组关联的任何Amazon EC2实例都可以与在给定端口上与同一安全组关联的任何其他Amazon EC2实例进行通信。
要注意的重要一点是,安全组是在实例级别强制执行的,而不是在网络级别工作的传统防火墙。因此,不存在多个实例位于“安全组内部”的概念。而是将安全组应用于进入每个实例的流量。因此,需要允许来自“自身”的传入连接。
答案 1 :(得分:0)
当然,您将需要一个带有应用程序正在侦听的端口的入口规则。
默认情况下,安全组的所有出口都是允许的,并且sg是有状态的,因此您不需要入口规则即可使出站流量返回
答案 2 :(得分:0)
可以创建一个安全组以允许其自身发出流量,但是,SecurityGroup资源及其入口规则需要分开,以避免循环依赖。例如;
ConsumerSG:
Type: 'AWS::EC2::SecurityGroup'
Properties:
VpcId: !ImportValue EnvVpc
GroupDescription: !Sub 'Security group which grants access to consuming apps'
ConsumerSGIngress:
Type: 'AWS::EC2::SecurityGroupIngress'
DependsOn: ConsumerSG
Properties:
GroupId: !Ref ConsumerSG
IpProtocol: tcp
FromPort: '5000'
ToPort: '5000'
SourceSecurityGroupId: !Ref ConsumerSG
这将创建一个安全组,该安全组允许通过其自身在端口5000上进行访问