Konsolidieren Sie die vorsignierte URL-Generierung und das Herunterladen von Objekten in Amazon S3 mithilfe eines Endpunkts, der statischen IP-Adressen zugeordnet ist - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Konsolidieren Sie die vorsignierte URL-Generierung und das Herunterladen von Objekten in Amazon S3 mithilfe eines Endpunkts, der statischen IP-Adressen zugeordnet ist

Song Jin, Eunhye Jo und Jun Soung Lee, Amazon Web Services

Übersicht

Dieses Muster vereinfacht den Zugriff auf Amazon Simple Storage Service (Amazon S3), indem sichere, benutzerdefinierte Vorlagen URLs für Objektdownloads erstellt werden. Die Lösung bietet einen einzigen Endpunkt mit einer eindeutigen Domain und statischen IP-Adressen. Es ist auf Kunden zugeschnitten, die eine Konsolidierung von API- und Amazon S3 S3-Endpunkten unter einer einheitlichen Domain mit statischen IP-Adressen benötigen. Bei diesem Anwendungsfall befolgen Benutzer eine Firewall-Richtlinie für IP und Domain-Allowlist, wodurch der API-Zugriff auf bestimmte Domänen und IP-Adressen beschränkt wird.

Die Architektur verwendet Schlüssel AWS-Services wie AWS Global Accelerator Amazon API Gateway AWS Lambda, Application Load Balancer und Amazon S3. AWS PrivateLink Dieses Design zentralisiert die API für die Generierung vorsignierter Endgeräte URLs und des Amazon S3 S3-Endpunkts unter einer einzigen Domain, die mit einem Accelerator mit zwei statischen IP-Adressen verknüpft ist. Folglich können Benutzer mühelos vorsignierte Amazon S3 S3-Objekte über einen einheitlichen Domain-Endpunkt mit statischen IP-Adressen anfordern URLs und herunterladen.

Diese Architektur ist besonders vorteilhaft für Kunden mit strengen Richtlinien oder Compliance-Anforderungen, z. B. im öffentlichen Sektor, im medizinischen Bereich und im Finanzsektor.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein aktiver AWS-Konto

  • Eine öffentlich gehostete Zone für Ihren benutzerdefinierten Domainnamen

  • Eine in AWS Certificate Manager (ACM) importierte Domain in AWS-Region der Ihrer Wahl

Einschränkungen

  • Der Amazon S3 S3-Bucket-Name muss mit dem Domainnamen des Endpunkts übereinstimmen. Diese Anforderung soll sicherstellen, dass der Amazon S3 S3-Endpunkt über den einzigen API-Endpunkt bedient werden kann.

  • Der in API Gateway verwendete benutzerdefinierte Domainname sollte mit dem Domainnamen des einzelnen API-Endpunkts übereinstimmen.

  • Einige AWS-Services sind nicht in allen verfügbar AWS-Regionen. Informationen zur Verfügbarkeit in den einzelnen Regionen finden Sie unter AWS Dienste nach Regionen. Informationen zu bestimmten Endpunkten finden Sie unter Dienstendpunkte und Kontingente. Wählen Sie dort den Link für den Dienst aus.

Architektur

Das folgende Diagramm zeigt die Zielarchitektur und den Arbeitsablauf für dieses Muster.

Komponenten und Arbeitsablauf für die Generierung vorab signierter URLs und das Herunterladen von Objekten.

Das Diagramm veranschaulicht das folgende Konzept und den folgenden Arbeitsablauf:

  1. Ein Benutzer initiiert eine Anforderung zur Generierung einer vorsignierten URL mithilfe des benutzerdefinierten Endpunkts AWS Global Accelerator, über den der benutzerdefinierte Domänenname und die zugehörigen IP-Adressen bereitgestellt wird.

  2. Eine Lambda-Funktion generiert die vorsignierte URL, die auf den benutzerdefinierten Endpunkt verweist. Sie antwortet mit einer 301-Weiterleitung, die die generierte vorsignierte URL enthält. Über die umgeleitete vorsignierte URL lädt der Benutzer das Objekt automatisch herunter, indem er den benutzerdefinierten Endpunkt verwendet, der über Global Accelerator bereitgestellt wird.

