View a markdown version of this page

Acessando o AWS Transform aplicativo web a partir de uma VPC - AWS Transformação

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Acessando o AWS Transform aplicativo web a partir de uma VPC

Quando você usa AWS PrivateLink para acessar a AWS Transform API de forma privada a partir da sua VPC, o aplicativo web exige configuração de rede adicional. Ele fornece conteúdo estático (HTML JavaScript, CSS) CloudFront, o que requer conectividade com a Internet. As chamadas de API do aplicativo web passam pelo seu VPC endpoint e permanecem totalmente privadas.

Este guia mostra como configurar a saída controlada da Internet da sua VPC para que a aplicação web possa ser carregada e, ao mesmo tempo, manter sua VPC bloqueada somente nos domínios necessários.

Como funciona

O aplicativo AWS Transform web usa dois caminhos de rede:

  • Chamadas de API — Quando você interage com o aplicativo web (iniciando trabalhos, visualizando espaços de trabalho etc.), o navegador envia solicitações de API paraapi.transform.region.on.aws. Com o com.amazonaws.region.api.transform VPC endpoint e o DNS privado habilitados, essas solicitações são resolvidas para um endereço IP privado em sua VPC e nunca saem da rede. AWS

  • Conteúdo estático — Os arquivos HTML e CSS do aplicativo web são servidos por CloudFront meio detenant-id.transform.region.on.aws. JavaScript O carregamento desses arquivos requer conectividade com a Internet porque a entrega de CloudFront conteúdo só está disponível pela Internet pública.

  • Autenticação — Uso de fluxos de login do AWS IAM Identity Centerregion.signin.aws, que também requer conectividade com a Internet.

Para habilitar o aplicativo web enquanto mantém a segurança, você cria um caminho de saída controlado usando o AWS Network Firewall com filtragem baseada em domínio. Isso permite que sua VPC alcance somente os domínios específicos exigidos pelo aplicativo web e bloqueie todos os outros tráfegos da Internet.

Arquitetura

O diagrama a seguir mostra o caminho de rede para o tráfego de aplicativos 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

O Firewall de Rede deve ver as duas direções do tráfego (roteamento simétrico) para realizar a inspeção TLS SNI. Você deve configurar uma rota de retorno na sub-rede do NAT Gateway que envie o tráfego destinado à sub-rede privada de volta pelo firewall. Sem isso, as regras de filtragem baseadas em domínio não funcionarão.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Uma AWS conta com permissões para criar recursos de VPC, Network Firewall e NAT Gateways.

  • Uma VPC com uma sub-rede privada na qual suas instâncias ou cargas de trabalho são executadas.

  • Um gateway de internet conectado à VPC (ou permissões para criar um).

  • Um endpoint AWS Transform VPC com.amazonaws.region.api.transform com DNS privado habilitado. Esse é o endpoint usado pelo cliente do navegador de aplicativos web. Para obter instruções sobre a criação de endpoints, consulteAWS Transform e endpoints de interface (AWS PrivateLink).

Configurando a política de VPC endpoint

Se seu com.amazonaws.region.api.transform VPC endpoint tiver uma política de endpoint personalizada, você deverá adicionar uma declaração que permita operações. AWS Transform Sem isso, o aplicativo web não conseguirá fazer chamadas de API por meio do endpoint.

Adicione a seguinte declaração à sua política de VPC endpoint. AWS_TRANSFORM_PROFILE_ARNSubstitua pelo ARN do seu perfil de AWS Transform serviço, que você pode encontrar no AWS Transform console na página Configurações.

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

Se seu VPC endpoint usa a política padrão (acesso total), nenhuma alteração é necessária e você pode pular esta etapa.

Configurando a saída controlada da Internet

Conclua as etapas a seguir para configurar o Firewall de Rede com filtragem baseada em domínio para o AWS Transform aplicativo web.

Etapa 1: criar a sub-rede do firewall

Crie uma pequena sub-rede /28 dedicada ao endpoint do Network Firewall. Essa sub-rede deve estar na mesma zona de disponibilidade da sua sub-rede privada.

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

Etapa 2: Criar uma sub-rede pública para o NAT Gateway

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

Etapa 3: Configurar a tabela de rotas de sub-rede pública

Crie uma tabela de rotas para a sub-rede pública que roteia o tráfego da Internet para o gateway da 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

Etapa 4: Criar o gateway 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

Etapa 5: Criar o grupo de regras do Firewall de Rede

Crie um grupo de regras com estado que permita tráfego somente para os domínios exigidos pelo aplicativo 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

regionSubstitua pela AWS região em que seu AWS Transform perfil está instalado (por exemplo,us-east-1). directory-idSubstitua pelo ID do diretório do IAM Identity Center (por exemplo,d-1234567890). Você pode encontrar seu ID de diretório no console do IAM Identity Center.

A tabela a seguir explica os domínios permitidos.

