Cloud Formation 模板将入口规则添加到现有安全组

Cloud Formation 模板将入口规则添加到现有安全组

问题范围

我有一个使用多个云形成模板构建的应用程序。它们需要相互交互,但太大/太复杂,无法在一个模板中构建。

场景细节

假设只有两个模板(模板数量明显更多)

  • 模板A
  • 模板 B

模板A创建一个以自身为唯一入口规则的安全组(安全组A),应用于此模板中一系列执行相同功能的主机。

模板 B 创建另一个安全组(安全组 B)和多个主机(在弹性 beantalk 中)。

问题

如何添加入口规则安全组 A对于来自保安组 B使用云的形成

我尝试过什么

我查看了文档,我想创建一个安全组入口规则并将其与安全组 A 关联,但据我所知这似乎不可行 -http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html

其他选择

我只能使用安全组 B 中主机的 CIDR 范围,因为在构建任何内容之前就已经知道这一点(全部在具有单独子网的 VPC 中),但我觉得一定有比接受来自 cidr 范围的流量更好更安全的方法。

答案1

是的,可以做到。

您需要将安全组标识符(针对安全组 A)作为参数传递到模板 B 的模板中。从那里,您可以在资源中引用安全组AWS::EC2::SecurityGroupIngressA。

{
    "AWSTemplateFormatVersion" : "2010-09-09",
    "Parameters" : {
        "SecurityGroupA" : {
            "Description" : "Security group to add Ingress rule to",
            "Type"        : "AWS::EC2::SecurityGroup::Id"
        }
    },
    "Resources" : {
        "LocalSecurityGroup": {
            "Type": "AWS::EC2::SecurityGroup"
        },
        "InboundRule": {
            "Type": "AWS::EC2::SecurityGroupIngress",
            "Properties":{
                "IpProtocol": "tcp",
                "FromPort": "80",
                "ToPort": "80",
                "SourceSecurityGroupId": {
                    "Fn::GetAtt": [ "LocalSecurityGroup", "GroupId" ]
                },
                "GroupId": {
                    "Fn::GetAtt": [ "SecurityGroupA", "GroupId" ]
                }
            }
        }
    }
}

请注意,此示例使用安全组 ID,当您的安全组位于 VPC 中时就是这种情况。如果它们位于 EC2-Classic 中,则应改用GroupName

相关内容