AWS CloudFormation: група безпеки VPC за замовчуванням


16

У мене є стек cfn, який (серед іншого) створює VPC, кілька груп безпеки та кілька примірників EC2. Тривіально призначати групи безпеки, створені в стеку, екземплярам, ​​які також створюються стеком. Однак мене цікавить VPC SG за замовчуванням.

Коли VPC створюється (вручну, незважаючи на GUI, за допомогою хмарної інформації або будь-яким іншим способом), 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"} ]
      }
}

У наведеному вище фрагменті я створюю групу безпеки "дозволити ssh" і призначаю її до примірника. Як уже згадувалося, мій стек також створює VPC (який запускається цей екземпляр), що, в свою чергу, створює групу безпеки за замовчуванням. На жаль, оскільки ця група створена автоматично AWS, її ідентифікатор групи недоступний для стека, що робить неможливим посилання на ідентифікатор. Спочатку я думав , що SecurityGroupsвласність буде варіант, так як це дозволило б мені посилатися на SG за замовчуванням його ім'ям, default. Це не працює, оскільки SecurityGroupsвластивість призначена лише для груп безпеки EC2, а не для груп безпеки VPC.

Так я застряг. Я вже відкрив справу з підтримкою AWS на цьому, але до цих пір вони не були корисні. Будь-які ідеї, як я можу це досягти?

Відповіді:


19

Посилання на групу безпеки за замовчуванням можливо, використовуючи:

{ "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, це дозволяє додавати правила Ingress / Egress до групи безпеки за замовчуванням для VPC в одному розгортанні стека.

Я майже впевнений, що проблема самореференції все ще впливає на будь-які спроби змінити будь-які інші властивості групи безпеки VPC за замовчуванням. Хорошим прикладом цього може бути додавання тегів чи опису. Якщо ви хочете змінити ці речі, вам доведеться мати справу з сторонніми групами безпеки.


6

Ну, як виявляється, підтримка AWS відповіла і повідомила мені, що вони визнають, що це розрив функцій у CloudFormation, і він був поданий команді розробників як запит на функцію.

Отже, поки ця функція не буде реалізована, вирішення полягає у створенні власної групи безпеки за замовчуванням, яка б повторювала таку саму поведінку, що і "справжня" SG за замовчуванням. На жаль, через самореференційний аспект цього налаштування все ще неможливо зробити в межах одного розгортання стека. Альтернатива - розгорнути стек один раз, не призначаючи групі безпеки за замовчуванням свої екземпляри. Після того, як стек буде створений (і ви мали змогу побачити, що таке ідентифікатор групи безпеки за замовчуванням), ви можете додати цей SG ID до своїх примірників.


2
Я вважаю, що якщо ви дотримуєтесь цього форуму.aws.amazon.com/thread.jspa?messageID=466960 і створите SecurityGroupIngress, посилаючись на вашу синтетичну групу безпеки за замовчуванням, ви зможете отримати самовідвід, який ви хочете, протягом одного розгортання стека
artbristol

Це вірно. Наприклад, якщо ви запускаєте стек CloudFormer на існуючому VPC, що містить за замовчуванням, самореференційні групи безпеки, він генерує шаблон, де SecurityGroupIngress розбивається як власний ресурс з обома GroupIdі SourceSecurityGroupIdвстановлюється на{ "Ref": "<SecurityGroupResource>" }
Габріель

2
Чи знаєте ви, чи оновлено це? Необхідність дублювати групу безпеки за замовчуванням дратує.
Пол Макдугалл

FWIW: "Видалити правило за замовчуванням" docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…
Якуб М.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.