将参数化的安全组列表添加到另一个安全组的入口

时间:2015-08-18 20:43:08

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

我想创建一个CloudFormation模板,该模板创建一个安全组资源,允许从其他安全组的变量列表中进行插入。该模板将采用类型List<AWS::EC2::SecurityGroup::Id>的参数。我将为此示例命名此参数SourceSecurityGroupIds。然后,它将使用以下内容创建安全组资源:

{
    "LogServerSecurityGroup": {
        "Type": "AWS::EC2::SecurityGroup",
        "Properties": {
            "GroupDescription": "XYZ security group",
            "VpcId": "vpc-abcxyz",
            "SecurityGroupIngress": [
                {
                    "IpProtocol": "tcp",
                    "FromPort": 1234,
                    "ToPort": 1234,
                    "SourceSecurityGroupId": { "Ref": "SourceSecurityGroupIds" }
                }
            ]
        }
    }
}

当然,SourceSecurityGroupId的{​​{1}}属性并未列出清单。有没有办法使这项工作?

更新 - 2019年2月27日

回想起来,正确的方法是创建SecurityGroupIngress,并允许仅从该安全组进入。然后,将该安全组添加到应该能够与日志服务器通信的任何EC2实例等。

2 个答案:

答案 0 :(得分:1)

我知道它已经很晚了,所以你已经弄明白了,但我遇到了同样的问题,我能够解决它。您需要创建一个&#34;安全组Ingress&#34;将规则添加到现有安全组的资源,如下所示:

{
    "LogServerSecurityGroup": {
        "Type": "AWS::EC2::SecurityGroup",
        "Properties": {
            "GroupDescription": "XYZ security group",
            "VpcId": "vpc-abcxyz"
        }
    },
    "LogServerSecyrituGroupIngress" : {
        "Type" : "AWS::EC2::SecurityGroupIngress",
        "Properties" : { 
            "GroupId" : {"Ref" : "LogServerSecurityGroup"},
            "IpProtocol" : "tcp",
            "FromPort" : "1234",
            "ToPort" : "1234",
            "SourceSecurityGroupId" : {"Ref" : "SourceSecurityGroupIds"}
        }

   }
}

您可以在此处找到更多信息: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html#cfn-ec2-security-group-ingress-groupid

答案 1 :(得分:-1)

上面的

SecurityGroupIngress参数是一个数组/列表。因此,在那里定义多个入口规则。

e.g:

  "SecurityGroupIngress": [
    {
      "IpProtocol": "tcp",
      "FromPort": 1234,
      "ToPort": 1234,
      "SourceSecurityGroupId": "SG-12345"
    },
    {
      "IpProtocol": "tcp",
      "FromPort": 1234,
      "ToPort": 1234,
      "SourceSecurityGroupId": "SG-abcde"
    },
    {
      "IpProtocol": "tcp",
      "FromPort": 1234,
      "ToPort": 1234,
      "SourceSecurityGroupId": "SG-54321"
    }
  ]