AWS CloudFormation: grupo de segurança padrão do VPC

10

Eu tenho uma pilha de cfn que (entre outras coisas) cria uma VPC, vários grupos de segurança e um punhado de instâncias do EC2. É trivial atribuir grupos de segurança criados dentro da pilha a instâncias que também são criadas pela pilha. No entanto, estou interessado no padrão VPC SG.

Quando uma VPC é criada (seja manualmente por meio da GUI, por cloudformação ou por qualquer outro meio), a AWS cria um grupo de segurança padrão com uma regra "allow all" para qualquer instância desse grupo.

O que estou tentando fazer é atribuir esse grupo de segurança padrão junto com vários outros SGs às instâncias criadas pela pilha. Isso está provando ser muito mais difícil do que eu esperava. Aqui estão alguns trechos mostrando o que eu estou fazendo:

"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"} ]
      }
}

No snippet acima, estou criando um grupo de segurança "allow ssh" e atribuindo isso a uma instância. Como mencionado, minha pilha também cria um VPC (no qual esta instância é iniciada), que por sua vez cria um grupo de segurança padrão. Infelizmente, como esse grupo é criado automaticamente pela AWS, seu ID de grupo não está disponível para a pilha, impossibilitando a referência por ID. Inicialmente, pensei que a propriedade SecurityGroups seria uma opção, pois isso me permitiria referenciar o SG padrão por seu nome, default . No entanto, isso não funciona, pois a propriedade SecurityGroups é apenas para grupos de segurança do EC2, não para grupos de segurança do VPC.

Então estou preso. Eu tenho aberto um caso com suporte da AWS sobre isso, mas até agora eles não foram úteis. Alguma idéia de como posso realizar isso?

    
por EEAA 07.10.2013 / 23:06

2 respostas

4

Bem, na verdade, o suporte da AWS respondeu e me informou que eles reconhecem que essa é uma lacuna de recursos no CloudFormation e foi enviada para a equipe de desenvolvimento como uma solicitação de recurso.

Portanto, até que esse recurso seja implementado, a solução é criar seu próprio grupo de segurança "padrão" que replica o mesmo comportamento do SG padrão "real". Infelizmente, devido ao aspecto auto-referencial dessa configuração, ainda não é possível fazer isso em uma única implantação de pilha. A alternativa é implantar a pilha uma vez, sem atribuir ao grupo de segurança padrão suas instâncias. Depois que a pilha for criada (e você tiver a chance de ver qual é a ID do grupo de segurança para o padrão), você poderá adicionar essa ID do SG às suas instâncias.

    
por 08.10.2013 / 16:44
13

Fazer referência ao grupo de segurança padrão é possível usando:

{ "Fn::GetAtt" : ["VPC", "DefaultSecurityGroup"] }

Onde "VPC" é o nome do seu recurso de VPC.

Com AWS::EC2::SecurityGroupIngress e AWS::EC2::SecurityGroupEgress , você pode aumentar as permissões desse grupo de segurança padrão.

Acho que é isso que você quer:

"VPCDefaultSecurityGroupIngress": {
  "Type" : "AWS::EC2::SecurityGroupIngress",
  "Properties" : {
    "GroupId": { "Fn::GetAtt" : ["VPC", "DefaultSecurityGroup"] },
    "IpProtocol":"tcp",
    "FromPort":"22",
    "ToPort":"22",
    "CidrIp":"0.0.0.0/0"
  }
},

Como mencionado por @artbristol e @gabriel, isso permite que as regras de entrada / saída sejam adicionadas ao grupo de segurança padrão para o VPC em uma única implantação de pilha.

Tenho certeza de que o problema de auto-referência ainda afeta qualquer tentativa de alterar qualquer uma das outras propriedades no grupo de segurança padrão do VPC. Um bom exemplo disso seria adicionar tags ou uma descrição. Se você quiser mudar essas coisas, terá que lidar com grupos externos de segurança por aí.

    
por 27.06.2015 / 20:30