Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Acceder al AWS Transform aplicación web desde una VPC
Cuando se utiliza AWS PrivateLink para acceder a la AWS Transform API de forma privada desde la VPC, la aplicación web requiere una configuración de red adicional. Sirve contenido estático (HTML JavaScript, CSS) mediante el cual CloudFront se requiere conectividad a Internet. Las llamadas a la API desde la aplicación web pasan por el punto final de la VPC y permanecen totalmente privadas.
Esta guía le muestra cómo configurar la salida controlada de Internet desde su VPC para que la aplicación web pueda cargarse y, al mismo tiempo, mantener la VPC bloqueada solo en los dominios necesarios.
Funcionamiento
La aplicación AWS Transform web utiliza dos rutas de red:
-
Llamadas a la API: cuando interactúas con la aplicación web (al iniciar trabajos, ver los espacios de trabajo, etc.), el navegador envía solicitudes a la API a
api.transform.. Con el punto de enlace de laregion.on.awscom.amazonaws.VPC y el DNS privado habilitados, estas solicitudes se resuelven en una dirección IP privada de la VPC y nunca salen de la red. AWSregion.api.transform -
Contenido estático: los archivos HTML y CSS de la aplicación web se envían a través CloudFront de. JavaScript
La carga de estos archivos requiere conectividad a Internet porque la entrega de CloudFront contenido solo está disponible a través de la Internet pública.tenant-id.transform.region.on.aws -
Autenticación: se utilizan flujos de inicio de sesión en el AWS IAM Identity Center
, que también requiere conectividad a Internet.region.signin.aws
Para habilitar la aplicación web y, al mismo tiempo, mantener la seguridad, debe crear una ruta de salida controlada mediante AWS Network Firewall con filtrado basado en el dominio. Esto permite que su VPC llegue solo a los dominios específicos que requiere la aplicación web y, al mismo tiempo, bloquea el resto del tráfico de Internet.
Arquitectura
El siguiente diagrama muestra la ruta de red para el tráfico de aplicaciones 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
El Network Firewall debe ver ambas direcciones del tráfico (enrutamiento simétrico) para realizar la inspección TLS SNI. Debe configurar una ruta de retorno en la subred de la puerta de enlace NAT que envíe el tráfico destinado a la subred privada a través del firewall. Sin esto, las reglas de filtrado basadas en el dominio no funcionarán.
Requisitos previos
Antes de comenzar, asegúrese de que dispone de lo siguiente:
-
Una AWS cuenta con permisos para crear recursos de VPC, Network Firewall y pasarelas NAT.
-
Una VPC con una subred privada en la que se ejecutan tus instancias o cargas de trabajo.
-
Una puerta de enlace de Internet conectada a la VPC (o permisos para crear una).
-
Un punto final de AWS Transform VPC para
com.amazonaws.con el DNS privado habilitado. Este es el punto final que utiliza el cliente del navegador de la aplicación web. Para obtener instrucciones sobre la creación de puntos finales, consulteAWS Transform y puntos finales de interfaz (AWS PrivateLink).region.api.transform
Configuración de la política de puntos finales de la VPC
Si su punto de enlace de com.amazonaws. VPC tiene una política de punto de enlace personalizada, debe agregar una declaración que permita AWS Transform las operaciones. Sin esto, la aplicación web no podrá realizar llamadas a la API a través del punto final.region.api.transform
Añada la siguiente declaración a su política de puntos finales de VPC. AWS_TRANSFORM_PROFILE_ARNSustitúyalo por el ARN de tu perfil de AWS Transform servicio, que encontrarás en la AWS Transform consola, en la página de configuración.
{ "Statement": [ { "Sid": "AllowAWSTransform", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalArn": [ "AWS_TRANSFORM_PROFILE_ARN" ] } } } ] }
nota
Si su punto de conexión de VPC usa la política predeterminada (acceso total), no es necesario realizar cambios y puede omitir este paso.
Configurar la salida controlada de Internet
Complete los siguientes pasos para configurar Network Firewall con filtrado basado en el dominio para la aplicación AWS Transform web.
Paso 1: Cree la subred del firewall
Cree una pequeña subred /28 dedicada al punto final de Network Firewall. Esta subred debe estar en la misma zona de disponibilidad que su subred privada.
aws ec2 create-subnet \ --vpc-idyour-vpc-id\ --cidr-blockfirewall-subnet-cidr\ --availability-zoneyour-az\ --regionregion
Paso 2: Cree una subred pública para la puerta de enlace NAT
aws ec2 create-subnet \ --vpc-idyour-vpc-id\ --cidr-blockpublic-subnet-cidr\ --availability-zoneyour-az\ --regionregion
Paso 3: Configurar la tabla de enrutamiento de la subred pública
Cree una tabla de enrutamiento para la subred pública que enruta el tráfico de Internet a la puerta de enlace de 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
Paso 4: Cree la puerta de enlace 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
Paso 5: Crear el grupo de reglas de Network Firewall
Cree un grupo de reglas con estado que permita el tráfico solo a los dominios requeridos por la aplicación 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
regionSustitúyalo por la AWS región en la que está instalado tu AWS Transform
perfil (por ejemplo,us-east-1). directory-idSustitúyalo por el ID de directorio del IAM Identity Center (por ejemplo,d-1234567890). Puede encontrar su ID de directorio en la consola del IAM Identity Center.
En la siguiente tabla se explican los dominios permitidos.
| Dominio | Finalidad |
|---|---|
.cloudfront.net |
CloudFront CDN: proporciona activos estáticos de aplicaciones web (CSSJavaScript, imágenes) |
.transform. |
URL arrendataria de la aplicación web: el navegador carga la página inicial desde este dominio mediante CloudFront |
|
Página de redireccionamiento de inicio de sesión SSO |
.s3. |
URL prefirmadas de S3: cargas y descargas de artefactos |
oidc. |
Intercambio de token OIDC para la autenticación de SSO |
portal.sso. |
Página de inicio de sesión en el portal SSO |
assets.sso-portal. |
Activos estáticos del portal SSO (CSS,) JavaScript |
|
Portal del centro de identidad de IAM para su organización |
nota
El .cloudfront.net comodín permite el tráfico a cualquier CloudFront distribución, no solo a la de la aplicación AWS Transform web. No es posible aplicar un filtro de dominio más restringido porque las direcciones IP CloudFront perimetrales se comparten entre las distribuciones y la inspección del SNI mediante TLS no permite distinguir las distribuciones individuales de un mismo dominio.
nota
Las llamadas api.transform. a la API son válidas AWS PrivateLink y no requieren la salida de Internet. No se ven afectados por el firewall.region.on.aws
Paso 6: Crear la política de firewall
La política debe utilizar STRICT_ORDER la evaluación de reglas drop_established como acción predeterminada. Esto garantiza que se elimine cualquier tráfico que no coincida con la lista de permitidos.
# 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
Paso 7: Crear el 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
Paso 8: Obtenga el ID del punto final 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"
Paso 9: Configure la tabla de rutas de subred del firewall
Enrute el tráfico con destino a Internet desde la subred del firewall a la puerta de enlace 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
Paso 10: Actualice la tabla de enrutamiento de la subred privada
Enrute todo el tráfico con destino a Internet desde la subred privada a través del 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
Si ya existe una ruta predeterminada, replace-route utilícela en lugar de. create-route
Paso 11: Añadir la ruta de retorno simétrica (obligatorio)
importante
Este paso es fundamental. Network Firewall utiliza la inspección TLS SNI y debe ver las dos direcciones de una conexión TCP. Agregue una ruta en la tabla de rutas de la subred de la puerta de enlace NAT que envíe el tráfico de retorno destinado a la subred privada a través del firewall.
aws ec2 create-route \ --route-table-id $PUB_RTB \ --destination-cidr-blockprivate-subnet-cidr\ --vpc-endpoint-id $FW_ENDPOINT \ --regionregion
private-subnet-cidrSustitúyalo por el bloque CIDR de tu subred privada (por ejemplo,). 10.0.144.0/20
Sin un enrutamiento simétrico, el firewall solo ve una dirección del tráfico. El motor de inspección de TLS no puede extraer la indicación del nombre del servidor (SNI) del protocolo de enlace de TLS y todas las reglas basadas en el dominio fallarán silenciosamente.
Paso 12: Eliminar la ruta predeterminada de IPv6 (si existe)
Si la tabla de enrutamiento de la subred privada tiene una ruta IPv6 predeterminada (::/0) que apunta directamente a una puerta de enlace de Internet, pasará por alto el firewall en cuanto a los destinos. IPv6-capable Elimínala:
aws ec2 delete-route \ --route-table-idprivate-subnet-route-table-id\ --destination-ipv6-cidr-block ::/0 \ --regionregion
Verificación
Desde una instancia de la subred privada, verifica la configuración:
# 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)
Resolución de problemas
- El firewall bloquea las llamadas de API a api.transform
-
El dominio
api.transform.debe convertirse en una dirección IP privada a través del punto final de la VPC y no debe llegar al firewall de Internet.region.on.aws-
Comprueba que has creado el
com.amazonaws.punto final.region.api.transform -
Compruebe que el DNS privado esté habilitado en el punto final:
aws ec2 describe-vpc-endpoints \ --filters "Name=service-name,Values=com.amazonaws.region.api.transform" \ --query 'VpcEndpoints[*].[State,PrivateDnsEnabled]' \ --output tableResultado esperado:
available | True
-
- La aplicación web no se carga (se agota el tiempo de espera de la conexión)
-
-
Compruebe que la tabla de rutas de la subred privada tenga una
0.0.0.0/0ruta que apunte al punto final del firewall. -
Compruebe que la tabla de rutas de subred del firewall tenga una
0.0.0.0/0ruta que apunte a la puerta de enlace NAT. -
Compruebe que la puerta de enlace NAT esté en un
availableestado.
-
- Non-allowlisted los dominios no están bloqueados
-
-
Compruebe si hay una
::/0ruta IPv6 que apunte a la puerta de enlace de Internet. Esto evita el firewall. Retírelo (paso 12). -
Verifique que el enrutamiento simétrico esté configurado. La tabla de enrutamiento de subred de NAT Gateway debe tener una ruta de retorno a través del firewall para la subred privada CIDR (paso 11).
-
Compruebe las acciones que utiliza la política de firewall
STRICT_ORDERcondrop_establishedyalert_establishedcomo acciones predeterminadas.
-
Consideraciones sobre costos
| Recurso | Coste aproximado |
|---|---|
| Network Firewall | ~0 $. 395/hr (~$288/month) por zona de disponibilidad |
| Puerta de enlace NAT | ~0 $. 045/hr (~$33/month) + tarifas de procesamiento de datos |
| Elastic IP (IPv4 pública) | ~0 $. 005/hr (~3 dólares). 60/month) |
| Procesamiento de datos de Network Firewall | 0$. 065/GB |
| Procesamiento de datos de NAT Gateway | 0$. 045/GB |
El costo base estimado es de aproximadamente $ 325/month para una implementación de una sola zona de disponibilidad. Para las implementaciones de producción, implemente el firewall, la puerta de enlace NAT y las subredes asociadas en cada zona de disponibilidad donde existan subredes privadas.
Limpieza
Para eliminar todos los recursos creados en esta guía, ejecute los siguientes comandos en orden inverso. Sustituya los marcadores de posición por los ID de recursos de su implementación. Puede encontrar estos valores en la consola AWS de administración o mediante los describe comandos de los pasos de configuración.
# 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