View a markdown version of this page

Accès au AWS Transform application Web à partir d'un VPC - AWS Transformation

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Accès au AWS Transform application Web à partir d'un VPC

Lorsque vous accédez AWS PrivateLink à l' AWS Transform API en privé depuis votre VPC, l'application Web nécessite une configuration réseau supplémentaire. Il diffuse du contenu statique (HTML JavaScript, CSS) via CloudFront, ce qui nécessite une connexion Internet. Les appels d'API provenant de l'application Web passent par le point de terminaison de votre VPC et restent totalement privés.

Ce guide explique comment configurer une sortie Internet contrôlée depuis votre VPC afin que l'application Web puisse se charger tout en maintenant votre VPC verrouillé uniquement aux domaines requis.

Comment ça marche

L'application AWS Transform Web utilise deux chemins réseau :

  • Appels d'API : lorsque vous interagissez avec l'application Web (démarrage de tâches, affichage d'espaces de travail, etc.), le navigateur envoie des demandes d'API àapi.transform.region.on.aws. Lorsque le point de terminaison com.amazonaws.region.api.transform VPC et le DNS privé sont activés, ces demandes sont résolues vers une adresse IP privée dans votre VPC et ne quittent jamais le réseau. AWS

  • Contenu statique — Les fichiers HTML et CSS de l'application Web sont diffusés CloudFront viatenant-id.transform.region.on.aws. JavaScript Le chargement de ces fichiers nécessite une connexion Internet, car la diffusion de CloudFront contenu n'est disponible que sur l'Internet public.

  • Authentification : utilisation des flux de connexion AWS IAM Identity Centerregion.signin.aws, qui nécessitent également une connexion Internet.

Pour activer l'application Web tout en préservant la sécurité, vous devez créer un chemin de sortie contrôlé à l'aide de AWS Network Firewall avec filtrage basé sur le domaine. Cela permet à votre VPC d'accéder uniquement aux domaines spécifiques requis par l'application Web tout en bloquant tout autre trafic Internet.

Architecture

Le schéma suivant montre le chemin réseau pour le trafic des applications 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
Important

Le Network Firewall doit détecter le trafic dans les deux sens (routage symétrique) pour effectuer une inspection TLS SNI. Vous devez configurer une route de retour dans le sous-réseau NAT Gateway qui renvoie le trafic destiné au sous-réseau privé via le pare-feu. Sans cela, les règles de filtrage basées sur le domaine ne fonctionneront pas.

Conditions préalables

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un AWS compte autorisé à créer des ressources VPC, un Network Firewall et des passerelles NAT.

  • Un VPC doté d'un sous-réseau privé sur lequel s'exécutent vos instances ou charges de travail.

  • Une passerelle Internet attachée au VPC (ou des autorisations pour en créer une).

  • Un point de terminaison AWS Transform VPC pour lequel le com.amazonaws.region.api.transform DNS privé est activé. Il s'agit du point de terminaison utilisé par le client du navigateur d'applications Web. Pour obtenir des instructions sur la création de points de terminaison, consultezAWS Transform et points de terminaison d'interface (AWS PrivateLink).

Configuration de la politique de point de terminaison du VPC

Si votre point de terminaison com.amazonaws.region.api.transform VPC dispose d'une politique de point de terminaison personnalisée, vous devez ajouter une instruction autorisant AWS Transform les opérations. Sans cela, l'application Web ne pourra pas effectuer d'appels d'API via le point de terminaison.

Ajoutez la déclaration suivante à votre politique de point de terminaison VPC. AWS_TRANSFORM_PROFILE_ARNRemplacez-le par l'ARN de votre profil de AWS Transform service, que vous pouvez trouver dans la AWS Transform console sur la page Paramètres.

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

Si votre point de terminaison VPC utilise la politique par défaut (accès complet), aucune modification n'est nécessaire et vous pouvez ignorer cette étape.

Configuration d'une sortie Internet contrôlée

Procédez comme suit pour configurer Network Firewall avec un filtrage basé sur le domaine pour l'application AWS Transform Web.

Étape 1 : créer le sous-réseau du pare-feu

Créez un petit sous-réseau /28 dédié au point de terminaison Network Firewall. Ce sous-réseau doit se trouver dans la même zone de disponibilité que votre sous-réseau privé.

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

Étape 2 : créer un sous-réseau public pour la passerelle NAT

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

Étape 3 : Configuration de la table de routage du sous-réseau public

Créez une table de routage pour le sous-réseau public qui achemine le trafic Internet vers la passerelle 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

Étape 4 : Création de la passerelle 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

Étape 5 : Création du groupe de règles Network Firewall

Créez un groupe de règles dynamiques qui autorise le trafic uniquement vers les domaines requis par l'application AWS Transform 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

Remplacez region par la AWS région dans laquelle votre AWS Transform profil est installé (par exemple,us-east-1). directory-idRemplacez-le par votre ID de répertoire IAM Identity Center (par exemple,d-1234567890). Vous pouvez trouver l'ID de votre répertoire dans la console IAM Identity Center.

Le tableau suivant décrit les domaines autorisés.

Domain Objectif
.cloudfront.net CloudFront CDN — fournit des actifs statiques d'applications Web (CSSJavaScript, images)
.transform.region.on.aws URL du locataire de l'application Web : le navigateur charge la page initiale à partir de ce domaine via CloudFront
region.signin.aws Page de redirection de connexion SSO
.s3.region.amazonaws.com URL présignées S3 : chargements et téléchargements d'artefacts
oidc.region.amazonaws.com Échange de jetons OIDC pour l'authentification SSO
portal.sso.region.amazonaws.com Page de connexion au portail SSO
assets.sso-portal.region.amazonaws.com Ressources statiques du portail SSO (CSS, JavaScript)
directory-id.awsapps.com Portail IAM Identity Center pour votre organisation
Note

Le .cloudfront.net caractère générique autorise le trafic vers n'importe quelle CloudFront distribution, et pas seulement vers celle de l'application AWS Transform Web. Un filtre de domaine plus étroit n'est pas possible car les adresses IP CloudFront périphériques sont partagées entre les distributions et l'inspection TLS SNI ne permet pas de distinguer les distributions individuelles derrière le même domaine.

Note

Les appels d'API api.transform.region.on.aws doivent être AWS PrivateLink traités et ne nécessitent pas de sortie Internet. Ils ne sont pas affectés par le pare-feu.

Étape 6 : Création de la politique de pare-feu

La politique doit utiliser l'évaluation des STRICT_ORDER règles drop_established comme action par défaut. Cela garantit que tout trafic ne correspondant pas à la liste d'autorisation est supprimé.

# 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

Étape 7 : Création du 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

Étape 8 : obtenir l'identifiant du point de terminaison du pare-feu

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"

Étape 9 : Configuration de la table de routage du sous-réseau du pare-feu

Acheminez le trafic Internet du sous-réseau du pare-feu vers la passerelle 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

Étape 10 : Mettre à jour la table de routage du sous-réseau privé

Acheminez tout le trafic Internet depuis le sous-réseau privé via le pare-feu.

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

Si un itinéraire par défaut existe déjà, utilisez-le à la replace-route place decreate-route.

Étape 11 : Ajouter l'itinéraire de retour symétrique (obligatoire)

Important

Cette étape est essentielle. Network Firewall utilise l'inspection TLS SNI et doit détecter les deux directions d'une connexion TCP. Ajoutez une route dans la table de routage du sous-réseau NAT Gateway qui renvoie le trafic de retour destiné au sous-réseau privé via le pare-feu.

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

private-subnet-cidrRemplacez-le par le bloc CIDR de votre sous-réseau privé (par exemple,10.0.144.0/20).

Sans routage symétrique, le pare-feu ne voit que le trafic dans une seule direction. Le moteur d'inspection TLS ne peut pas extraire l'indication du nom du serveur (SNI) du handshake TLS, et toutes les règles basées sur le domaine échoueront silencieusement.

Étape 12 : Supprimer la route IPv6 par défaut (le cas échéant)

Si la table de routage du sous-réseau privé possède une route IPv6 par défaut (::/0) pointant directement vers une passerelle Internet, elle contournera le pare-feu pour les IPv6-capable destinations. Retirez-le :

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

Vérification

À partir d'une instance du sous-réseau privé, vérifiez la configuration :

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

Résolution des problèmes

Les appels d'API à api.transform sont bloqués par votre pare-feu

Le domaine api.transform.region.on.aws doit être converti en une adresse IP privée via le point de terminaison VPC et ne doit pas atteindre votre pare-feu Internet.

  • Vérifiez que vous avez créé le com.amazonaws.region.api.transform point de terminaison.

  • Vérifiez que le DNS privé est activé sur le terminal :

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

    Résultat attendu : available | True

L'application Web ne se charge pas (délai d'expiration de la connexion)
  • Vérifiez que la table de routage du sous-réseau privé possède un 0.0.0.0/0 itinéraire pointant vers le point de terminaison du pare-feu.

  • Vérifiez que la table de routage du sous-réseau du pare-feu possède une 0.0.0.0/0 route pointant vers la passerelle NAT.

  • Vérifiez que la passerelle NAT est dans un available état.

