CloudFormation SecurityGroup循环参考

时间:2017-10-26 19:23:19

标签: amazon-web-services amazon-ec2 amazon-cloudformation

我正在使用两个需要互相交流的简单网络应用。在AWS CloudFormation中,我有一个模板,用于创建EC2实例并在同一服务器上安装这两个应用程序(最终我将它们拆分,但现在它们仍然存在于同一个EC2实例上)。

作为EC2实例的一部分,我必须定义要使用的SecurityGroup。现在我一直在使用默认的,但我想动态地构建一个。在组中,我允许从我的机器进入SSH,以及从框到自身的几个端口。

当使用默认组时,我可以将服务器的公共IP添加到其自己的安全组,以允许它与自己进行通信。问题是在CloudFormation模板期间,我在SecurityGroup和EC2实例之间获得循环引用。实例需要启动SecurityGroup,并且该组需要包含EC2框的公共IP规则。

有没有更好的方法来做到这一点,或以某种方式锁定某些东西沿着" localhost"现在允许这些流量?

2 个答案:

答案 0 :(得分:3)

您有几个选择:

  1. 您可以为此设置一个自引用安全组,这意味着EC2实例将被允许与该安全组进行通信。有一点需要注意,就是不要在AWS::EC2::SecurityGroup中使用嵌入式入口和出口规则,而是使用AWS::EC2::SecurityGroupEgressAWS::EC2::SecurityGroupIngress分开,如上所述here
  2. 看起来像:

    "Resources" : {
        "SelfRefSecurityGroup" : {
          "Type" : "AWS::EC2::SecurityGroup",
          "Properties" : {
            "GroupDescription" : "Has access to itself",
            "VpcId" : "vpc-xxxxxx"
          }
        },
        "MySecurityGroupIngress" : {
             "Type" : "AWS::EC2::SecurityGroupIngress",
             "Properties" : {
                 "GroupId" : { "Ref" : "SelfRefSecurityGroup" },
                 "IpProtocol" : "tcp",
                 "ToPort" : "65535",
                 "FromPort" : "0",
                 "SourceSecurityGroupId" : { "Ref" : "SelfRefSecurityGroup" }
             },
             "DependsOn" : "SelfRefSecurityGroup"
         }
    
    1. 最佳选择: 在框中创建2个主机条目(或者更好的是使用Route53 private hosted zone设置dns条目):

      webapp1.com 127.0.0.1

      webapp2.com 127.0.0.1

    2. 我不建议让盒子通过其公共IP与自己对话。可能你甚至会付出代价! (https://aws.amazon.com/ec2/pricing/on-demand/) 加上SG的额外维护。

答案 1 :(得分:0)

我们可以在创建过程中自行引用安全组,例如:

---
Description: Create a VPC with a SG which references itself
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  vpctester:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 172.16.0.0/23
      EnableDnsSupport: false
      EnableDnsHostnames: false
      InstanceTenancy: default
      Tags:
      - Key: Name
        Value: vpctester
  sgtester:
    Type: AWS::EC2::SecurityGroup
    DependsOn: vpctester
    Properties:
      GroupDescription: vpc tester sg
      VpcId:
        Ref: vpctester
  sgtesteringress:
    Type: AWS::EC2::SecurityGroupIngress
    DependsOn: sgtester
    Properties:
      GroupId:
        Ref: sgtester
      IpProtocol: tcp
      FromPort: '0'
      ToPort: '65535'
      SourceSecurityGroupId:
        Ref: sgtester

请阅读我的文章以获取更多信息: https://dev.to/anupamncsu/self-referencing-security-groups-on-aws-59gb