我有一个cfn堆栈(除其他外),创建一个VPC,几个安全组和一些EC2实例。将在堆栈内创建的安全组分配给同样由堆栈创建的实例很简单。但是,我对默认的VPC SG感兴趣。
创建VPC后(无论是通过GUI手动,通过cloudformation还是其他方式手动创建),AWS都会为该组中的任何实例创建一个默认的安全组,并使用“允许所有”规则。
我想做的就是将此默认安全组以及其他几个SG分配给由堆栈创建的实例。事实证明,这比我预期的要困难得多。以下是一些片段,显示了我的情况:
"AllowSSHSecGroup":{
"Type":"AWS::EC2::SecurityGroup",
"Properties":{
"GroupDescription":"Allow SSH from anywhere",
"VpcId":{
"Ref":"DevVPC"
},
"SecurityGroupIngress":[
{
"IpProtocol":"tcp",
"FromPort":"22",
"ToPort":"22",
"CidrIp":"0.0.0.0/0"
}
]
}
},
"Instance001" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"ImageId" : "ami-7eab224e",
"InstanceType" : "m1.large",
"AvailabilityZone" : "us-west-2a",
"PrivateIpAddress" : "10.22.0.110",
"SecurityGroupIds" : [ {"Ref" : "AllowSSHSecGroup"} ],
"SubnetId" : { "Ref" : "PublicSubnet" },
"KeyName" : "erik-key",
"DisableApiTermination" : "false",
"Tags" : [ { "Key": "Name", "Value": "Instance001"} ]
}
}
在以上代码段中,我正在创建一个“ allow ssh”安全组并将其分配给实例。如前所述,我的堆栈还创建了一个VPC(在该实例中启动了VPC),该VPC又创建了一个默认的安全组。不幸的是,由于该组是由AWS自动创建的,因此其组ID在堆栈中不可用,从而无法通过ID进行引用。最初,我认为该SecurityGroups
属性将是一个选项,因为这使我可以通过其名称来引用默认SG default
。但是,这不起作用,因为该SecurityGroups
属性仅适用于EC2安全组,不适用于VPC安全组。
所以我被卡住了。我已经为此提供了AWS支持的案例,但是到目前为止,它们并没有帮助。关于如何实现此目标的任何想法?
SecurityGroupIngress
,以引用您的综合默认安全组,则可以在单个堆栈部署中获取所需的自我参考