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

Sam*_*Sam 5 amazon-web-services amazon-cloudformation

问题范围

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

场景细节

想象一下只有两个模板(还有更多)

  • 模板 A
  • 模板 B

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

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

如何使用云形成将入口规则添加到安全组 A以处理来自安全组 B 的流量?

我试过什么

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

其他选择

我可以只使用安全组 B 中主机的 CIDR 范围,因为在构建任何这些之前已知(所有这些都在具有单独子网的 VPC 中)但是我觉得必须有一种比接受来自cidr 范围。

Mat*_*ser 5

是的,这是可以做到的。

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

{
    "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" ]
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 保留此书签。这是资源类型的完整列表:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html (2认同)