我想创建一个CloudFormation模板,该模板创建一个安全组资源,允许从其他安全组的变量列表中进行插入。该模板将采用类型List<AWS::EC2::SecurityGroup::Id>
的参数。我将为此示例命名此参数SourceSecurityGroupIds
。然后,它将使用以下内容创建安全组资源:
{
"LogServerSecurityGroup": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": "XYZ security group",
"VpcId": "vpc-abcxyz",
"SecurityGroupIngress": [
{
"IpProtocol": "tcp",
"FromPort": 1234,
"ToPort": 1234,
"SourceSecurityGroupId": { "Ref": "SourceSecurityGroupIds" }
}
]
}
}
}
当然,SourceSecurityGroupId
的{{1}}属性并未列出清单。有没有办法使这项工作?
回想起来,正确的方法是创建SecurityGroupIngress
,并允许仅从该安全组进入。然后,将该安全组添加到应该能够与日志服务器通信的任何EC2实例等。
答案 0 :(得分:1)
我知道它已经很晚了,所以你已经弄明白了,但我遇到了同样的问题,我能够解决它。您需要创建一个&#34;安全组Ingress&#34;将规则添加到现有安全组的资源,如下所示:
{
"LogServerSecurityGroup": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": "XYZ security group",
"VpcId": "vpc-abcxyz"
}
},
"LogServerSecyrituGroupIngress" : {
"Type" : "AWS::EC2::SecurityGroupIngress",
"Properties" : {
"GroupId" : {"Ref" : "LogServerSecurityGroup"},
"IpProtocol" : "tcp",
"FromPort" : "1234",
"ToPort" : "1234",
"SourceSecurityGroupId" : {"Ref" : "SourceSecurityGroupIds"}
}
}
}
答案 1 :(得分:-1)
SecurityGroupIngress
参数是一个数组/列表。因此,在那里定义多个入口规则。
e.g:
"SecurityGroupIngress": [
{
"IpProtocol": "tcp",
"FromPort": 1234,
"ToPort": 1234,
"SourceSecurityGroupId": "SG-12345"
},
{
"IpProtocol": "tcp",
"FromPort": 1234,
"ToPort": 1234,
"SourceSecurityGroupId": "SG-abcde"
},
{
"IpProtocol": "tcp",
"FromPort": 1234,
"ToPort": 1234,
"SourceSecurityGroupId": "SG-54321"
}
]