Non-allowlisted les domaines ne sont pas bloqués
  • Vérifiez s'il existe une ::/0 route IPv6 pointant vers la passerelle Internet. Cela permet de contourner le pare-feu. Retirez-le (étape 12).

  • Vérifiez que le routage symétrique est configuré. La table de routage du sous-réseau de la passerelle NAT doit disposer d'une route de retour à travers le pare-feu pour le CIDR du sous-réseau privé (étape 11).

  • Vérifiez la politique de pare-feu utilisée STRICT_ORDER avec drop_established et alert_established comme actions par défaut.

Considérations de coût

Ressource Coût approximatif
Network Firewall ~0 $. 395/hr (~$288/month) par zone de disponibilité
Passerelle NAT ~0 $. 045/hr (~$33/month) + frais de traitement des données
IP élastique (IPv4 public) ~0 $. 005/hr (~3 $). 60/month)
Traitement des données par Network Firewall 0$. 065/GB
Traitement des données par passerelle NAT 0$. 045/GB

Le coût de base estimé est d'environ $ 325/month pour un déploiement dans une seule zone de disponibilité. Pour les déploiements de production, déployez le pare-feu, la passerelle NAT et les sous-réseaux associés dans chaque zone de disponibilité où existent des sous-réseaux privés.

Nettoyage

Pour supprimer toutes les ressources créées par ce guide, exécutez les commandes suivantes dans l'ordre inverse. Remplacez les espaces réservés par les identifiants de ressources de votre déploiement. Vous pouvez trouver ces valeurs dans la console AWS de gestion ou en utilisant les describe commandes indiquées dans les étapes de configuration.

# 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