View a markdown version of this page

Accesso al AWS Transform applicazione web da un VPC - AWS Trasformazione

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Accesso al AWS Transform applicazione web da un VPC

Quando si utilizza AWS PrivateLink per accedere all' AWS Transform API in modo privato dal VPC, l'applicazione Web richiede una configurazione di rete aggiuntiva. Fornisce contenuti statici (HTML JavaScript, CSS) tramite i quali è necessaria CloudFront la connettività Internet. Le chiamate API dall'applicazione Web passano attraverso l'endpoint VPC e rimangono completamente private.

Questa guida mostra come configurare l'uscita Internet controllata dal tuo VPC in modo che l'applicazione web possa caricarsi mantenendo il VPC bloccato solo sui domini richiesti.

Come funziona

L'applicazione AWS Transform web utilizza due percorsi di rete:

  • Chiamate API: quando interagite con l'applicazione Web (avvio di lavori, visualizzazione delle aree di lavoro e così via), il browser invia le richieste API aapi.transform.region.on.aws. Con l'endpoint com.amazonaws.region.api.transform VPC e il DNS privato abilitati, queste richieste vengono risolte in un indirizzo IP privato nel tuo VPC e non escono mai dalla rete. AWS

  • Contenuto statico: i file HTML e CSS dell'applicazione Web vengono forniti tramite. JavaScript CloudFront tenant-id.transform.region.on.aws Il caricamento di questi file richiede la connettività a Internet, poiché la distribuzione CloudFront dei contenuti è disponibile solo sulla rete Internet pubblica.

  • Autenticazione: vengono utilizzati i flussi di accesso di AWS IAM Identity Centerregion.signin.aws, che richiedono anche la connettività Internet.

Per abilitare l'applicazione Web mantenendo la sicurezza, è possibile creare un percorso di uscita controllato utilizzando AWS Network Firewall con filtro basato sul dominio. Ciò consente al VPC di raggiungere solo i domini specifici richiesti dall'applicazione Web bloccando tutto il resto del traffico Internet.

Architecture

Il diagramma seguente mostra il percorso di rete per il traffico delle applicazioni Web:

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
Importante

Il Network Firewall deve vedere entrambe le direzioni del traffico (routing simmetrico) per eseguire l'ispezione TLS SNI. È necessario configurare un percorso di ritorno nella sottorete NAT Gateway che invii il traffico destinato alla sottorete privata attraverso il firewall. In caso contrario, le regole di filtraggio basate sul dominio non funzioneranno.

Prerequisiti

Prima di iniziare, assicurati di disporre dei seguenti elementi:

  • Un AWS account con autorizzazioni per creare risorse VPC, Network Firewall e gateway NAT.

  • Un VPC con una sottorete privata in cui vengono eseguite le istanze o i carichi di lavoro.

  • Un gateway Internet collegato al VPC (o le autorizzazioni per crearne uno).

  • Un endpoint AWS Transform VPC per com.amazonaws.region.api.transform con DNS privato abilitato. Questo è l'endpoint utilizzato dal client del browser dell'applicazione Web. Per istruzioni sulla creazione di endpoint, vedere. AWS Transform e endpoint di interfaccia (AWS PrivateLink)

Configurazione della policy degli endpoint VPC

Se il tuo endpoint com.amazonaws.region.api.transform VPC ha una policy endpoint personalizzata, devi aggiungere un'istruzione che consenta le operazioni. AWS Transform In caso contrario, l'applicazione Web non sarà in grado di effettuare chiamate API tramite l'endpoint.

Aggiungi la seguente dichiarazione alla tua policy sugli endpoint VPC. Sostituisci AWS_TRANSFORM_PROFILE_ARN con il tuo profilo di AWS Transform servizio ARN, che puoi trovare nella AWS Transform console nella pagina Impostazioni.

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

Se il tuo endpoint VPC utilizza la policy predefinita (accesso completo), non sono necessarie modifiche e puoi saltare questo passaggio.

Configurazione dell'uscita controllata da Internet

Completa i seguenti passaggi per configurare Network Firewall con filtri basati sul dominio per l' AWS Transform applicazione Web.

Passaggio 1: Creare la sottorete del firewall

Crea una piccola sottorete /28 dedicata all'endpoint Network Firewall. Questa sottorete deve trovarsi nella stessa zona di disponibilità della sottorete privata.

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

Fase 2: Creare una sottorete pubblica per il gateway NAT

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

Fase 3: Configurare la tabella di routing della sottorete pubblica

Crea una tabella di routing per la sottorete pubblica che indirizza il traffico Internet verso il gateway Internet.

# 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

Fase 4: Creare il gateway NAT

# 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

Passaggio 5: Creare il gruppo di regole Network Firewall

Crea un gruppo di regole statico che consenta il traffico solo verso i domini richiesti dall' AWS Transform applicazione Web.

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

regionSostituiscilo con la AWS regione in cui è installato il tuo AWS Transform profilo (ad esempio,). us-east-1 Sostituiscilo directory-id con il tuo ID di directory IAM Identity Center (ad esempio,d-1234567890). Puoi trovare l'ID della tua directory nella console IAM Identity Center.

La tabella seguente spiega i domini consentiti.

