View a markdown version of this page

Acceder al AWS Transform aplicación web desde una VPC - AWS Transformar

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 aapi.transform.region.on.aws. Con el punto de enlace de la com.amazonaws.region.api.transform 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. AWS

  • Contenido estático: los archivos HTML y CSS de la aplicación web se envían a través CloudFront de. JavaScript tenant-id.transform.region.on.aws 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.

  • Autenticación: se utilizan flujos de inicio de sesión en el AWS IAM Identity Centerregion.signin.aws, que también requiere conectividad a Internet.

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.region.api.transform 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).

Configuración de la política de puntos finales de la VPC

Si su punto de enlace de com.amazonaws.region.api.transform 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.

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-id your-vpc-id \ --cidr-block firewall-subnet-cidr \ --availability-zone your-az \ --region region

Paso 2: Cree una subred pública para la puerta de enlace NAT

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

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

Paso 4: Cree la puerta de enlace 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

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" } } }' \ --region region

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.region.on.aws URL arrendataria de la aplicación web: el navegador carga la página inicial desde este dominio mediante CloudFront
region.signin.aws Página de redireccionamiento de inicio de sesión SSO
.s3.region.amazonaws.com URL prefirmadas de S3: cargas y descargas de artefactos
oidc.region.amazonaws.com Intercambio de token OIDC para la autenticación de SSO
portal.sso.region.amazonaws.com Página de inicio de sesión en el portal SSO
assets.sso-portal.region.amazonaws.com Activos estáticos del portal SSO (CSS,) JavaScript
directory-id.awsapps.com 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.region.on.aws a la API son válidas AWS PrivateLink y no requieren la salida de Internet. No se ven afectados por el firewall.

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

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 \ --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

Paso 8: Obtenga el ID del punto final 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"

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

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-id private-subnet-route-table-id \ --destination-cidr-block 0.0.0.0/0 \ --vpc-endpoint-id $FW_ENDPOINT \ --region region

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-block private-subnet-cidr \ --vpc-endpoint-id $FW_ENDPOINT \ --region region

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-id private-subnet-route-table-id \ --destination-ipv6-cidr-block ::/0 \ --region region

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.region.on.aws 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.

  • Comprueba que has creado el com.amazonaws.region.api.transform punto final.

  • 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 table

    Resultado 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/0 ruta que apunte al punto final del firewall.

  • Compruebe que la tabla de rutas de subred del firewall tenga una 0.0.0.0/0 ruta que apunte a la puerta de enlace NAT.

  • Compruebe que la puerta de enlace NAT esté en un available estado.

Non-allowlisted los dominios no están bloqueados
  • Compruebe si hay una ::/0 ruta 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_ORDER con drop_established y alert_established como 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-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