Die Gesamtarchitektur für die Generierung vorsignierter URLs und den Workflow zum Herunterladen von Objekten besteht aus folgenden Komponenten:

  • Bereitstellung statischer IP-Adressen durch Global Accelerator.

  • Registrierung des Alias des Accelerators als A-Eintrag in der öffentlich gehosteten Zone von Amazon Route 53 mit dem benutzerdefinierten Domainnamen.

  • Erstellung eines Amazon S3 S3-Buckets mit einem Bucket-Namen, der dem registrierten benutzerdefinierten Domainnamen entspricht.

  • Erstellung von VPC-Endpunkten für API Gateway und den Amazon S3 S3-Service.

  • Konfiguration eines intern gerichteten Application Load Balancer für die Verbindung mit Global Accelerator.

  • Zuweisung eines benutzerdefinierten Domainnamens für API Gateway mit angehängtem ACM-Zertifikat.

  • Bereitstellung eines privaten API Gateway, das in eine Lambda-Funktion integriert ist.

  • Die Lambda-Funktion ist mit einer angehängten AWS Identity and Access Management (IAM-) Rolle (mit GetObjectBerechtigungen) ausgestattet.

Tools

AWS-Services

  • Amazon API Gateway unterstützt Sie bei der Erstellung, Veröffentlichung, Wartung, Überwachung und Sicherung von REST, HTTP und WebSocket APIs in jeder Größenordnung.

  • Application Load Balancer verteilen den eingehenden Anwendungsdatenverkehr auf mehrere Ziele, z. B. Amazon Elastic Compute Cloud (Amazon EC2) -Instances, in mehreren Availability Zones.

  • AWS Certificate Manager (ACM) unterstützt Sie bei der Erstellung, Speicherung und Erneuerung öffentlicher und privater SSL/TLS X.509-Zertifikate und -Schlüssel, die Ihre AWS Websites und Anwendungen schützen.

  • AWS Cloud Development Kit (AWS CDK)ist ein Softwareentwicklungs-Framework, das Ihnen hilft, AWS Cloud Infrastruktur im Code zu definieren und bereitzustellen.

  • AWS Global Acceleratorist ein globaler Dienst, der mehrere AWS-Regionen Endpunkte unterstützt. Sie können Beschleuniger erstellen, die den Datenverkehr über das globale Netzwerk an optimale Endpunkte weiterleiten. AWS Dies verbessert die Verfügbarkeit und Leistung Ihrer Internetanwendungen, die von einer globalen Zielgruppe verwendet werden.

  • AWS Identity and Access Management (IAM) hilft Ihnen dabei, den Zugriff auf Ihre AWS Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.

  • AWS Lambda ist ein Datenverarbeitungsservice, mit dem Sie Code ausführen können, ohne dass Sie Server bereitstellen oder verwalten müssen. Es führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.

  • AWS PrivateLinkhilft Ihnen dabei, unidirektionale, private Verbindungen von Ihren virtuellen privaten Clouds (VPCs) zu Diensten außerhalb der VPC herzustellen.

  • Amazon Route 53 ist ein hochverfügbarer und skalierbarer DNS-Web-Service.

  • Amazon Simple Storage Service (Amazon S3) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.

Andere Tools

  • Terraform ist ein IaC-Tool (Infrastructure as Code) HashiCorp , mit dem Sie Cloud- und lokale Ressourcen erstellen und verwalten können.

Code-Repository

Sie können dieses Muster je nach Wunsch entweder mit AWS CDK oder mit Terraform bereitstellen. Der Abschnitt Epics enthält Anweisungen für beide Bereitstellungsmethoden. Der Code für dieses Muster ist in den folgenden GitHub Repositorys verfügbar:

Bewährte Methoden

  • Um die Sicherheit in der Produktionsumgebung zu erhöhen, ist es wichtig, Autorisierungsmechanismen wie Amazon Cognito zu implementieren, um den Zugriff auf die PresignedUrl Generierungs-API einzuschränken.

  • Folgen Sie dem Prinzip der geringsten Rechte und gewähren Sie die für die Ausführung einer Aufgabe erforderlichen Mindestberechtigungen. Weitere Informationen finden Sie in der IAM-Dokumentation unter Gewährung der geringsten Rechte und bewährte Methoden zur Sicherheit.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Entscheiden Sie sich für einen Domainnamen.

Entscheiden Sie sich für einen öffentlichen Domainnamen für den einheitlichen Amazon S3 S3-Endpunkt. Der Domainname wird auch als Amazon S3 S3-Bucket-Name verwendet.

AWS-Administrator, Netzwerkadministrator

Erstellen Sie eine öffentliche gehostete Zone.

Erstellen Sie eine öffentlich gehostete Zone in Amazon Route 53. Sein Domainname muss mit dem Domainnamen übereinstimmen, der in API Gateway verwendet wird.

AWS-Administrator, Netzwerkadministrator

Bereiten Sie ein SSL-Zertifikat vor.

Verwenden Sie AWS Certificate Manager (ACM), um ein SSL-Zertifikat für Ihre Webanwendungsdomäne anzufordern oder zu importieren.

AWS-Administrator, Netzwerkadministrator
AufgabeBeschreibungErforderliche Fähigkeiten

