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.. Lorsque le point de terminaisonregion.on.awscom.amazonaws.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. AWSregion.api.transform -
Contenu statique — Les fichiers HTML et CSS de l'application Web sont diffusés CloudFront via
. 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.tenant-id.transform.region.on.aws -
Authentification : utilisation des flux de connexion AWS IAM Identity Center
, qui nécessitent également une connexion Internet.region.signin.aws
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.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).region.api.transform
Configuration de la politique de point de terminaison du VPC
Si votre point de terminaison com.amazonaws. 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.region.api.transform
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-idyour-vpc-id\ --cidr-blockfirewall-subnet-cidr\ --availability-zoneyour-az\ --regionregion
Étape 2 : créer un sous-réseau public pour la passerelle NAT
aws ec2 create-subnet \ --vpc-idyour-vpc-id\ --cidr-blockpublic-subnet-cidr\ --availability-zoneyour-az\ --regionregion
É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-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
Étape 4 : Création de la passerelle 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
É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" } } }' \ --regionregion
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. |
URL du locataire de l'application Web : le navigateur charge la page initiale à partir de ce domaine via CloudFront |
|
Page de redirection de connexion SSO |
.s3. |
URL présignées S3 : chargements et téléchargements d'artefacts |
oidc. |
Échange de jetons OIDC pour l'authentification SSO |
portal.sso. |
Page de connexion au portail SSO |
assets.sso-portal. |
Ressources statiques du portail SSO (CSS, JavaScript) |
|
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. doivent être AWS PrivateLink traités et ne nécessitent pas de sortie Internet. Ils ne sont pas affectés par le pare-feu.region.on.aws
É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 --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
É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 \ --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
Étape 8 : obtenir l'identifiant du point de terminaison du pare-feu
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"
É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-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
É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-idprivate-subnet-route-table-id\ --destination-cidr-block 0.0.0.0/0 \ --vpc-endpoint-id $FW_ENDPOINT \ --regionregion
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-blockprivate-subnet-cidr\ --vpc-endpoint-id $FW_ENDPOINT \ --regionregion
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-idprivate-subnet-route-table-id\ --destination-ipv6-cidr-block ::/0 \ --regionregion
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.doit être converti en une adresse IP privée via le point de terminaison VPC et ne doit pas atteindre votre pare-feu Internet.region.on.aws-
Vérifiez que vous avez créé le
com.amazonaws.point de terminaison.region.api.transform -
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 tableRé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/0itiné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/0route 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
::/0route 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_ORDERavecdrop_establishedetalert_establishedcomme 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-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