Объем проблемы
У меня есть приложение, созданное с использованием нескольких шаблонов формирования облака. Они должны взаимодействовать друг с другом, но слишком велики / сложны для создания одного шаблона.
Деталь сценария
Представьте, что шаблонов всего два (их значительно больше)
Шаблон A создает группу безопасности (группа безопасности A) с самим собой в качестве единственного правила входа. Он применяется к серии хостов в этом шаблоне, которые выполняют ту же функцию.
Шаблон B создает другую группу безопасности (группа безопасности B) и несколько хостов (в эластичном beanstalk).
Вопрос
Как добавить правило входа в Группа безопасности A для трафика из Группа безопасности B с помощью образование облаков?
Что я пробовал
Я просмотрел документацию, я хочу создать правило Ingress для группы безопасности и связать его с группой безопасности A, но, насколько я могу судить, это не кажется жизнеспособным - http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule.html
Другие альтернативы
Я мог бы просто использовать диапазон CIDR хостов, которые находятся в группе безопасности B, как это было известно до того, как что-либо из этого будет построено (все в VPC с отдельными подсетями), однако я считаю, что должен быть более безопасный способ, чем прием трафика от cidr диапазон.
Да, это может быть сделано.
Вам необходимо передать идентификатор группы безопасности (для группы безопасности A) в шаблон для шаблона B в качестве параметра. Оттуда вы можете ссылаться на группу безопасности A в AWS::EC2::SecurityGroupIngress
ресурс.
{
"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" ]
}
}
}
}
}
Обратите внимание, что в этом примере используется идентификатор группы безопасности, который имеет место, когда ваши группы безопасности находятся в VPC. Если они находятся в EC2-Classic, вы должны использовать GroupName
вместо.