Mam stos cfn, który (między innymi) tworzy VPC, kilka grup zabezpieczeń i garść instancji EC2. Trywialne jest przypisywanie grup zabezpieczeń tworzonych w stosie do instancji, które są również tworzone przez stos. Jestem jednak zainteresowany domyślnym VPC SG.
Kiedy tworzony jest VPC (ręcznie przez GUI, w formie chmury lub w jakikolwiek inny sposób), AWS tworzy domyślną grupę zabezpieczeń z regułą „zezwól na wszystko” dla dowolnego wystąpienia w tej grupie.
Usiłuję przypisać tę domyślną grupę zabezpieczeń wraz z kilkoma innymi SG do instancji utworzonych przez stos. Jest to o wiele trudniejsze niż się spodziewałem. Oto kilka fragmentów pokazujących, co się dzieje:
"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"} ]
}
}
W powyższym fragmencie tworzę grupę zabezpieczeń „zezwól na ssh” i przypisuję ją do instancji. Jak wspomniano, mój stos tworzy również VPC (w którym ta instancja jest uruchamiana), co z kolei tworzy domyślną grupę zabezpieczeń. Niestety, ponieważ ta grupa jest tworzona automatycznie przez AWS, jej identyfikator grupy jest niedostępny dla stosu, co uniemożliwia odwołanie się do niej przez identyfikator. Początkowo uważano, że SecurityGroups
nieruchomość będzie opcja, jako że pozwoli mi odwołać domyślny SG według jego nazwy, default
. To jednak nie działa, ponieważ SecurityGroups
właściwość dotyczy tylko grup zabezpieczeń EC2, a nie grup zabezpieczeń VPC.
Więc utknąłem. I nie otworzyła sprawę ze wsparciem AWS na ten temat, ale do tej pory nie byli pomocni. Jakieś pomysły na to, jak to osiągnąć?
SecurityGroupIngress
, odnosząc się do swojej syntetycznej domyślnej grupy zabezpieczeń, możesz uzyskać odnośnik, który chcesz, w ramach wdrożenia pojedynczego stosuGroupId
iSourceSecurityGroupId
ustawiony na{ "Ref": "<SecurityGroupResource>" }