AWS CloudFormation: groupe de sécurité par défaut VPC

16

J'ai une pile cfn qui (entre autres), crée un VPC, plusieurs groupes de sécurité et une poignée d'instances EC2. Il est trivial d'affecter des groupes de sécurité créés dans la pile à des instances qui sont également créées par la pile. Cependant, je suis intéressé par le VPC SG par défaut.

Lorsqu'un VPC est créé (que ce soit manuellement via l'interface graphique, par cloudformation ou par tout autre moyen), AWS crée un groupe de sécurité par défaut avec une règle «autoriser tout» pour toute instance de ce groupe.

Ce que j'essaie de faire est d'assigner ce groupe de sécurité par défaut avec plusieurs autres SG aux instances créées par la pile. Cela s'avère beaucoup plus difficile que je ne l'avais prévu. Voici quelques extraits montrant ce que je fais:

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

Dans l'extrait ci-dessus, je crée un groupe de sécurité "allow ssh" et l'assigne à une instance. Comme mentionné, ma pile crée également un VPC (dans lequel cette instance est lancée), qui à son tour crée un groupe de sécurité par défaut. Malheureusement, puisque ce groupe est créé automatiquement par AWS, son ID de groupe n'est pas disponible pour la pile, ce qui rend impossible la référence par ID. J'ai d'abord pensé que la SecurityGroupspropriété serait une option, car cela me permettrait de référencer le SG par défaut par son nom default,. Cela ne fonctionne pas, cependant, car la SecurityGroupspropriété est uniquement pour les groupes de sécurité EC2, pas les groupes de sécurité VPC.

Je suis donc coincé. Je l' ai ouvert une affaire avec le soutien AWS à ce sujet , mais jusqu'à présent, ils ont pas été utiles. Des idées sur la façon dont je peux y arriver?

EEAA
la source

Réponses:

19

Il est possible de référencer le groupe de sécurité par défaut en utilisant:

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

Où "VPC" est le nom de votre ressource VPC.

Avec AWS::EC2::SecurityGroupIngresset AWS::EC2::SecurityGroupEgress, vous pouvez augmenter les autorisations de ce groupe de sécurité par défaut.

Je pense que c'est ce que vous voulez:

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

Comme mentionné par @artbristol et @gabriel, cela permet aux règles d'entrée / sortie d'être ajoutées au groupe de sécurité par défaut pour le VPC dans un déploiement de pile unique.

Je suis à peu près sûr que le problème d'auto-référence affecte toujours toutes les tentatives de modification de l'une des autres propriétés du groupe de sécurité par défaut du VPC. Un bon exemple serait d'ajouter des balises ou une description. Si vous souhaitez changer ces choses, vous devrez faire face à des groupes de sécurité étrangers.

IanBlenke
la source
6

Eh bien, il s'avère que le support AWS a répondu et m'a informé qu'ils reconnaissaient qu'il s'agissait d'une lacune de fonctionnalité dans CloudFormation, et qu'il a été soumis à l'équipe de développement en tant que demande de fonctionnalité.

Donc, jusqu'à ce que cette fonctionnalité soit implémentée, la solution consiste à créer votre propre groupe de sécurité «par défaut» qui reproduit le même comportement que le «vrai» SG par défaut. Malheureusement, en raison de l'aspect autoréférentiel de cette configuration, il n'est toujours pas possible de le faire dans un déploiement de pile unique. L'alternative consiste à déployer la pile une fois, sans affecter le groupe de sécurité par défaut à vos instances. Ensuite, une fois la pile créée (et vous avez pu voir quel est l'ID de groupe de sécurité par défaut), vous pouvez ajouter cet ID SG à vos instances.

EEAA
la source
2
Je crois que si vous suivez ces forums.aws.amazon.com/thread.jspa?messageID=466960 et créez un SecurityGroupIngress, en vous référant à votre groupe de sécurité par défaut synthétique, vous pouvez obtenir l'auto-référence que vous souhaitez, au sein d'un déploiement de pile unique
artbristol
C'est correct. Par exemple, si vous exécutez la pile CloudFormer sur un VPC existant contenant des groupes de sécurité auto-référentiels par défaut, il générera un modèle dans lequel SecurityGroupIngress est divisé en tant que sa propre ressource avec les deux GroupIdet SourceSecurityGroupIddéfini sur{ "Ref": "<SecurityGroupResource>" }
Gabriel
2
Savez-vous par hasard si cela a été mis à jour? Devoir dupliquer le groupe de sécurité par défaut est ennuyeux.
Paul MacDougall
FWIW: "Supprimer la règle par défaut" docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…
Jakub M.