У меня есть стек cfn, который (среди прочего) создает VPC, несколько групп безопасности и несколько экземпляров EC2. Назначить группы безопасности, созданные в стеке, экземплярам, которые также создаются стеком, тривиально. Однако меня интересует VPC SG по умолчанию.
Когда создается VPC (вручную с помощью графического интерфейса, облачной информации или любым другим способом), 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 (в котором запускается этот экземпляр), который, в свою очередь, создает группу безопасности по умолчанию. К сожалению, поскольку эта группа создается AWS автоматически, ее идентификатор группы недоступен для стека, что делает невозможным обращение по идентификатору. Я изначально думал, что SecurityGroups
свойство было бы вариантом, так как это позволило бы мне ссылаться на SG по умолчанию по его имени, default
. Однако это не работает, поскольку SecurityGroups
свойство предназначено только для групп безопасности EC2, но не для групп безопасности VPC.
Так что я застрял. я иметь открыли дело с поддержкой AWS по этому поводу, но пока они не помогли. Есть идеи, как я могу это сделать?
Ссылка на группу безопасности по умолчанию возможна с помощью:
{ "Fn::GetAtt" : ["VPC", "DefaultSecurityGroup"] }
Где «VPC» - имя вашего ресурса VPC.
С участием AWS::EC2::SecurityGroupIngress
и AWS::EC2::SecurityGroupEgress
, вы можете расширить права этой группы безопасности по умолчанию.
Думаю, это то, что вам нужно:
"VPCDefaultSecurityGroupIngress": {
"Type" : "AWS::EC2::SecurityGroupIngress",
"Properties" : {
"GroupId": { "Fn::GetAtt" : ["VPC", "DefaultSecurityGroup"] },
"IpProtocol":"tcp",
"FromPort":"22",
"ToPort":"22",
"CidrIp":"0.0.0.0/0"
}
},
Как упоминалось @artbristol и @gabriel, это позволяет добавлять правила входа / выхода в группу безопасности по умолчанию для VPC в развертывании с одним стеком.
Я почти уверен, что проблема самореференции по-прежнему влияет на любые попытки изменить какие-либо другие свойства в группе безопасности по умолчанию VPC. Хорошим примером этого может быть добавление тегов или описания. Если вы хотите изменить эти вещи, вам придется иметь дело с лежащими вокруг посторонними группами безопасности.
Что ж, как оказалось, служба поддержки AWS ответила и сообщила мне, что они признают, что это пробел в функции CloudFormation, и он был отправлен группе разработчиков в виде запроса функции.
Таким образом, пока эта функция не будет реализована, обходным путем будет создание вашей собственной группы безопасности «по умолчанию», которая воспроизводит то же поведение, что и «настоящая» группа безопасности по умолчанию. К сожалению, из-за самореференциального аспекта этой настройки это все еще невозможно выполнить в рамках одного развертывания стека. Альтернативой является однократное развертывание стека без назначения вашим экземплярам группы безопасности по умолчанию. Затем, как только стек будет создан (и у вас будет возможность увидеть идентификатор группы безопасности по умолчанию), вы можете добавить этот идентификатор SG в свои экземпляры.