问题范围
我有一个使用多个云形成模板构建的应用程序。它们需要相互交互,但太大/太复杂,无法在一个模板中构建。
场景细节
假设只有两个模板(模板数量明显更多)
- 模板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::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" ]
}
}
}
}
}
请注意,此示例使用安全组 ID,当您的安全组位于 VPC 中时就是这种情况。如果它们位于 EC2-Classic 中,则应改用GroupName
。