View a markdown version of this page

Zugriff auf AWS Transform Webanwendung aus einer VPC - AWS Transformieren

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.

Zugriff auf AWS Transform Webanwendung aus einer VPC

Wenn Sie AWS PrivateLink privat von Ihrer VPC aus auf die AWS Transform API zugreifen, erfordert die Webanwendung eine zusätzliche Netzwerkkonfiguration. Sie stellt statische Inhalte (HTML JavaScript, CSS) bereit CloudFront, wofür eine Internetverbindung erforderlich ist. API-Aufrufe von der Webanwendung gehen über Ihren VPC-Endpunkt und bleiben vollständig privat.

In diesem Handbuch erfahren Sie, wie Sie den kontrollierten Internetausgang von Ihrer VPC aus so konfigurieren, dass die Webanwendung geladen werden kann, während Ihre VPC nur auf die erforderlichen Domänen beschränkt bleibt.

Funktionsweise

Die AWS Transform Webanwendung verwendet zwei Netzwerkpfade:

  • API-Aufrufe — Wenn Sie mit der Webanwendung interagieren (Jobs starten, Arbeitsbereiche anzeigen usw.), sendet der Browser API-Anfragen anapi.transform.region.on.aws. Wenn der com.amazonaws.region.api.transform VPC-Endpunkt und das private DNS aktiviert sind, werden diese Anfragen zu einer privaten IP-Adresse in Ihrer VPC aufgelöst und verlassen niemals das AWS Netzwerk.

  • Statischer Inhalt — Die HTML- und CSS-Dateien der Webanwendung werden über CloudFront bereitgestellt. JavaScript tenant-id.transform.region.on.aws Für das Laden dieser Dateien ist eine Internetverbindung erforderlich, da die Bereitstellung von CloudFront Inhalten nur über das öffentliche Internet möglich ist.

  • Authentifizierung — Es werden AWS IAM Identity Center-Anmeldeabläufe verwendetregion.signin.aws, für die auch eine Internetverbindung erforderlich ist.

Um die Webanwendung zu aktivieren und gleichzeitig die Sicherheit aufrechtzuerhalten, erstellen Sie mithilfe der AWS Network Firewall mit domänenbasierter Filterung einen kontrollierten Ausgangspfad. Auf diese Weise kann Ihre VPC nur die spezifischen Domänen erreichen, die von der Webanwendung benötigt werden, während der gesamte andere Internetverkehr blockiert wird.

Architektur

Das folgende Diagramm zeigt den Netzwerkpfad für den Datenverkehr von Webanwendungen:

EC2 Instance / Workspace (Private Subnet) | | Route: 0.0.0.0/0 → Network Firewall Endpoint v AWS Network Firewall (Firewall Subnet) | Allows: *.cloudfront.net, *.transform.<region>.on.aws, | <region>.signin.aws, SSO domains, S3 presigned URLs | Blocks: everything else (TLS SNI inspection) | | Route: 0.0.0.0/0 → NAT Gateway v NAT Gateway (Public Subnet) | | Route: 0.0.0.0/0 → Internet Gateway v Internet Gateway → CloudFront Edge Locations
Wichtig

Die Network Firewall muss beide Verkehrsrichtungen erkennen (symmetrisches Routing), um die TLS-SNI-Inspektion durchführen zu können. Sie müssen im NAT-Gateway-Subnetz eine Rückroute konfigurieren, die den für das private Subnetz bestimmten Datenverkehr durch die Firewall zurücksendet. Ohne dies funktionieren domänenbasierte Filterregeln nicht.

Voraussetzungen

Stellen Sie vor Beginn sicher, dass Sie über Folgendes verfügen:

  • Ein AWS Konto mit Berechtigungen zum Erstellen von VPC-Ressourcen, Network Firewall und NAT-Gateways.

  • Eine VPC mit einem privaten Subnetz, in dem Ihre Instances oder Workloads ausgeführt werden.

  • Ein an die VPC angeschlossenes Internet-Gateway (oder Berechtigungen zum Erstellen eines solchen).

  • Ein AWS Transform VPC-Endpunkt für com.amazonaws.region.api.transform mit aktiviertem privaten DNS. Dies ist der Endpunkt, der vom Browser-Client für Webanwendungen verwendet wird. Anweisungen zum Erstellen von Endpunkten finden Sie unterAWS Transform und Schnittstellenendpunkte (AWS PrivateLink).

