AWS CloudFormation: gruppo di sicurezza predefinito VPC


16

Ho uno stack cfn che (tra le altre cose) crea un VPC, diversi gruppi di sicurezza e una manciata di istanze EC2. È banale assegnare i gruppi di sicurezza creati all'interno dello stack alle istanze create anche dallo stack. Tuttavia, sono interessato al VPC SG predefinito.

Quando viene creato un VPC (sia manualmente che tramite la GUI, tramite cloudformation o qualsiasi altro mezzo), AWS crea un gruppo di sicurezza predefinito con una regola "consenti tutto" per qualsiasi istanza in quel gruppo.

Quello che sto cercando di fare è assegnare questo gruppo di sicurezza predefinito insieme a diversi altri SG alle istanze create dallo stack. Ciò si sta rivelando molto più difficile di quanto mi aspettassi. Ecco alcuni frammenti che mostrano cosa sto succedendo:

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

Nello snippet precedente, sto creando un gruppo di sicurezza "consenti ssh" e lo assegno a un'istanza. Come accennato, il mio stack crea anche un VPC (in cui viene avviata questa istanza), che a sua volta crea un gruppo di sicurezza predefinito. Sfortunatamente, poiché questo gruppo viene creato automaticamente da AWS, il suo ID gruppo non è disponibile nello stack, rendendo impossibile il riferimento tramite ID. Inizialmente ho pensato che la SecurityGroupsproprietà sarebbe stata un'opzione, in quanto ciò mi avrebbe permesso di fare riferimento al SG predefinito con il suo nome default,. Ciò non funziona, tuttavia, poiché la SecurityGroupsproprietà è solo per i gruppi di sicurezza EC2, non per i gruppi di sicurezza VPC.

Quindi sono bloccato. Io ho aperto un caso con il supporto di AWS su questo, ma finora, non sono stato utile. Qualche idea su come posso farlo?

Risposte:


19

È possibile fare riferimento al gruppo di sicurezza predefinito utilizzando:

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

Dove "VPC" è il nome della tua risorsa VPC.

Con AWS::EC2::SecurityGroupIngresse AWS::EC2::SecurityGroupEgress, puoi aumentare le autorizzazioni di questo gruppo di sicurezza predefinito.

Penso che questo sia quello che vuoi:

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

Come menzionato da @artbristol e @gabriel, ciò consente di aggiungere le regole Ingress / Egress al gruppo di sicurezza predefinito per il VPC in una distribuzione a stack singolo.

Sono abbastanza sicuro che il problema autoreferenziale abbia comunque ripercussioni su eventuali tentativi di modifica delle altre proprietà sul gruppo di sicurezza predefinito del VPC. Un buon esempio di ciò sarebbe l'aggiunta di tag o una descrizione. Se desideri cambiare queste cose, dovrai occuparti dei gruppi di sicurezza estranei che si trovano in giro.


6

Bene, a quanto pare, il supporto AWS mi ha risposto e mi ha informato che riconoscono che questo è un gap di funzionalità in CloudFormation, ed è stato presentato al team di sviluppo come richiesta di funzionalità.

Quindi, fino a quando questa funzionalità non verrà implementata, la soluzione alternativa è quella di creare il proprio gruppo di sicurezza "predefinito" che replica lo stesso comportamento dell'SG predefinito "reale". Sfortunatamente, a causa dell'aspetto autoreferenziale di questa configurazione, non è ancora possibile eseguire la distribuzione in un singolo stack. L'alternativa è distribuire lo stack una volta, senza assegnare le istanze al gruppo di sicurezza predefinito. Quindi, una volta creato lo stack (e hai avuto la possibilità di vedere qual è l'ID del gruppo di sicurezza per impostazione predefinita), puoi aggiungere tale ID SG alle tue istanze.


2
Credo che se segui questo forums.aws.amazon.com/thread.jspa?messageID=466960 e crei un SecurityGroupIngress, facendo riferimento al tuo gruppo di sicurezza predefinito sintetico, puoi ottenere l'auto-riferimento che desideri, in una distribuzione a stack singolo
artbristol,

Questo è corretto. Ad esempio, se si esegue lo stack CloudFormer su un VPC esistente contenente gruppi di sicurezza autoreferenziali predefiniti, verrà generato un modello in cui SecurityGroupIngress viene suddiviso come risorsa propria con entrambi GroupIde SourceSecurityGroupIdimpostato su{ "Ref": "<SecurityGroupResource>" }
Gabriel,

2
Ti capita di sapere se questo è stato aggiornato? Dover duplicare il gruppo di sicurezza predefinito è fastidioso.
Paul MacDougall,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.