Sam*_*Sam 5 amazon-web-services amazon-cloudformation
问题范围
我有一个使用多个云形成模板构建的应用程序。它们需要相互交互,但是太大/太复杂而无法在一个模板中构建。
场景细节
想象一下只有两个模板(还有更多)
模板 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 范围。
是的,这是可以做到的。
您需要将安全组标识符(对于安全组 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
改用 。
归档时间: |
|
查看次数: |
6244 次 |
最近记录: |