Konfiguration der VPC-Endpunktrichtlinie

Wenn Ihr com.amazonaws.region.api.transform VPC-Endpunkt über eine benutzerdefinierte Endpunktrichtlinie verfügt, müssen Sie eine Anweisung hinzufügen, die AWS Transform Operationen zulässt. Andernfalls kann die Webanwendung keine API-Aufrufe über den Endpunkt tätigen.

Fügen Sie Ihrer VPC-Endpunktrichtlinie die folgende Aussage hinzu. AWS_TRANSFORM_PROFILE_ARNErsetzen Sie es durch Ihr AWS Transform Dienstprofil ARN, das Sie in der AWS Transform Konsole auf der Seite Einstellungen finden.

{ "Statement": [ { "Sid": "AllowAWSTransform", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalArn": [ "AWS_TRANSFORM_PROFILE_ARN" ] } } } ] }
Anmerkung

Wenn Ihr VPC-Endpunkt die Standardrichtlinie (Vollzugriff) verwendet, sind keine Änderungen erforderlich und Sie können diesen Schritt überspringen.

Einrichtung eines kontrollierten Internetausgangs

Gehen Sie wie folgt vor, um die Network Firewall mit domänenbasierter Filterung für die AWS Transform Webanwendung zu konfigurieren.

Schritt 1: Erstellen Sie das Firewall-Subnetz

Erstellen Sie ein kleines /28-Subnetz, das dem Netzwerk-Firewall-Endpunkt gewidmet ist. Dieses Subnetz muss sich in derselben Availability Zone wie Ihr privates Subnetz befinden.

aws ec2 create-subnet \ --vpc-id your-vpc-id \ --cidr-block firewall-subnet-cidr \ --availability-zone your-az \ --region region

Schritt 2: Erstellen Sie ein öffentliches Subnetz für das NAT-Gateway

aws ec2 create-subnet \ --vpc-id your-vpc-id \ --cidr-block public-subnet-cidr \ --availability-zone your-az \ --region region

Schritt 3: Konfigurieren Sie die Routing-Tabelle für öffentliche Subnetze

Erstellen Sie eine Routentabelle für das öffentliche Subnetz, das den Internetverkehr an das Internet-Gateway weiterleitet.

# Create route table PUB_RTB=$(aws ec2 create-route-table \ --vpc-id your-vpc-id \ --region region \ --query 'RouteTable.RouteTableId' --output text) # Add default route to internet gateway aws ec2 create-route \ --route-table-id $PUB_RTB \ --destination-cidr-block 0.0.0.0/0 \ --gateway-id your-igw-id \ --region region # Associate with public subnet aws ec2 associate-route-table \ --route-table-id $PUB_RTB \ --subnet-id public-subnet-id \ --region region

Schritt 4: Erstellen Sie das NAT-Gateway

# Allocate an Elastic IP EIP=$(aws ec2 allocate-address --domain vpc \ --region region --query 'AllocationId' --output text) # Create NAT Gateway in the public subnet NAT_ID=$(aws ec2 create-nat-gateway \ --subnet-id public-subnet-id \ --allocation-id $EIP \ --region region \ --query 'NatGateway.NatGatewayId' --output text) # Wait for NAT Gateway to become available (~2 minutes) aws ec2 wait nat-gateway-available \ --nat-gateway-ids $NAT_ID --region region

Schritt 5: Erstellen Sie die Netzwerk-Firewall-Regelgruppe

Erstellen Sie eine statusbehaftete Regelgruppe, die nur Datenverkehr zu den Domänen zulässt, die für die AWS Transform Webanwendung erforderlich sind.

aws network-firewall create-rule-group \ --rule-group-name transform-webapp-domains \ --type STATEFUL \ --capacity 100 \ --rule-group '{ "StatefulRuleOptions": { "RuleOrder": "STRICT_ORDER" }, "RulesSource": { "RulesSourceList": { "Targets": [ ".cloudfront.net", ".transform.region.on.aws", "region.signin.aws", ".s3.region.amazonaws.com", "oidc.region.amazonaws.com", "portal.sso.region.amazonaws.com", "assets.sso-portal.region.amazonaws.com", "directory-id.awsapps.com" ], "TargetTypes": ["TLS_SNI", "HTTP_HOST"], "GeneratedRulesType": "ALLOWLIST" } } }' \ --region region

regionErsetzen Sie es durch die AWS Region, in der Ihr AWS Transform Profil installiert ist (z. B.us-east-1). directory-idErsetzen Sie es durch Ihre IAM Identity Center-Verzeichnis-ID (z. B.d-1234567890). Sie finden Ihre Verzeichnis-ID in der IAM Identity Center-Konsole.

In der folgenden Tabelle werden die zulässigen Domänen erklärt.

Domain Zweck
.cloudfront.net CloudFront CDN — stellt statische Ressourcen (CSSJavaScript, Bilder) für Webanwendungen bereit
.transform.region.on.aws Mandanten-URL der Webanwendung — der Browser lädt die erste Seite von dieser Domain über CloudFront
region.signin.aws Umleitungsseite für die SSO-Anmeldung
.s3.region.amazonaws.com Vorsignierte S3-URLs — Uploads und Downloads von Artefakten
oidc.region.amazonaws.com Austausch von OIDC-Tokens für die SSO-Authentifizierung
portal.sso.region.amazonaws.com Anmeldeseite für das SSO-Portal
assets.sso-portal.region.amazonaws.com Statische Ressourcen des SSO-Portals (CSS, JavaScript)
directory-id.awsapps.com IAM Identity Center-Portal für Ihre Organisation
Anmerkung

Der .cloudfront.net Platzhalter ermöglicht den Datenverkehr zu jeder CloudFront Distribution, nicht nur zu der der AWS Transform Webanwendung. Ein schmalerer Domänenfilter ist nicht möglich, da CloudFront Edge-IPs von allen Distributionen gemeinsam genutzt werden und die TLS-SNI-Inspektion nicht zwischen einzelnen Distributionen hinter derselben Domain unterscheiden kann.

Anmerkung

API-Aufrufe müssen weitergeleitet werden api.transform.region.on.aws AWS PrivateLink und erfordern keinen ausgehenden Internetzugriff. Sie sind von der Firewall nicht betroffen.

Schritt 6: Erstellen Sie die Firewall-Richtlinie

Die Richtlinie muss die STRICT_ORDER Regelauswertung mit drop_established als Standardaktion verwenden. Dadurch wird sichergestellt, dass jeglicher Datenverkehr, der nicht der Zulassungsliste entspricht, gelöscht wird.

# Get the rule group ARN RG_ARN=$(aws network-firewall describe-rule-group \ --rule-group-name transform-webapp-domains \ --type STATEFUL --region region \ --query 'RuleGroupResponse.RuleGroupArn' --output text) # Create the firewall policy aws network-firewall create-firewall-policy \ --firewall-policy-name transform-webapp-policy \ --firewall-policy "{ \"StatelessDefaultActions\": [\"aws:forward_to_sfe\"], \"StatelessFragmentDefaultActions\": [\"aws:forward_to_sfe\"], \"StatefulRuleGroupReferences\": [ { \"ResourceArn\": \"$RG_ARN\", \"Priority\": 1 } ], \"StatefulEngineOptions\": { \"RuleOrder\": \"STRICT_ORDER\" }, \"StatefulDefaultActions\": [\"aws:drop_established\", \"aws:alert_established\"] }" \ --region region

Schritt 7: Erstellen Sie die Network Firewall

# Get the policy ARN FW_POLICY_ARN=$(aws network-firewall describe-firewall-policy \ --firewall-policy-name transform-webapp-policy \ --region region \ --query 'FirewallPolicyResponse.FirewallPolicyArn' --output text) # Create the firewall aws network-firewall create-firewall \ --firewall-name transform-webapp-firewall \ --firewall-policy-arn $FW_POLICY_ARN \ --vpc-id your-vpc-id \ --subnet-mappings SubnetId=firewall-subnet-id \ --region region # Wait for the firewall to become READY (3-5 minutes) while true; do STATUS=$(aws network-firewall describe-firewall \ --firewall-name transform-webapp-firewall \ --region region \ --query 'FirewallStatus.Status' --output text) echo "Status: $STATUS" if [ "$STATUS" = "READY" ]; then break; fi sleep 15 done

Schritt 8: Holen Sie sich die Firewall-Endpunkt-ID

FW_ENDPOINT=$(aws network-firewall describe-firewall \ --firewall-name transform-webapp-firewall \ --region region \ --query "FirewallStatus.SyncStates.\"your-az\".Attachment.EndpointId" \ --output text) echo "Firewall endpoint: $FW_ENDPOINT"

Schritt 9: Konfigurieren Sie die Routentabelle des Firewall-Subnetzes

Leiten Sie den internetgebundenen Verkehr vom Firewall-Subnetz zum NAT-Gateway weiter.

FW_RTB=$(aws ec2 create-route-table \ --vpc-id your-vpc-id \ --region region \ --query 'RouteTable.RouteTableId' --output text) aws ec2 create-route \ --route-table-id $FW_RTB \ --destination-cidr-block 0.0.0.0/0 \ --nat-gateway-id $NAT_ID \ --region region aws ec2 associate-route-table \ --route-table-id $FW_RTB \ --subnet-id firewall-subnet-id \ --region region

Schritt 10: Aktualisieren Sie die Routentabelle für private Subnetze

Leiten Sie den gesamten internetgebundenen Verkehr vom privaten Subnetz durch die Firewall.

aws ec2 create-route \ --route-table-id private-subnet-route-table-id \ --destination-cidr-block 0.0.0.0/0 \ --vpc-endpoint-id $FW_ENDPOINT \ --region region

Wenn bereits eine Standardroute vorhanden ist, verwenden Sie anstelle vonreplace-route. create-route

Schritt 11: Fügen Sie die symmetrische Rückroute hinzu (erforderlich)

Wichtig

Dieser Schritt ist entscheidend. Die Network Firewall verwendet die TLS-SNI-Inspektion und muss beide Richtungen einer TCP-Verbindung erkennen. Fügen Sie der Routentabelle des NAT-Gateway-Subnetzes eine Route hinzu, die den für das private Subnetz bestimmten Rückverkehr durch die Firewall zurücksendet.

aws ec2 create-route \ --route-table-id $PUB_RTB \ --destination-cidr-block private-subnet-cidr \ --vpc-endpoint-id $FW_ENDPOINT \ --region region

private-subnet-cidrErsetzen Sie ihn durch den CIDR-Block Ihres privaten Subnetzes (z. B.). 10.0.144.0/20

Ohne symmetrisches Routing erkennt die Firewall nur eine Richtung des Datenverkehrs. Die TLS Inspection Engine kann die Server Name Indication (SNI) nicht aus dem TLS-Handshake extrahieren, und alle domänenbasierten Regeln schlagen automatisch fehl.

Schritt 12: Entfernen Sie die IPv6-Standardroute (falls vorhanden)

Wenn die Routentabelle für private Subnetze eine IPv6-Standardroute (::/0) enthält, die direkt auf ein Internet-Gateway verweist, wird die Firewall für Ziele umgangen. IPv6-capable Entferne sie:

aws ec2 delete-route \ --route-table-id private-subnet-route-table-id \ --destination-ipv6-cidr-block ::/0 \ --region region

Verifizierung

Überprüfen Sie die Konfiguration von einer Instanz im privaten Subnetz aus:

# Should SUCCEED - web application content via CloudFront (allowed) curl -vL --connect-timeout 15 \ 'https://tenant-id.transform.region.on.aws' # Should SUCCEED - API via PrivateLink (does not use firewall) curl -v --connect-timeout 15 \ 'https://api.transform.region.on.aws/' # Should FAIL - non-allowlisted domain (blocked by firewall) curl -v --connect-timeout 15 'https://www.example.com' # Expected: TLS connection error (firewall drops after SNI inspection)

Fehlerbehebung

API-Aufrufe von api.transform werden von Ihrer Firewall blockiert

Die Domain api.transform.region.on.aws sollte über den VPC-Endpunkt zu einer privaten IP-Adresse aufgelöst werden und Ihre Internet-Firewall nicht erreichen.

  • Stellen Sie sicher, dass Sie den com.amazonaws.region.api.transform Endpunkt erstellt haben.

  • Stellen Sie sicher, dass privates DNS auf dem Endpunkt aktiviert ist:

    aws ec2 describe-vpc-endpoints \ --filters "Name=service-name,Values=com.amazonaws.region.api.transform" \ --query 'VpcEndpoints[*].[State,PrivateDnsEnabled]' \ --output table

    Erwartete Ausgabe: available | True

Die Webanwendung wird nicht geladen (Verbindungs-Timeout)
  • Stellen Sie sicher, dass die Routentabelle des privaten Subnetzes eine 0.0.0.0/0 Route enthält, die auf den Firewall-Endpunkt verweist.

  • Stellen Sie sicher, dass die Routentabelle des Firewall-Subnetzes eine 0.0.0.0/0 Route enthält, die auf das NAT-Gateway verweist.

  • Stellen Sie sicher, dass sich das NAT-Gateway in einem bestimmten available Zustand befindet.

Non-allowlisted Domänen sind nicht blockiert
  • Suchen Sie nach einer ::/0 IPv6-Route, die auf das Internet-Gateway verweist. Dadurch wird die Firewall umgangen. Entfernen Sie es (Schritt 12).

  • Stellen Sie sicher, dass symmetrisches Routing konfiguriert ist. Die NAT-Gateway-Subnetz-Routentabelle muss eine Rückroute durch die Firewall für das private Subnetz CIDR haben (Schritt 11).

  • Vergewissern Sie sich, dass die Firewall-Richtlinie die Aktionen STRICT_ORDER mit drop_established und alert_established als Standardaktionen verwendet.

Kostenüberlegungen

Ressource Ungefähre Kosten
Network Firewall ~0 $. 395/hr (~$288/month) pro Availability Zone
NAT-Gateway ~0 $. 045/hr (~$33/month) + Datenverarbeitungsgebühren
Elastic IP (öffentliches IPv4) ~0 $. 005/hr (~3 $). 60/month)
Datenverarbeitung durch Network Firewall 0$. 065/GB
NAT-Gateway-Datenverarbeitung 0$. 045/GB

Die geschätzten Grundkosten 325/month für eine einzelne Availability Zone-Bereitstellung belaufen sich auf ungefähr $. Stellen Sie für Produktionsbereitstellungen die Firewall, das NAT-Gateway und die zugehörigen Subnetze in jeder Availability Zone bereit, in der private Subnetze existieren.

Bereinigen

Um alle in diesem Handbuch erstellten Ressourcen zu entfernen, führen Sie die folgenden Befehle in umgekehrter Reihenfolge aus. Ersetzen Sie die Platzhalter durch die Ressourcen-IDs aus Ihrer Bereitstellung. Sie finden diese Werte in der AWS Management Console oder mithilfe der describe Befehle aus den Einrichtungsschritten.

# Remove return route from NAT Gateway subnet aws ec2 delete-route --route-table-id pub-rtb-id \ --destination-cidr-block private-subnet-cidr \ --region region # Remove route from private subnet aws ec2 delete-route \ --route-table-id private-subnet-route-table-id \ --destination-cidr-block 0.0.0.0/0 --region region # Delete Network Firewall (takes ~5 minutes) aws network-firewall delete-firewall \ --firewall-name transform-webapp-firewall \ --region region # Delete firewall policy and rule group aws network-firewall delete-firewall-policy \ --firewall-policy-name transform-webapp-policy \ --region region aws network-firewall delete-rule-group \ --rule-group-name transform-webapp-domains \ --type STATEFUL --region region # Delete NAT Gateway (wait ~5 minutes for full deletion) aws ec2 delete-nat-gateway --nat-gateway-id nat-gateway-id \ --region region # Release Elastic IP aws ec2 release-address --allocation-id eip-allocation-id \ --region region # Delete subnets aws ec2 delete-subnet --subnet-id firewall-subnet-id \ --region region aws ec2 delete-subnet --subnet-id public-subnet-id \ --region region