0

Ich arbeite mit zwei einfachen Web-Apps, die miteinander reden müssen. Innerhalb von AWS CloudFormation habe ich eine Vorlage, die eine EC2-Instanz erstellt und beide Anwendungen auf demselben Server installiert (schließlich werde ich sie aufteilen, aber für den Moment leben sie auf der gleichen EC2-Instanz).CloudFormation SecurityGroup Circular Reference

Als Teil der EC2-Instanz muss ich die zu verwendende SecurityGroup definieren. Für den Moment habe ich einen Standard verwendet, aber ich möchte einen dynamisch erstellen. In der Gruppe erlaube ich SSH von meinem Rechner und ein paar Ports von der Box zu sich.

Wenn ich die Standardgruppe verwende, kann ich die öffentliche IP des Servers zu seiner eigenen Sicherheitsgruppe hinzufügen, damit sie mit sich selbst kommunizieren kann. Das Problem besteht während der CloudFormation-Vorlage, ich erhalte einen Zirkelverweis zwischen der SecurityGroup und der EC2-Instanz. Die Instanz benötigt zum Starten eine SecurityGroup, und diese Gruppe muss die öffentliche IP-Regel für das Feld EC2 enthalten.

Gibt es einen besseren Weg, dies zu tun, oder irgendwie etwas in der Art von "localhost" sperren, um diesen Verkehr für jetzt zuzulassen?

+1

Nachdem Sie die Instanz entweder mit der Standardgruppe oder einer dynamisch erstellten Sicherheitsgruppe erstellt haben, könnten Sie ein AWS :: EC2 :: SecurityGroupIngress-Objekt erstellen, das auf Ihre EC2-Instanz verweisen kann (glaube ich). http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html –

+0

Das hat den Trick gemacht. Es ermöglichte dem EC2, mit einer Nicht-Null-Gruppe hochzufahren. Dann nach init die IP angeschlossen. Danke noch einmal! – Walls

+1

Die Dokumentation beschreibt diesen Fall: Wenn Sie in den Ingress- und Egress-Regeln dieser Sicherheitsgruppen auf zwei Sicherheitsgruppen verweisen möchten, verwenden Sie die Ressourcen AWS :: EC2 :: SecurityGroupEgress und AWS :: EC2 :: SecurityGroupIngress, um Ihre Regeln zu definieren . Verwenden Sie nicht die eingebetteten Ingress- und Egress-Regeln in der AWS :: EC2 :: SecurityGroup. Dadurch entsteht eine zirkuläre Abhängigkeit, die AWS CloudFormation nicht zulässt. – jarmod

Antwort

1

Sie haben ein paar Optionen:

  1. Sie können hierfür eine selbstbeziehende Sicherheitsgruppe, die die EC2-Instanz selbst wird erlaubt, bedeutet zu kommunizieren, da auf dieser Sicherheitsgruppe ist. Es gibt einen Vorbehalt, und das sind keine eingebetteten Eingangs- und Ausgangsregeln in der AWS::EC2::SecurityGroup, stattdessen verwenden Sie AWS::EC2::SecurityGroupEgress und AWS::EC2::SecurityGroupIngress separat, wie angegeben here.

würde wie folgt aussehen:

"Resources" : { 
    "SelfRefSecurityGroup" : { 
     "Type" : "AWS::EC2::SecurityGroup", 
     "Properties" : { 
     "GroupDescription" : "Has access to itself", 
     "VpcId" : "vpc-xxxxxx" 
     } 
    }, 
    "MySecurityGroupIngress" : { 
     "Type" : "AWS::EC2::SecurityGroupIngress", 
     "Properties" : { 
      "GroupId" : { "Ref" : "SelfRefSecurityGroup" }, 
      "IpProtocol" : "tcp", 
      "ToPort" : "65535", 
      "FromPort" : "0", 
      "SourceSecurityGroupId" : { "Ref" : "SelfRefSecurityGroup" } 
     }, 
     "DependsOn" : "SelfRefSecurityGroup" 
    } 
  1. Beste Option: die Tabelle erstellen 2-Host-Einträge in (oder besser noch die DNS-Einträgen setzen ein Route53 private hosted zone verwenden) :

    webapp1.com 127.0.0.1

    webapp2.com 127.0.0.1

Ich würde nicht empfehlen, die Box über ihre öffentliche IP mit sich selbst zu sprechen. Wahrscheinlich werden Sie sogar Kosten verursachen! (https://aws.amazon.com/ec2/pricing/on-demand/) Plus die zusätzliche Wartung des SG.