Wie greife ich von einer EC2 Instanz, welche keine Verbindung zum Internet hat, auf Daten in einem S3 Bucket zu?

Wenn du von einer EC2 Instanz auf Daten in einem S3 Bucket zugreifen möchtest, brauchst du dazu normalerweise eine Verbindung zum Internet, denn der Zugriff erfolgt über eine öffentliche URL, wie z.B. https://beispielbucket.s3.amazonaws.com. Damit du nun von deiner EC2 Instanz auf die Daten vom S3 Bucket zugreifen kannst, musst du entweder die Instanz ins öffentliche Subnetz stellen oder die Verbindung via einen NAT Gateway machen. Der Zugriff erfolgt verschlüsselt, dennoch werden die Daten über das Internet übertragen. 

Standard Zugriff von einer EC2 Instanz auf einen S3 Bucket.

Wie wir alle wissen, ist das Internet grundsätzlich böse und wir versuchen nur dann eine Verbindung zum Internet herzustellen, wenn wir sie wirklich brauchen. Daher ergibt sich immer wieder die Situation, dass ich von einer EC2 Instanz grundsätzlich keine Internetverbindung haben möchte, dennoch auf Daten in einem S3 Bucket oder anderen AWS Services zugreifen muss. Anstatt, dass ich nun die EC2 Instanz doch ans Internet hänge, gibt es eine zweite Möglichkeit den Zugriff auf den S3 Bucket zu gewährleisten. 

Die Lösung heisst VPC Endpoint Gateway. Anstatt dass der Datenverkehr durch das öffentliche Internet geleitet wird, wird die Verbindung über den VPC Endpoint Gateway umgeleitet und bleibt so im AWS Netzwerk. Dies bedeutet auch, dass die EC2 Instanz keinen Internet Zugriff braucht, sondern lediglich den Zugriff auf den VPC Endpoint Gateway benötigt.

Privater Zugriff von einer EC2 Instanz auf einen S3 Bucket via VPC Endpoint Gateway.

Konfiguration

Gerne zeige ich dir nun, wie du den VPC Endpoint Gateway einrichten und deine Subnetze entsprechend konfigurieren musst. 

  1. Log dich als erstes in die AWS Management Konsole ein und achte darauf, dass du in der Region bist, in welcher sich die EC2 Instanzen befinden, für welche du den Zugriff via VPC Endpoint Gateway einrichten möchtest. In diesem Beispiel hier ist das N. Virginia (us-east-1).
  • Zur Erstellung des VPC Endpoint Gateways, wähle in der Management Konsole den VPC Services aus und klick in der Navigation links den Menüpunkt Endpoints aus.
  • Nun kannst du über «Create Endpoint» einen neuen VPC Endpoint Gateway erstellen.
  • Beim Punkt «Service Name» hast du die Möglichkeit, nach Services zu filtern. Wie du siehst, gibt es eine ganze Menge an Services die VPC Endpoints unterstützen. Dabei wird zwischen Interface und Gateway Endpoints unterschieden. Nur die beiden Services S3 und DynamoDB unterstützen den VPC Endpoint Gateway. Sämtliche anderen Services nutzen sogenannte VPC Endpoints mit PrivateLink, welche ein bisschen anders funktionieren, als der Gateway Endpoint. Mehr dazu wie ein VPC Endpoint mit PrivateLink funktioniert findest du hier.

Filtere nun nach dem S3 Service und wähle diesen aus.

  • Als nächstes bestimmen wir, in welchem VPC der Gateway Endpoint platziert wird und wir können hier auch gleich die Routing Tabellen auswählen, welche angepasst werden sollen. Damit wir bei der Erstellung des Gateways auch gleich der Routingeintrag in der entsprechenden Routingtabellen für uns gemacht. Dieser Routingeintrag kann ich auch manuell nachträglich machen oder zu weiteren Routingtabellen hinzufügen. Der Routingeintrag ist sozusagen der Wegweiser für den Datenverkehr. Mit diesem Eintrag wird dem Datenverkehr gesagt, dass alles was S3 Datenverkehr ist, nun an den VPC Endpoint Gateway gesendet werden soll und so von dort weiter direkt über das AWS Netzwerk zum S3 Service geschickt werden soll.

Wähle hier als das VPC und die Routingtabellen aus, welche den Subnetzen mit deinen EC2 Instanzen zugewiesen sind.

  • Zum Schluss können wir noch eine VPC Endpoint Policy definieren. Standardmässig ist diese im «Full Access» Modus, was bedeutet, dass jeder im VPC den Endpoint Gateway verwenden darf. Dies heisst aber nicht, dass er auch Zugriff auf den Bucket und die Objekte im Bucket hat. Diese Zugriffe sind separat in den IAM und den S3 Richtlinieren definiert. Zudem können wir hier, über eine benutzerdefinierte VPC Endpoint Richtlinie, unsere eigenen Berechtigungen für den Zugriff auf den Endpoint definieren.
  • Füge dem VPC Endpoint Gateway noch deine Tags hinzu und klicken dann auf «Create endpoint»

Nun ist der Endpoint Gateway erstellt und unser private EC2 Instanz kann ohne Internet Zugriff auf den S3 Service zugreifen. Auch wenn unsere EC2 Instanz Internetzugriff hätte, würde der Datenverkehr zum S3 Service nun über das AWS Netzwerk gehen und nicht mehr über das öffentliche Internet geroutet. 

Zur Kontrolle können wir noch in die Routingtabelle von unserem privaten Subnetz überprüfen, ob der Routingeintrag zum VPC Endpoint Gateway auch wirklich vorhanden ist. Das sieht dann zum Beispiel so aus:

Kosten

Der VPC Gateway Endpoint Service an und für sich ist kostenlos. Man bezahlt aber die Standardgebühren für Datenübertragung zwischen EC2 Instanz und die S3 Buckets. Diese Gebühren fallen auch bei jeder anderen Datenübertragung an, egal ob sie über den NAT Gateway, Internet Gateway oder den VPC Endpoint Gateway gehen. Für den NAT Gateway bezahlt man ca. 0.045$ pro GB. Das heisst, es ist sogar kostengünstiger, den Datenverkehr via den VPC Endpoint Gateway zu leiten, anstatt einen NAT Gateway zu nutzen. 

Schluss

Ich hoffe, die kurze Beschreibung zum VPC Endpoint Gateway hat dir geholfen und du weisst nun, wie du es vermeiden kannst, unnötig Daten via das öffentliche Internet zu transferieren, wenn es um den Zugriff von EC2 Instanzen auf S3 Buckets geht.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.