AWS CloudFormation: VPC-Standardsicherheitsgruppe

14

Ich habe einen CFN-Stack, der (unter anderem) eine VPC, mehrere Sicherheitsgruppen und eine Handvoll EC2-Instanzen erstellt. Es ist einfach, Sicherheitsgruppen, die im Stapel erstellt werden, Instanzen zuzuweisen, die auch vom Stapel erstellt werden. Ich bin jedoch an der Standard-VPC-SG interessiert.

Wenn eine VPC erstellt wird (ob manuell über die GUI, durch Cloudformation oder auf andere Weise), erstellt AWS eine Standardsicherheitsgruppe mit einer "Alle zulassen" -Regel für eine Instanz in dieser Gruppe.

Ich versuche, diese Standardsicherheitsgruppe zusammen mit mehreren anderen SGs Instanzen zuzuweisen, die vom Stapel erstellt wurden. Dies erweist sich als weitaus schwieriger als ich erwartet hatte. Hier sind einige Ausschnitte, die zeigen, was ich vorhabe:

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

Im obigen Snippet erstelle ich eine Sicherheitsgruppe "allow ssh" und weise diese einer Instanz zu. Wie bereits erwähnt, erstellt mein Stack auch eine VPC (in der diese Instanz gestartet wird), die wiederum eine Standardsicherheitsgruppe erstellt. Da diese Gruppe von AWS automatisch erstellt wird, ist ihre Gruppen-ID für den Stapel leider nicht verfügbar, sodass es nicht möglich ist, anhand der ID auf sie zu verweisen. Ich dachte anfangs, dass die SecurityGroupsEigenschaft eine Option sein würde, da dies mir erlauben würde, die Standard - SG anhand ihres Namens zu referenzieren default. Dies funktioniert jedoch nicht, da die SecurityGroupsEigenschaft nur für EC2-Sicherheitsgruppen und nicht für VPC-Sicherheitsgruppen gilt.

Also stecke ich fest. Ich habe einen Fall mit AWS-Support zu diesem Thema eröffnet, aber bisher waren sie nicht hilfreich. Irgendwelche Ideen, wie ich das erreichen kann?

EEAA
quelle

Antworten:

18

Das Referenzieren der Standardsicherheitsgruppe ist möglich mit:

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

Wobei "VPC" der Name Ihrer VPC-Ressource ist.

Mit AWS::EC2::SecurityGroupIngressund AWS::EC2::SecurityGroupEgresskönnen Sie die Berechtigungen dieser Standardsicherheitsgruppe erweitern.

Ich denke das ist was du willst:

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

Wie von @artbristol und @gabriel erwähnt, können auf diese Weise Ingress / Egress-Regeln zur Standardsicherheitsgruppe für die VPC in einer Einzelstapelbereitstellung hinzugefügt werden.

Ich bin mir ziemlich sicher, dass sich das Problem der Selbstreferenzierung weiterhin auf alle Versuche auswirkt, andere Eigenschaften der Standardsicherheitsgruppe der VPC zu ändern. Ein gutes Beispiel hierfür wäre das Hinzufügen von Tags oder einer Beschreibung. Wenn Sie diese Dinge ändern möchten, müssen Sie sich mit herumliegenden Sicherheitsgruppen befassen.

IanBlenke
quelle
5

Wie sich herausstellt, hat der AWS-Support geantwortet und mir mitgeteilt, dass er erkannt hat, dass dies eine Funktionslücke in CloudFormation ist, und dass sie als Funktionsanforderung an das Entwicklungsteam weitergeleitet wurde.

Bis diese Funktion implementiert ist, besteht die Problemumgehung darin, eine eigene "Standard" -Sicherheitsgruppe zu erstellen, die dasselbe Verhalten wie die "echte" Standard-SG reproduziert. Leider ist es aufgrund des selbstreferenziellen Aspekts dieses Setups immer noch nicht möglich, innerhalb einer einzelnen Stapelbereitstellung zu arbeiten. Die Alternative besteht darin, den Stapel einmal bereitzustellen, ohne den Instanzen die Standardsicherheitsgruppe zuzuweisen. Sobald der Stapel erstellt wurde (und Sie die Standard-Sicherheitsgruppen-ID ermittelt haben), können Sie diese SG-ID zu Ihren Instanzen hinzufügen.

EEAA
quelle
2
Ich glaube , wenn Sie diesen folgen forums.aws.amazon.com/thread.jspa?messageID=466960 und erstellen SecurityGroupIngress, die sich auf Ihre synthetischen Standardsicherheitsgruppe, können Sie die Selbstreferenz, die Sie wollen, in einem einzigen Stapel Einsatz
artbristol
Das ist richtig. Wenn Sie beispielsweise den CloudFormer-Stapel auf einer vorhandenen VPC ausführen, die standardmäßige, selbstreferenzielle Sicherheitsgruppen enthält, wird eine Vorlage generiert, in der SecurityGroupIngress als eigene Ressource mit beiden aufgeteilt GroupIdund SourceSecurityGroupIdauf{ "Ref": "<SecurityGroupResource>" }
Gabriel,
2
Wissen Sie zufällig, ob dies aktualisiert wurde? Das Duplizieren der Standard-Sicherheitsgruppe ist ärgerlich.
Paul MacDougall
FWIW: "Standardregel entfernen" docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…
Jakub M.