Serverless Cloud Architecture – Sichere Datenverteilung mit AWS S3, CloudFront und Lambda@Edge

Bei der Suche nach einer einfach zu skalierenden, autarken Datenverteilplattform, die einmal aufgesetzt keinen großen Pflegeaufwand mit sich bringt, sind wir auf eine interessante Lösung im Umfeld der Amazon Web Services gestoßen. In diesem kurzen Beitrag stellen wir das Ineinandergreifen von Amazons S3 Dienst mit CloudFront und dem Feature Lambda@Edge vor.

Simple Cloud Storage Service (S3)

Dabei handelt es sich um eine objektbasierte Speicherlösung von Amazon, die es seinen Nutzern erlaubt, Dateien über das Internet bereitzustellen. Der Dienst wird zentral von Amazon gemanagt und bietet eine hochgradig skalierbare, schnelle und kostengünstige Datenspeicherinfrastruktur. Neben dem zentralen AWS User Interface bietet S3 auch eine dedizierte API zum Verwalten des Dienstes und der Dateien, die von beliebigen Systemen angesprochen werden können.
S3 wird die zentrale Dateiablage für unser Vorhaben darstellen, es wird als privater Speicherort konfiguriert und lediglich Verbindungen von einer bestimmen CloudFront Distribution zulassen. In diesem Fall nutzen wir einen privaten S3 Bucket in der AWS Region eu-central-1 (Frankfurt).

Content Delivery Network (CloudFront)

Mit CloudFront bietet Amazon einen Dienst an, der jede Art von Dateien in kürzester Zeit von einem zentralen Ort – in unserem Falle S3 – weltweit auf alle gängigen Regionen verteilt. Amazon nennt diese Standorte Edge Locations. Dadurch schafft man eine Möglichkeit, über die weltweit Dateien mit geringen Latenzen abgerufen werden können. CloudFront wird für uns die globale Verteilung der Dateien aus dem S3 Bucket übernehmen und eine zusätzliche SSL-gesicherte Zwischenschicht zwischen dem Client und dem tatsächlichen Speicherort der zu verteilenden Dateien realisieren.

Lambda@Edge

Bei Lambda@Edge handelt es sich um einen individuellen Programmcode, der eventbezogen bei jedem Aufruf einer Cloudfront Ressource durchlaufen wird. Aus Entwicklerperspektive läuft dabei eine einfache Node.js Funktion, die einzelne Requests zu dem Zeitpunkt an dem Sie an einem CloudFront Edge eintreffen, analysieren und modifizieren kann.
Lambda@Edge wird für uns weltweit den Zugriff auf die Dateien in S3 via CloudFront mit einer zusätzlichen http Basic Authentifizierung realisieren. Dazu ist es notwendig eine Lambda@Edge Funktion anzulegen und mit der entsprechenden CloudFront Distribution mit dem Event-Type viewer-request als Input zu versehen. Dabei ist zu beachten, dass Lambda@Edge aktuell nur in der AWS Region „us-east-1“ verfügbar ist.

Der tatsächliche Programmcode, der für die Zugriffsteuerung sorgt, kann in etwa wie folgt aussehen.

Im folgenden Schaubild ist die High-Level-Architektur und das Zusammenspiel der einzelnen Dienste dargestellt. Mit jedem viewer request auf eine CloudFront Ressource wie beispielsweise https://d2w3doht2h3uzp.cloudfront.net/file_sab42bff7.zip wird eine Lambda@Edge Funktion durchlaufen, die eine Authentifizierung des Client anfordert.

Ist diese erfolgreich, wird vom jeweiligen CloudFront Edge Server auf dem der Request eintrifft das entsprechende File aus dem Cache ausgeliefert. Ist die angeforderte Datei nicht im Cache, da sie noch nie von dieser Region angefragt wurde, wird sie vom zentralen S3 Speicherort bezogen, gecached und anschließend ausgeliefert.

Zusammenfassung

Neben der bekannten Erweiterung des Dateizugriffs auf S3 über SSL-gesicherte CloudFront Verbindungen, erlaubt uns die Funktion Lambda@Edge das Einbringen von individuellen Programmcodes zur Erweiterung der bestehenden Standardfunktionen. Ohne die Sorge um ausgereizte Rechenkapazitäten oder geographisch bedingte Latenzprobleme, lassen sich so sehr viele Use Cases für einen weltweiten Dateizugriff realisieren.

Weitere denkbare Use Cases

  • Automatisierte Kommunikation und Absicherung via JWT/ oAuth Tokens
  • Routing/ URL rewrite für A/ B Testing oder Staging
  • Erweiterung der CloudFront Standard http Status Codes
  • Hinzufügen, Verwerfen oder Modifizieren von Headers
  • Abfragen auf AWS-externe Ressourcen, um die Request zusätzlich anzureichern
Jetzt lesen

Blog - Technologie & Innovation

OpenAPI und RAML – ein Vergleich

Jetzt lesen

Weitere News

WIR SIND FÜR SIE DA!

Mit Q_PERIOR steht Ihnen ein starker Partner zur Seite.
Wir freuen uns auf Ihre Herausforderung!

18. Mai 2018|