自引用 aws 安全组

Posted

技术标签:

【中文标题】自引用 aws 安全组【英文标题】:self referencing aws security groups 【发布时间】:2019-01-05 00:23:25 【问题描述】:

我的应用程序在 Web 组件层有 ELB、NGNIX 和 ECS,我将它们全部分组到一个安全组中,并且 ELB、NGNIX 和 ECS 之间存在内部通信。我想为这三个之间的通信创建自引用端口,我是否必须编写自入口规则或自出口规则以使该通信是这三个入站或出站之间的内部通信?

【问题讨论】:

【参考方案1】:

默认的出站安全组允许所有流量,因此切勿更改它们,除非您有特定的网络要求(例如实施额外限制以符合合规性)。

您可以将安全组配置为允许来自自身的入站 连接(即,安全组有自己的 ID 作为入站连接的源)。这将使与安全组关联的任何 Amazon EC2 实例能够与与同一安全组(在给定端口上)关联的任何其他 Amazon EC2 实例进行通信。

需要注意的重要一点是,安全组是在实例级别实施,而不是在网络级别工作的传统防火墙。因此,没有多个实例“在一个安全组内”的概念。相反,安全组应用于进入每个实例的流量。因此,需要允许来自“自身”的传入连接。

【讨论】:

【参考方案2】:

可以使安全组允许来自自身的流量,但是需要将 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 上进行访问

【讨论】:

在这种情况下允许多个端口: ESSecurityGroupIngressREST: 类型: AWS::EC2::SecurityGroupIngress DependsOn: ConsumerSG 属性: GroupId: !Ref ConsumerSG IpProtocol: tcp FromPort: 9200 ToPort: 9200 SourceSecurityGroupId: !Ref ConsumerSG ESSecurityGroupIngressNode: 类型: AWS::EC2::SecurityGroupIngress DependsOn: ConsumerSG 属性: GroupId: !Ref ConsumerSG IpProtocol: tcp FromPort: 9300 ToPort: 9300 SourceSecurityGroupId: !Ref ConsumerSG【参考方案3】:

当然,您需要一个带有应用程序正在侦听的端口的入口规则。

默认情况下,安全组的 egress 是允许所有的,并且 sg 是有状态的,因此您不需要用于传出流量返回的入口规则

【讨论】:

以上是关于自引用 aws 安全组的主要内容,如果未能解决你的问题,请参考以下文章

AWS Cloudformation:如何在 AWS 弹性 beanstalk 配置中引用多个安全组

您不能为现有 IPv4 CIDR 规则指定引用的组 ID。在 AWS 安全组中编辑入站规则时提示

AWS CLI;撤销默认安全组入口规则会导致错误

AWS CloudFormation:默认 VPC“vpc”中不存在安全组“sg-”

AWS 安全组包括另一个安全组

AWS 安全组难题