Domínio Finalidade
.cloudfront.net CloudFront CDN — serve ativos estáticos de aplicativos web (CSSJavaScript, imagens)
.transform.region.on.aws URL do locatário do aplicativo Web — o navegador carrega a página inicial desse domínio via CloudFront
region.signin.aws Página de redirecionamento de login com SSO
.s3.region.amazonaws.com URLs pré-assinados do S3 — uploads e downloads de artefatos
oidc.region.amazonaws.com Troca de tokens OIDC para autenticação SSO
portal.sso.region.amazonaws.com Página de login do portal SSO
assets.sso-portal.region.amazonaws.com Ativos estáticos do portal SSO (CSS, JavaScript)
directory-id.awsapps.com Portal do IAM Identity Center para sua organização
nota

O .cloudfront.net curinga permite tráfego para qualquer CloudFront distribuição, não apenas para a aplicação AWS Transform web. Um filtro de domínio mais estreito não é possível porque os IPs de CloudFront borda são compartilhados entre distribuições e a inspeção TLS SNI não consegue distinguir distribuições individuais por trás do mesmo domínio.

nota

As chamadas de API api.transform.region.on.aws devem ser AWS PrivateLink processadas e não exigem saída da Internet. Eles não são afetados pelo firewall.

Etapa 6: criar a política de firewall

A política deve usar a avaliação da STRICT_ORDER regra com drop_established como ação padrão. Isso garante que qualquer tráfego que não corresponda à lista de permissões seja descartado.

# 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

Etapa 7: Criar o Firewall de Rede

# 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

Etapa 8: Obter o ID do endpoint do 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"

Etapa 9: Configurar a tabela de rotas de sub-rede do firewall

Roteie o tráfego vinculado à Internet da sub-rede do firewall para o NAT Gateway.

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

Etapa 10: Atualizar a tabela de rotas da sub-rede privada

Encaminhe todo o tráfego vinculado à Internet da sub-rede privada por meio do 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

Se já existir uma rota padrão, use replace-route em vez decreate-route.

Etapa 11: Adicionar a rota de retorno simétrica (obrigatório)

Importante

Essa etapa é fundamental. O Network Firewall usa a inspeção TLS SNI e deve ver as duas direções de uma conexão TCP. Adicione uma rota na tabela de rotas da sub-rede do NAT Gateway que envie o tráfego de retorno destinado à sub-rede privada de volta pelo 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-cidrSubstitua pelo bloco CIDR da sua sub-rede privada (por exemplo,10.0.144.0/20).

Sem roteamento simétrico, o firewall vê apenas uma direção do tráfego. O mecanismo de inspeção TLS não pode extrair a Indicação de Nome do Servidor (SNI) do handshake TLS, e todas as regras baseadas em domínio falharão silenciosamente.

Etapa 12: Remover a rota padrão IPv6 (se presente)

Se a tabela de rotas da sub-rede privada tiver uma rota padrão IPv6 (::/0) apontando diretamente para um gateway da Internet, ela ignorará o firewall para os destinos. IPv6-capable Remova-o:

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

Verificação

Em uma instância na sub-rede privada, verifique a configuração:

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

Solução de problemas

As chamadas de API para api.transform são bloqueadas pelo seu firewall

O domínio api.transform.region.on.aws deve ser resolvido para um endereço IP privado por meio do VPC endpoint e não deve acessar seu firewall da Internet.

  • Verifique se você criou o com.amazonaws.region.api.transform endpoint.

  • Verifique se o DNS privado está habilitado no endpoint:

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

    Saída esperada: available | True

O aplicativo web não carrega (tempo limite de conexão)
  • Verifique se a tabela de rotas da sub-rede privada tem uma 0.0.0.0/0 rota apontando para o endpoint do firewall.

  • Verifique se a tabela de rotas de sub-rede do firewall tem uma 0.0.0.0/0 rota apontando para o NAT Gateway.

  • Verifique se o NAT Gateway está em um available estado.

Non-allowlisted domínios não estão bloqueados
  • Verifique se há uma ::/0 rota IPv6 apontando para o gateway da Internet. Isso ignora o firewall. Remova-o (Etapa 12).

  • Verifique se o roteamento simétrico está configurado. A tabela de rotas de sub-rede do NAT Gateway deve ter uma rota de retorno pelo firewall para o CIDR da sub-rede privada (Etapa 11).

  • Verifique se a política de firewall é usada STRICT_ORDER com drop_established e alert_established como ações padrão.

Considerações sobre custos

Recurso Custo aproximado
Network Firewall ~$0. 395/hr (~$288/month) por zona de disponibilidade
NAT Gateway ~$0. 045/hr (~$33/month) + taxas de processamento de dados
IP elástico (IPv4 público) ~$0. 005/hr (~$3. 60/month)
Processamento de dados do Network Firewall $0. 065/GB
Processamento de dados do NAT Gateway $0. 045/GB

O custo base estimado é de aproximadamente $ 325/month para uma única implantação de zona de disponibilidade. Para implantações de produção, implante o firewall, o NAT Gateway e as sub-redes associadas em cada zona de disponibilidade em que existam sub-redes privadas.

Limpeza

Para remover todos os recursos criados por este guia, execute os comandos a seguir na ordem inversa. Substitua os espaços reservados pelos IDs de recursos da sua implantação. Você pode encontrar esses valores no AWS Management Console ou usando os describe comandos das etapas de configuração.

# 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