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 a
api.transform.. Con l'endpointregion.on.awscom.amazonaws.VPC e il DNS privato abilitati, queste richieste vengono risolte in un indirizzo IP privato nel tuo VPC e non escono mai dalla rete. AWSregion.api.transform -
Contenuto statico: i file HTML e CSS dell'applicazione Web vengono forniti tramite. JavaScript CloudFront
Il caricamento di questi file richiede la connettività a Internet, poiché la distribuzione CloudFront dei contenuti è disponibile solo sulla rete Internet pubblica.tenant-id.transform.region.on.aws -
Autenticazione: vengono utilizzati i flussi di accesso di AWS IAM Identity Center
, che richiedono anche la connettività Internet.region.signin.aws
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.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)region.api.transform
Configurazione della policy degli endpoint VPC
Se il tuo endpoint com.amazonaws. 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.region.api.transform
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-idyour-vpc-id\ --cidr-blockfirewall-subnet-cidr\ --availability-zoneyour-az\ --regionregion
Fase 2: Creare una sottorete pubblica per il gateway NAT
aws ec2 create-subnet \ --vpc-idyour-vpc-id\ --cidr-blockpublic-subnet-cidr\ --availability-zoneyour-az\ --regionregion
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-idyour-vpc-id\ --regionregion\ --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-idyour-igw-id\ --regionregion# Associate with public subnet aws ec2 associate-route-table \ --route-table-id $PUB_RTB \ --subnet-idpublic-subnet-id\ --regionregion
Fase 4: Creare il gateway NAT
# Allocate an Elastic IP EIP=$(aws ec2 allocate-address --domain vpc \ --regionregion--query 'AllocationId' --output text) # Create NAT Gateway in the public subnet NAT_ID=$(aws ec2 create-nat-gateway \ --subnet-idpublic-subnet-id\ --allocation-id $EIP \ --regionregion\ --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 --regionregion
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" } } }' \ --regionregion
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. |
URL del tenant dell'applicazione Web: il browser carica la pagina iniziale da questo dominio tramite CloudFront |
|
Pagina di reindirizzamento dell'accesso SSO |
.s3. |
URL predefiniti S3: caricamenti e download di artefatti |
oidc. |
Scambio di token OIDC per l'autenticazione SSO |
portal.sso. |
Pagina di accesso al portale SSO |
assets.sso-portal. |
Risorse statiche del portale SSO (CSS,) JavaScript |
|
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. AWS PrivateLink e non richiedono l'uscita da Internet. Non sono influenzate dal firewall.region.on.aws
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 --regionregion\ --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\"] }" \ --regionregion
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 \ --regionregion\ --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-idyour-vpc-id\ --subnet-mappings SubnetId=firewall-subnet-id\ --regionregion# Wait for the firewall to become READY (3-5 minutes) while true; do STATUS=$(aws network-firewall describe-firewall \ --firewall-name transform-webapp-firewall \ --regionregion\ --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 \ --regionregion\ --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-idyour-vpc-id\ --regionregion\ --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 \ --regionregionaws ec2 associate-route-table \ --route-table-id $FW_RTB \ --subnet-idfirewall-subnet-id\ --regionregion
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-idprivate-subnet-route-table-id\ --destination-cidr-block 0.0.0.0/0 \ --vpc-endpoint-id $FW_ENDPOINT \ --regionregion
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-blockprivate-subnet-cidr\ --vpc-endpoint-id $FW_ENDPOINT \ --regionregion
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-idprivate-subnet-route-table-id\ --destination-ipv6-cidr-block ::/0 \ --regionregion
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.dovrebbe trasformarsi in un indirizzo IP privato tramite l'endpoint VPC e non dovrebbe raggiungere il firewall Internet.region.on.aws-
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 tableOutput 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/0route che punta all'endpoint del firewall. -
Verifica che la tabella di routing della sottorete del firewall abbia una
0.0.0.0/0route 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
::/0percorso 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_ORDERcondrop_establishedealert_establishedcome 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-idpub-rtb-id\ --destination-cidr-blockprivate-subnet-cidr\ --regionregion# Remove route from private subnet aws ec2 delete-route \ --route-table-idprivate-subnet-route-table-id\ --destination-cidr-block 0.0.0.0/0 --regionregion# Delete Network Firewall (takes ~5 minutes) aws network-firewall delete-firewall \ --firewall-name transform-webapp-firewall \ --regionregion# Delete firewall policy and rule group aws network-firewall delete-firewall-policy \ --firewall-policy-name transform-webapp-policy \ --regionregionaws network-firewall delete-rule-group \ --rule-group-name transform-webapp-domains \ --type STATEFUL --regionregion# Delete NAT Gateway (wait ~5 minutes for full deletion) aws ec2 delete-nat-gateway --nat-gateway-idnat-gateway-id\ --regionregion# Release Elastic IP aws ec2 release-address --allocation-ideip-allocation-id\ --regionregion# Delete subnets aws ec2 delete-subnet --subnet-idfirewall-subnet-id\ --regionregionaws ec2 delete-subnet --subnet-idpublic-subnet-id\ --regionregion