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

14

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

Quando uma VPC é criada (manualmente pela GUI, por forma de nuvem ou por qualquer outro meio), a AWS cria um grupo de segurança padrão com uma regra "permitir tudo" para qualquer instância desse grupo.

O que estou tentando fazer é atribuir esse grupo de segurança padrão, juntamente com vários outros SGs, a instâncias criadas pela pilha. Isso está se mostrando muito mais difícil do que eu previa. Aqui estão alguns trechos mostrando o que estou acontecendo:

"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-o a uma instância. Como mencionado, minha pilha também cria uma VPC (na 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 na pilha, impossibilitando a referência por ID. Inicialmente, pensei que a SecurityGroupspropriedade seria uma opção, pois isso me permitiria referenciar o SG padrão pelo nome default. Porém, isso não funciona, pois a SecurityGroupspropriedade é apenas para grupos de segurança EC2, não para grupos de segurança VPC.

Então, eu estou preso. Eu abriu um caso com apoio AWS sobre isso, mas até agora, não ter sido útil. Alguma idéia de como posso fazer isso?

EEAA
fonte

Respostas:

18

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

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

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

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

Eu 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"
  }
},

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

Tenho certeza de que o problema autorreferencial ainda afeta as tentativas de alterar qualquer outra propriedade no grupo de segurança padrão da VPC. Um bom exemplo disso seria adicionar tags ou uma descrição. Se você deseja mudar essas coisas, precisará lidar com grupos de segurança estranhos.

IanBlenke
fonte
5

Bem, como se vê, o suporte da AWS respondeu e me informou que eles reconhecem que essa é uma lacuna de recursos no CloudFormation e foi enviada à equipe de desenvolvimento como uma solicitação de recurso.

Portanto, até que esse recurso seja implementado, a solução alternativa é criar seu próprio grupo de segurança "padrão" que replica o mesmo comportamento que o SG padrão "real". Infelizmente, devido ao aspecto autorreferencial dessa configuração, ainda não é possível fazer 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 é o ID do grupo de segurança por padrão), poderá adicionar esse ID SG às suas instâncias.

EEAA
fonte
2
Acredito que se você seguir este forums.aws.amazon.com/thread.jspa?messageID=466960 e criar um SecurityGroupIngress, referindo-se ao seu grupo de segurança padrão sintético, poderá obter a auto-referência desejada em uma implantação de pilha única
artbristol 22/10
Isto está certo. Por exemplo, se você executar a pilha do CloudFormer em uma VPC existente contendo grupos de segurança autorreferenciais padrão, ele gerará um modelo em que o SecurityGroupIngress é dividido como seu próprio recurso com ambos GroupIde SourceSecurityGroupIddefinido como{ "Ref": "<SecurityGroupResource>" }
Gabriel
2
Você sabe se isso foi atualizado? Ter que duplicar o grupo de segurança padrão é irritante.
Paul MacDougall
FWIW: "Remover regra padrão" docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…
Jakub M.