Назад | Перейти на главную страницу

Шаблон Cloud Formation добавляет правило входа в существующую группу безопасности

Объем проблемы

У меня есть приложение, созданное с использованием нескольких шаблонов формирования облака. Они должны взаимодействовать друг с другом, но слишком велики / сложны для создания одного шаблона.

Деталь сценария

Представьте, что шаблонов всего два (их значительно больше)

Шаблон 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 вместо.