Es gibt 4 Szenarien in AWS VPC configure. Aber schauen wir uns diese beiden an:
- Szenario 1: 1 öffentliches Subnetz.
- Szenario 2: 1 öffentliches Subnetz und 1 privates Subnetz.
Da eine im öffentlichen Subnetz gestartete Instanz keine EIP hat (sofern sie nicht zugewiesen ist), kann sie bereits nicht über das Internet adressiert werden. Dann:
- Warum wird ein privates Subnetz benötigt?
- Was genau sind die Unterschiede zwischen privaten und öffentlichen Subnetzen?
Antworten:
Update: Ende Dezember 2015 AWS kündigte ein neues Feature, einen Managed NAT - Gateway für VPC . Dieser optionale Dienst bietet einen alternativen Mechanismus für VPC-Instanzen in einem privaten Subnetz, um auf das Internet zuzugreifen. Bisher war die übliche Lösung eine EC2-Instanz in einem öffentlichen Subnetz innerhalb der VPC, die als "NAT-Instanz" fungiert und die Übersetzung von Netzwerkadressen ermöglicht. technisch port Address Translation) für Fälle , in anderen, privaten Subnetzen, so dass diese Maschinen die NAT - Instanz öffentliche IP - Adresse für ihren Outbound - Internetzugang nutzen.
Der neue verwaltete NAT-Dienst ändert die Anwendbarkeit der folgenden Informationen nicht grundlegend. Diese Option wird jedoch im folgenden Inhalt nicht behandelt. Eine NAT-Instanz kann weiterhin wie beschrieben verwendet werden, oder stattdessen kann der Managed NAT Gateway-Dienst bereitgestellt werden. Eine erweiterte Version dieser Antwort, die weitere Informationen zu NAT Gateway und dessen Vergleich mit einer NAT-Instanz enthält, wird in Kürze verfügbar sein, da beide für das Paradigma des privaten / öffentlichen Subnetzes in VPC relevant sind.
Beachten Sie, dass das Internet-Gateway und das NAT-Gateway zwei verschiedene Funktionen sind. Alle VPC-Konfigurationen mit Internetzugang verfügen über ein virtuelles Internet Gateway-Objekt.
Um die Unterscheidung zwischen "privaten" und "öffentlichen" Subnetzen in Amazon VPC zu verstehen, müssen Sie wissen, wie IP-Routing und NAT (Network Address Translation) im Allgemeinen funktionieren und wie sie speziell in VPC implementiert sind.
Die Kernunterscheidung zwischen einem öffentlichen und einem privaten Subnetz in VPC wird durch die Standardroute dieses Subnetzes in den VPC-Routing-Tabellen definiert.
Diese Konfiguration bestimmt wiederum die Gültigkeit der Verwendung oder Nichtverwendung öffentlicher IP-Adressen für Instanzen in diesem bestimmten Subnetz.
Jedes Subnetz hat genau eine Standardroute, die nur eines von zwei Dingen sein kann:
Der Internet - Gateway führt keine Netzwerkadressübersetzung für Instanzen ohne öffentliche IP - Adressen so eine Instanz ohne eine öffentliche IP - Adresse kann keine Verbindung nach außen an dem Internet - Dinge wie Software - Updates herunterladen oder andere AWS - Ressourcen wie S3 Zugriff auf 1 und SQS - Wenn die Standardroute in seinem VPC-Subnetz das Internet Gateway-Objekt ist. Wenn Sie also eine Instanz in einem "öffentlichen" Subnetz sind, benötigen Sie eine öffentliche IP-Adresse, um eine erhebliche Anzahl von Aufgaben ausführen zu können, die Server normalerweise ausführen müssen.
Für Instanzen mit nur einer privaten IP-Adresse gibt es eine alternative Möglichkeit für den ausgehenden Zugriff auf das Internet. Hier kommen Network Address Translation² und eine NAT-Instanz ins Spiel.
Die Computer in einem privaten Subnetz können auf das Internet zugreifen, da die Standardroute in einem privaten Subnetz nicht das VPC-Objekt "Internet Gateway" ist, sondern eine als NAT-Instanz konfigurierte EC2-Instanz.
Eine NAT-Instanz ist eine Instanz in einem öffentlichen Subnetz mit einer öffentlichen IP und einer bestimmten Konfiguration. Es gibt AMIs, die dafür vorgefertigt sind, oder Sie können Ihre eigenen erstellen.
Wenn die privat adressierten Computer Datenverkehr nach außen senden, wird der Datenverkehr per VPC an die NAT-Instanz gesendet, die die Quell-IP-Adresse des Pakets (die private IP-Adresse des privaten Computers) durch ihre eigene öffentliche IP-Adresse ersetzt und den Datenverkehr sendet aus dem Internet, akzeptiert die Antwortpakete und leitet sie an die private Adresse des Ursprungscomputers zurück. (Möglicherweise wird auch der Quellport neu geschrieben, und in jedem Fall werden die Zuordnungen gespeichert, damit bekannt ist, auf welchem internen Computer die Antwortpakete empfangen werden sollen.) Eine NAT-Instanz lässt keinen "unerwarteten" eingehenden Datenverkehr zu den privaten Instanzen gelangen, es sei denn, sie wurde speziell dafür konfiguriert.
Wenn Sie also von einem privaten Subnetz aus auf eine externe Internetressource zugreifen, durchläuft der Datenverkehr die NAT-Instanz und scheint dem Ziel von der öffentlichen IP-Adresse der NAT-Instanz zu stammen. Der Antwortdatenverkehr wird also an die NAT-Instanz zurückgegeben. Weder die der NAT-Instanz zugewiesene Sicherheitsgruppe noch die der privaten Instanz zugewiesene Sicherheitsgruppe müssen so konfiguriert werden, dass dieser Antwortverkehr "zugelassen" wird, da Sicherheitsgruppen statusbehaftet sind. Sie erkennen, dass der Antwortverkehr mit internen Sitzungen korreliert, sodass er automatisch zulässig ist. Unerwarteter Datenverkehr wird natürlich abgelehnt, es sei denn, die Sicherheitsgruppe ist so konfiguriert, dass er dies zulässt.
Im Gegensatz zum herkömmlichen IP-Routing, bei dem sich Ihr Standard-Gateway in demselben Subnetz befindet, funktioniert es in VPC anders: Die NAT-Instanz für ein bestimmtes privates Subnetz befindet sich immer in einem anderen Subnetz, und dieses andere Subnetz ist immer ein öffentliches Subnetz, weil Die NAT-Instanz muss über eine öffentliche externe IP verfügen, und ihr Standardgateway muss das VPC-Objekt "Internet Gateway" sein.
Ebenso ... können Sie keine Instanz mit einer öffentlichen IP in einem privaten Subnetz bereitstellen. Es funktioniert nicht, da die Standardroute in einem privaten Subnetz (per Definition) eine NAT-Instanz (die NAT für den Datenverkehr ausführt) und nicht das Internet Gateway-Objekt (das dies nicht tut) ist. Eingehender Datenverkehr aus dem Internet würde die öffentliche IP der Instanz treffen, aber die Antworten würden versuchen, durch die NAT-Instanz nach außen zu leiten, wodurch entweder der Datenverkehr unterbrochen würde (da er sich aus Antworten auf Verbindungen zusammensetzt, die ihm nicht bekannt sind) würde als ungültig angesehen werden) oder würde den Antwortverkehr neu schreiben, um seine eigene öffentliche IP-Adresse zu verwenden, was nicht funktionieren würde, da der externe Ursprung keine Antworten akzeptieren würde, die von einer anderen IP-Adresse stammen als der, mit der sie die Kommunikation initiieren wollten .
Im Wesentlichen geht es bei den Bezeichnungen "privat" und "öffentlich" also nicht wirklich um Zugänglichkeit oder Unzugänglichkeit aus dem Internet. Hierbei handelt es sich um die Arten von Adressen, die den Instanzen in diesem Subnetz zugewiesen werden. Dies ist relevant, da diese IP-Adressen für Internetinteraktionen übersetzt oder nicht übersetzt werden müssen.
Da VPC implizite Routen von allen VPC-Subnetzen zu allen anderen VPC-Subnetzen hat, spielt die Standardroute im internen VPC-Verkehr keine Rolle. Instanzen mit privaten IP-Adressen stellen eine Verbindung zu anderen privaten IP-Adressen in der VPC "von" ihrer privaten IP-Adresse her her, nicht "von" ihrer öffentlichen IP-Adresse (falls vorhanden) ... solange die Zieladresse eine andere private Adresse ist innerhalb der VPC.
Wenn Ihre Instanzen mit privaten IP-Adressen unter keinen Umständen ausgehenden Internetverkehr erzeugen müssen, können sie technisch in einem "öffentlichen" Subnetz bereitgestellt werden und sind über das Internet immer noch nicht zugänglich ... aber unter einer solchen Konfiguration Es ist für sie unmöglich, ausgehenden Datenverkehr zum Internet zu generieren, der wiederum Verbindungen zu anderen AWS-Infrastrukturdiensten wie S3 1 oder SQS umfasst.
1. Insbesondere in Bezug auf S3 ist die Aussage, dass ein Internetzugang immer erforderlich ist, eine übermäßige Vereinfachung, die im Laufe der Zeit wahrscheinlich an Umfang zunehmen und sich auf andere AWS-Services ausbreiten wird, da die Funktionen von VPC weiter wachsen und sich weiterentwickeln. Es gibt ein relativ neues Konzept, das als VPC-Endpunkt bezeichnet wirdAuf diese Weise können Ihre Instanzen, einschließlich solcher mit nur privaten IP-Adressen, direkt von ausgewählten Subnetzen innerhalb der VPC auf S3 zugreifen, ohne "das Internet" zu berühren und ohne eine NAT-Instanz oder ein NAT-Gateway zu verwenden. Dies erfordert jedoch eine zusätzliche Konfiguration Nur verwendbar, um auf Buckets innerhalb derselben AWS-Region wie Ihre VPC zuzugreifen. Standardmäßig ist S3 - derzeit der einzige Dienst, der die Möglichkeit zum Erstellen von VPC-Endpunkten bietet - nur über das Internet von VPC aus zugänglich. Wenn Sie einen VPC-Endpunkt erstellen, wird eine Präfixliste erstellt (
pl-xxxxxxxx
) ist, den Sie in Ihren VPC-Routentabellen verwenden können, um Datenverkehr, der für diesen bestimmten AWS-Dienst gebunden ist, über das virtuelle "VPC-Endpunkt" -Objekt direkt an den Dienst zu senden. Es löst auch das Problem, den ausgehenden Zugriff auf S3 für eine bestimmte Instanz einzuschränken, da die Präfixliste in ausgehenden Sicherheitsgruppen anstelle einer Ziel-IP-Adresse oder eines Zielblockes verwendet werden kann - und ein S3-VPC-Endpunkt zusätzlichen Richtlinienanweisungen unterliegen kann Einschränkung des Eimerzugangs von innen nach Wunsch.2. Wie in der Dokumentation erwähnt, wird hier tatsächlich die Übersetzung von Port- und Netzwerkadressen erörtert. Es ist üblich, wenn auch technisch etwas ungenau, die kombinierte Operation als "NAT" zu bezeichnen. Dies ähnelt in gewisser Weise der Art und Weise, wie viele von uns "SSL" sagen, wenn wir tatsächlich "TLS" meinen. Wir wissen, wovon wir sprechen, aber wir verwenden nicht das richtigste Wort, um es zu beschreiben. "Hinweis Wir verwenden den Begriff NAT in dieser Dokumentation, um der gängigen IT-Praxis zu folgen, obwohl die eigentliche Rolle eines NAT-Geräts sowohl die Adressübersetzung als auch die Portadressübersetzung (PAT) ist."
quelle
Ich würde ein anderes "privates" Subnetz und NAT-Instanzen / Gateways vorschlagen. Sie sind nicht notwendig. Wenn Sie nicht möchten, dass der Computer über das Internet erreichbar ist, ordnen Sie ihn nicht einer Sicherheitsgruppe zu, die einen solchen Zugriff ermöglicht.
Durch das Löschen der NAT-Instanz / des NAT-Gateways eliminieren Sie die laufenden Kosten der Instanz / des Gateways und das Tempolimit (250 MBit oder 10 GBit).
Wenn Sie einen Computer haben, der auch nicht direkt auf das Internet zugreifen muss (und ich würde fragen, wie Sie ihn patchen *), weisen Sie auf keinen Fall eine öffentliche IP-Adresse zu.
* Wenn die Antwort hier eine Art Proxy ist, entsteht ein Overhead, aber jeder für sich.
quelle
Ich habe nicht den Ruf, Michaels Antwort oben einen Kommentar hinzuzufügen, daher füge ich meinen Kommentar als Antwort hinzu.
Es ist erwähnenswert, dass das von AWS verwaltete Gateway im Vergleich zum Ausführen einer eigenen Instanz etwa dreimal so teuer ist wie bisher. Dies setzt natürlich voraus, dass Sie nur eine NAT-Instanz benötigen (dh Sie haben nicht mehrere NAT-Instanzen für das Failover usw. konfiguriert), was im Allgemeinen für die meisten kleinen bis mittleren Anwendungsfallszenarien gilt. Unter der Annahme einer monatlichen Datenübertragung von 100 GB über das NAT-Gateway,
Monatliche Kosten für verwaltete NAT-Instanzen = 33,48 USD / Monat (0,045 USD / Stunde * 744 Stunden pro Monat) + 4,50 USD (0,045 USD pro verarbeitete GB-Daten * 100 GB) + 10 USD (0,10 USD / GB Standard-AWS-Datenübertragungsgebühren für alle über die NAT-Gateway) = 47,98 USD
Als NAT-Instanz konfigurierte t2.nano-Instanz = 4,84 USD / Monat (0,0065 USD * 744 Stunden pro Monat) + 10 USD (0,10 USD / GB Standard-AWS-Datenübertragungsgebühren für alle über die NAT-Instanz übertragenen Daten) = 14,84 USD
Dies ändert sich natürlich, wenn Sie sich für redundante NAT-Instanzen entscheiden, da das von AWS verwaltete NAT-Gateway über eine integrierte Redundanz für hohe Verfügbarkeit verfügt. Wenn Sie sich nicht für die zusätzlichen 33 US-Dollar pro Monat interessieren, ist die verwaltete NAT-Instanz definitiv den reduzierten Aufwand wert, keine weitere Instanz warten zu müssen. Wenn Sie eine VPN-Instanz (z. B. OpenVPN) für den Zugriff auf Ihre Instanzen innerhalb der VPC ausführen, können Sie diese Instanz einfach so konfigurieren, dass sie auch als NAT-Gateway fungiert, und dann müssen Sie keine zusätzliche Instanz nur für NAT verwalten ( obwohl einige Leute die Idee, VPN und NAT zu kombinieren, missbilligen mögen).
quelle
Die Antwort von Michael - sqlbot geht implizit davon aus, dass private IP-Adressen erforderlich sind. Ich denke, es lohnt sich, diese Annahme in Frage zu stellen - müssen wir überhaupt private IP-Adressen verwenden? Mindestens ein Kommentator stellte dieselbe Frage.
Stellen Sie sich ein Szenario vor, in dem Sie eine VPC verwenden und allen Ihren EC2-Instanzen öffentliche IP-Adressen zuweisen. Keine Sorge, das bedeutet nicht, dass sie unbedingt über das Internet erreichbar sind, da Sie Sicherheitsgruppen verwenden, um den Zugriff genauso einzuschränken, wie es mit EC2 classic funktioniert hat. Durch die Verwendung öffentlicher IP-Adressen haben Sie den Vorteil, dass Sie bestimmte Dienste problemlos einer begrenzten Zielgruppe zugänglich machen können, ohne eine ELB verwenden zu müssen. Dies befreit Sie von der Notwendigkeit, eine NAT-Instanz oder ein NAT-Gateway einzurichten. Und da Sie halb so viele Subnetze benötigen, können Sie eine kleinere CIDR-Zuordnung für Ihre VPC verwenden oder größere Subnetze mit der gleichen VPC-Größe erstellen. Und weniger Subnetze bedeuten, dass Sie auch für Inter-AZ-Verkehr weniger bezahlen.
Warum machen wir das nicht? Warum ist laut AWS die beste Vorgehensweise die Verwendung privater IPs?
Amazon Web Services verfügt nur über ein begrenztes Angebot an öffentlichen IPv4-Adressen, da das Internet insgesamt nur über ein begrenztes Angebot an öffentlichen IPv4-Adressen verfügt. Es liegt in ihrem besten Interesse, dass Sie private IP-Adressen verwenden, die praktisch unbegrenzt sind, anstatt übermäßig knappe öffentliche IPv4-Adressen zu verbrauchen. Sie können einige Beweise dafür darin sehen, wie AWS elastische IPs bewertet; Eine an eine Instanz angehängte EIP ist kostenlos, eine nicht verwendete EIP kostet jedoch Geld.
Nehmen wir jedoch an, dass uns der Mangel an öffentlichen IPv4-Adressen im Internet egal ist. Immerhin ist meine Bewerbung etwas Besonderes. Was passiert als nächstes?
Es gibt nur zwei Möglichkeiten, eine öffentliche IP-Adresse an eine EC2-Instanz in einer VPC anzuhängen.
1. Öffentliche IP-Adresse zuordnen
Sie können beim Starten einer neuen EC2-Instanz eine öffentliche IP-Adresse anfordern. Diese Option wird in der Konsole als Kontrollkästchen, bei Verwendung von aws-cli als Flag --associate-public-ip-address und bei Verwendung von CloudFormation als Flag AssociatePublicIpAddress für ein eingebettetes Netzwerkschnittstellenobjekt angezeigt. In jedem Fall wird die öffentliche IP-Adresse zugewiesen
eth0
(DeviceIndex = 0). Sie können diesen Ansatz nur verwenden, wenn Sie eine neue Instanz starten. Dies bringt jedoch einige Nachteile mit sich.Ein Nachteil besteht darin, dass das Ändern der Sicherheitsgruppe einer Instanz, die ein eingebettetes Netzwerkschnittstellenobjekt verwendet, das sofortige Ersetzen der Instanz erzwingt, zumindest wenn Sie CloudFormation verwenden.
Ein weiterer Nachteil ist, dass eine auf diese Weise zugewiesene öffentliche IP-Adresse beim Stoppen der Instanz verloren geht.
2. Elastische IP
Im Allgemeinen sind elastische IPs der bevorzugte Ansatz, da sie sicherer sind. Es wird garantiert, dass Sie weiterhin dieselbe IP-Adresse verwenden, Sie riskieren nicht, versehentlich EC2-Instanzen zu löschen, Sie können jederzeit eine elastische IP frei anhängen / trennen und Sie haben die Freiheit, Sicherheitsgruppen zu ändern, die auf Ihre EC2-Instanzen angewendet werden.
... Aber AWS beschränkt Sie auf 5 EIPs pro Region. Sie können mehr anfordern, und Ihre Anfrage wird möglicherweise gewährt. Aber AWS könnte diese Anfrage genauso wahrscheinlich ablehnen, basierend auf den oben erwähnten Überlegungen. Sie möchten sich also wahrscheinlich nicht auf EIPs verlassen, wenn Sie planen, Ihre Infrastruktur jemals über 5 EC2-Instanzen pro Region hinaus zu skalieren.
Zusammenfassend lässt sich sagen, dass die Verwendung öffentlicher IP-Adressen einige Vorteile mit sich bringt. Wenn Sie jedoch versuchen, ausschließlich öffentliche IP-Adressen zu verwenden, treten Verwaltungs- oder Skalierungsprobleme auf. Hoffentlich hilft dies zu veranschaulichen und zu erklären, warum die Best Practices so sind, wie sie sind.
quelle