Dominio Scopo
.cloudfront.net CloudFront CDN: fornisce risorse statiche delle applicazioni Web (CSSJavaScript, immagini)
.transform.region.on.aws URL del tenant dell'applicazione Web: il browser carica la pagina iniziale da questo dominio tramite CloudFront
region.signin.aws Pagina di reindirizzamento dell'accesso SSO
.s3.region.amazonaws.com URL predefiniti S3: caricamenti e download di artefatti
oidc.region.amazonaws.com Scambio di token OIDC per l'autenticazione SSO
portal.sso.region.amazonaws.com Pagina di accesso al portale SSO
assets.sso-portal.region.amazonaws.com Risorse statiche del portale SSO (CSS,) JavaScript
directory-id.awsapps.com Portale IAM Identity Center per la tua organizzazione
Nota

La .cloudfront.net wildcard consente il traffico verso qualsiasi CloudFront distribuzione, non solo verso l'applicazione AWS Transform web. Un filtro di dominio più ristretto non è possibile perché gli IP CloudFront edge sono condivisi tra le distribuzioni e l'ispezione TLS SNI non è in grado di distinguere le singole distribuzioni all'interno dello stesso dominio.

Nota

Le chiamate API devono essere eseguite api.transform.region.on.aws AWS PrivateLink e non richiedono l'uscita da Internet. Non sono influenzate dal firewall.

Fase 6: Creare la politica del firewall

La policy deve utilizzare la valutazione delle STRICT_ORDER regole con drop_established come azione predefinita. Ciò garantisce che tutto il traffico che non corrisponde alla lista consentita venga eliminato.

# 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

Fase 7: Creare il 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

Fase 8: Ottenere l'ID dell'endpoint del firewall

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"

Fase 9: Configurazione della tabella di routing della sottorete del firewall

Instrada il traffico collegato a Internet dalla sottorete del firewall al gateway NAT.

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

Passaggio 10: Aggiornare la tabella di routing della sottorete privata

Indirizza tutto il traffico diretto a Internet dalla sottorete privata attraverso il 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

Se esiste già una route predefinita, usa invece di. replace-route create-route

Fase 11: Aggiungere il percorso di ritorno simmetrico (obbligatorio)

Importante

Questo passaggio è fondamentale. Network Firewall utilizza l'ispezione TLS SNI e deve vedere entrambe le direzioni di una connessione TCP. Aggiungi una route nella tabella di routing della sottorete NAT Gateway che invia il traffico di ritorno destinato alla sottorete privata attraverso il firewall.

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

private-subnet-cidrSostituiscilo con il blocco CIDR della tua sottorete privata (ad esempio,). 10.0.144.0/20

Senza un routing simmetrico, il firewall vede solo una direzione del traffico. Il motore di ispezione TLS non è in grado di estrarre l'indicazione del nome del server (SNI) dall'handshake TLS e tutte le regole basate sul dominio falliranno automaticamente.

Passaggio 12: rimuovere la route predefinita IPv6 (se presente)

Se la tabella di routing di sottorete privata ha una route predefinita IPv6 (::/0) che punta direttamente a un gateway Internet, ignorerà il firewall per quanto riguarda le destinazioni. IPv6-capable Rimuovilo:

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

Verifica

Da un'istanza nella sottorete privata, verificate la configurazione:

# 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)

Risoluzione dei problemi

Le chiamate API a api.transform sono bloccate dal firewall

Il dominio api.transform.region.on.aws dovrebbe trasformarsi in un indirizzo IP privato tramite l'endpoint VPC e non dovrebbe raggiungere il firewall Internet.

  • Verifica di aver creato l'endpoint. com.amazonaws.region.api.transform

  • Verifica che il DNS privato sia abilitato sull'endpoint:

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

    Output previsto: available | True

L'applicazione Web non viene caricata (timeout della connessione)
  • Verifica che la tabella di routing della sottorete privata abbia una 0.0.0.0/0 route che punta all'endpoint del firewall.

  • Verifica che la tabella di routing della sottorete del firewall abbia una 0.0.0.0/0 route che punta al gateway NAT.

  • Verifica che il gateway NAT sia in uno stato. available

Non-allowlisted i domini non sono bloccati
  • Verifica la presenza di un ::/0 percorso IPv6 che punti al gateway Internet. Questo aggira il firewall. Rimuovilo (passaggio 12).

  • Verifica che il routing simmetrico sia configurato. La tabella di routing della sottorete NAT Gateway deve avere una route di ritorno attraverso il firewall per la sottorete privata CIDR (Fase 11).

  • Verifica che la politica del firewall utilizzi STRICT_ORDER con drop_established e alert_established come azioni predefinite.

Considerazioni sui costi

Risorsa Costo approssimativo
Network Firewall ~$0. 395/hr (~$288/month) per zona di disponibilità
Gateway NAT ~$0. 045/hr (~$33/month) + spese di elaborazione dei dati
IP elastico (IPv4 pubblico) ~$0. 005/hr (~$3. 60/month)
Elaborazione dei dati tramite Network Firewall $0. 065/GB
Elaborazione dati NAT Gateway $0. 045/GB

Il costo base stimato è di circa $ 325/month per una singola implementazione in una zona di disponibilità. Per le implementazioni di produzione, implementa il firewall, il gateway NAT e le sottoreti associate in ogni zona di disponibilità in cui esistono sottoreti private.

Pulizia

Per rimuovere tutte le risorse create da questa guida, esegui i seguenti comandi in ordine inverso. Sostituisci i segnaposto con gli ID delle risorse della tua distribuzione. Puoi trovare questi valori nella Console di AWS gestione o utilizzando describe i comandi delle fasi di configurazione.

# 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