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

AWS CloudFormation: группа безопасности VPC по умолчанию

У меня есть стек 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 в свои экземпляры.