Richten Sie die Terraform-Entwicklungsumgebung ein.

Gehen Sie wie folgt vor, um die Entwicklungsumgebung einzurichten:

  1. Installieren Sie Terraform Version 1.0 oder höher.

  2. Klonen Sie das GitHub s3- presignedurl-staticips-endpoint-with -Terraform-Repository, indem Sie den folgenden Befehl in einem Terminalfenster ausführen:

    git clone https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-terraform.git

AWS-Administrator, Cloud-Administrator

Ändern Sie die provider.tfDateien .tfvars und.

  1. Die erforderlichen .tfvars Dateien erstellen Erstellen Sie apg.tfvars Dateien sowohl in den 1.vpc_alb_ga 2.apigw_s3_lambda Verzeichnissen als auch. Diese Dateien werden Ihre umgebungsspezifischen Variablenwerte enthalten.

    • Erstellen Sie für 1.vpc_alb_ga/apg.tfvars eine Datei mit der folgenden Vorlage:

      hcl environment_name = "test" domain = "your-domain.com" s3_bucket_prefix = "your-bucket-prefix" aws_region = "ap-northeast-2" # Change to your preferred region
    • Erstellen Sie für 2.apigw_s3_lambda/apg.tfvars eine Datei mit der folgenden Vorlage (Sie müssen die vpc_id nach Abschluss von Schritt 1 aktualisieren):

      hcl vpc_id = "vpc-xxxxxxxxx" # Update this with the VPC ID output from step 1 environment_name = "test" domain = "your-domain.com" s3_bucket_prefix = "your-bucket-prefix" aws_region = "ap-northeast-2" # Change to your preferred region
  2. provider.tfDateien ändern Bearbeiten Sie die provider.tf Dateien sowohl in den 1.vpc_alb_ga 2.apigw_s3_lambda Ordnern als auch so, dass sie Ihrer lokalen AWS Konfiguration entsprechen:

    hcl provider "aws" { region = "ap-northeast-2" # Change to your preferred region profile = "apg" # Change to your AWS profile name }

Beachten Sie Folgendes:

  • Ersetzen Sie die Platzhalterwerte in den .tfvars Dateien durch Ihre tatsächlichen Werte.

  • Aktualisieren Sie nach Abschluss der ersten Terraform-Bereitstellung (1.vpc_alb_ga) den vpc_id Wert 2.apigw_s3_lambda/apg.tfvars mit der VPC-ID aus der Ausgabe.

  • Stellen Sie sicher, dass Ihr AWS Profilname in der provider.tf Datei mit einem vorhandenen Profil in Ihrer Datei übereinstimmt. ~/.aws/credentials

  • Der Domänenwert sollte mit Ihrer Domain für die gehostete Route 53-Zone übereinstimmen.

  • Die s3_bucket_prefix Kombination mit der Domain bildet Ihren Amazon S3 S3-Bucket-Namen (z. B.your-bucket-prefix.your-domain.com).

  • Wenn Sie sich ändernaws_region, müssen Sie möglicherweise auch die fest codierten Availability Zones in den main.tf Dateien aktualisieren, damit sie den von Ihnen ausgewählten AWS-Region entsprechen.

AWS-Administrator, Cloud-Administrator

Stellen Sie Netzwerkressourcen bereit.

Führen Sie die folgenden Befehle aus, um Netzwerkressourcen bereitzustellen:

cd ./2.vpc_alb_ga terraform init terraform plan --var-file=apg.tfvars terraform apply --var-file=apg.tfvars

Geben Sie bei der Ausführung des apply Befehls yes ein, wenn Sie dazu aufgefordert werden.

AWS-Administrator, Cloud-Administrator

Stellen Sie API Gateway, Amazon S3 und Lambda bereit.

Verwenden Sie die folgenden Befehle, um Netzwerkressourcen bereitzustellen:

cd ./2.apigw_s3_lambda terraform init terraform plan --var-file=apg.tfvars terraform apply --var-file=apg.tfvars
AWS-Administrator, Cloud-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Richten Sie die AWS CDK Entwicklungsumgebung ein.

Gehen Sie wie folgt vor, um die Entwicklungsumgebung einzurichten:

  1. Installieren Sie die AWS CDK.

  2. Klonen Sie das GitHub s3- presignedurl-staticips-endpoint-with -cdk-Repository, indem Sie den folgenden Befehl in einem Terminalfenster ausführen:

    git clone https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-cdk.git

AWS-Administrator, Cloud-Administrator

Konfigurieren Sie die Domain-Einstellungen in der config/index.ts Datei.

Verwenden Sie die folgenden Befehle, um die Optionen der konstanten Variablen zu bearbeiten:

export const options = { certificateArn: '{arn of the acm which created before}', dnsAttr: { zoneName: '{public hosted zone name}', hostedZoneId: 'hosted zone Id', }, domainNamePrefix: '{Prefix for the domain}', presignPath: 'presign', objectsPath: 'objects', };

Ersetzen Sie in den Befehlen jeden Platzhalter durch Ihre eigenen Informationen:

  • '{arn of the acm which created before}'Ersetzen Sie Amazon Resource Name (ARN) durch Ihr ACM-Zertifikat.

  • Ersetzen Sie es '{public hosted zone name}' durch Ihren Domainnamen.

  • 'hosted zone Id'Ersetzen Sie es durch Ihre ID für die gehostete Route 53-Zone.

  • '{Prefix for the domain}'Ersetzen Sie es durch das Domainpräfix, das Sie verwenden möchten.

  • Ändern Sie optional 'objects' Pfade 'presign' und Pfade, falls dies für Ihren speziellen Anwendungsfall erforderlich ist.

AWS-Administrator, Cloud-Administrator

Stellen Sie die Stacks bereit.

Verwenden Sie den folgenden Befehl, um zwei Stacks bereitzustellen, einen für die Virtual Private Cloud (VPC) und einen weiteren für die Anwendung:

$ npm install $ cdk synth $ cdk deploy --all
AWS-Administrator, Cloud-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Überprüfen Sie die IP-Adressen des Endpunkts.

Verwenden Sie den folgenden Befehl, um zu überprüfen, ob die Domäne für dieses Muster statische IP-Adressen hat:

nslookup ${s3-bucket-prefix}.${domain}
Netzwerkadministrator

Laden Sie eine Testdatei hoch, die Sie später herunterladen können.

Laden Sie die Testdatei in den '/objects' Ordner im Amazon S3 S3-Bucket hoch.

AWS-Administrator, Cloud-Administrator

Rufen Sie die API auf, um eine vorsignierte URL zu generieren.

Um eine vorsignierte URL zu generieren, rufen Sie die URL in einem Browser oder API-Client (z. B. Postman) im folgenden Format auf:

https://${s3-bucket-prefix}.${domain}/presign/objects/${uploaded-filename}

Ersetzen Sie die Platzhalterwerte in ${s3-bucket-prefix} und ${domain} durch die Werte, die Sie in den vorherigen Schritten festgelegt haben.

Besitzer der App

Überprüfe das Ergebnis.

Das erwartete Ergebnis ist, dass Sie einen Statuscode für die Weiterleitung 301 (dauerhaft verschoben) erhalten sollten. Diese Antwort enthält die vorsignierte URL, die den Download Ihrer Testdatei automatisch initiieren sollte.

Testingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Zerstören Sie API Gateway-, Amazon S3- und Lambda-Ressourcen.

Verwenden Sie die folgenden Befehle, um Ressourcen zu löschen:

cd ./2.apigw_s3_lambda terraform init terraform plan --destroy --var-file=apg.tfvars terraform destroy --var-file=apg.tfvars
AWS-Administrator, Cloud-Administrator

Zerstören Sie Netzwerkressourcen.

Verwenden Sie die folgenden Befehle, um Netzwerkressourcen zu löschen:

cd ./1.vpc_alb_ga terraform init terraform plan --destroy --var-file=apg.tfvars terraform destroy --var-file=apg.tfvars
AWS-Administrator, Cloud-Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Zerstöre die Stapel.

Verwenden Sie den folgenden Befehl, um sowohl den VPC- als auch den Anwendungsstapel zu löschen:

$ cdk destroy --all
AWS-Administrator, Cloud-Administrator

Leeren und löschen Sie die Amazon S3 S3-Buckets.

Leeren und löschen Sie das Objekt Amazon S3 S3-Bucket und den Amazon S3 S3-Logs-Bucket, die nicht standardmäßig gelöscht werden.

Die Amazon S3 S3-Bucket-Namen lauten ${s3-bucket-prefix}.${domain} und${s3-bucket-prefix}.${domain}-logs.

Wenn Sie es vorziehen, das AWS Command Line Interface (AWS CLI) zum Löschen der Buckets zu verwenden, verwenden Sie die folgenden Befehle:

$ aws s3 rm s3://${s3-bucket-prefix}.${domain} --recursive $ aws s3 rb s3://${s3-bucket-prefix}.${domain} --force $ aws s3 rm s3://${s3-bucket-prefix}.${domain}-logs --recursive $ aws s3 rb s3://${s3-bucket-prefix}.${domain}-logs --force

Ersetzen Sie ${s3-bucket-prefix} und ${domain} durch die Werte, die Sie in den vorherigen Schritten festgelegt haben. , /p>

AWS-Administrator, Cloud-Administrator

Zugehörige Ressourcen

AWS Blogs