Introdução
Uma aplicação de entregas funciona em uma sub-rede privada e precisa contatar um serviço externo sem receber endereço público. Você criará um gateway NAT público, adicionará sua rota de saída e usará requisições HTTP reais para observar a tradução do endereço de origem e a barreira contra conexões de entrada não solicitadas.
Conclua primeiro Control Application Access with Security Groups. Este ambiente novo fornece sua própria aplicação, sub-redes pública e privada, rota pública para a Internet e regras de segurança. A CLI já está configurada. Preserve esses recursos e a rede de referência não relacionada ao exercício; crie e depois exclua apenas seu NAT, seu Elastic IP e a rota privada padrão.
Relação com certificações
Este laboratório oferece prática para os seguintes temas de exame.
- Cloud Practitioner (CLF-C02) · Tarefa 3.5: Funções de sub-redes e gateways em uma VPC.
- Solutions Architect – Associate (SAA-C03) · Tarefa 1.2: Segmentação básica de sub-redes públicas e privadas com tabelas de rotas e NAT.
- CloudOps Engineer – Associate (SOA-C03) · Tarefas 5.1 e 5.3: Configuração de NAT e diagnóstico de uma rota ausente na sub-rede privada.
- Advanced Networking – Specialty (ANS-C01) · Tarefa 3.1: Prática básica de manutenção de uma rota VPC estática e verificação de seu efeito na conectividade.
Inspecionar a aplicação privada e alocar um endereço NAT
Inspecione a rede fornecida, observe a ausência de um caminho de saída e aloque um endereço para seu futuro gateway NAT.
Use Terminal para os comandos CLI e abra AWS View ao lado. A visualização lê o mesmo estado dos recursos. A aplicação está no IPv4 privado 10.20.2.10, em private-subnet, e não em public-subnet.
cd /home/labex/project
Selecione a VPC da aplicação pela tag Name. --filters limita os resultados, --query seleciona o ID e $(...) o armazena em uma variável do shell:
VPC_ID=$(aws ec2 describe-vpcs \
--filters Name=tag:Name,Values=application-network \
--query 'Vpcs[0].VpcId' \
--output text)
Selecione a sub-rede pública dessa VPC. É nela que o NAT terá um caminho para a Internet:
PUBLIC_SUBNET_ID=$(aws ec2 describe-subnets \
--filters "Name=vpc-id,Values=$VPC_ID" Name=tag:Name,Values=public-subnet \
--query 'Subnets[0].SubnetId' \
--output text)
Selecione a tabela de rotas existente da sub-rede privada. Você alterará a rota padrão, preservando a associação existente à sub-rede:
PRIVATE_RT_ID=$(aws ec2 describe-route-tables \
--filters "Name=vpc-id,Values=$VPC_ID" Name=tag:Name,Values=private-routes \
--query 'RouteTables[0].RouteTableId' \
--output text)
Inspecione as duas tabelas fornecidas. A projeção depois de []. seleciona campos legíveis para cada tabela:
aws ec2 describe-route-tables \
--filters "Name=vpc-id,Values=$VPC_ID" \
--query 'RouteTables[].{Name:Tags[?Key==`Name`].Value|[0],Routes:Routes,Associations:Associations}' \
--output json
As duas tabelas com nome possuem a rota local da VPC. Uma tabela principal sem nome também pode aparecer; deixe-a intacta. As tabelas nomeadas têm associações explícitas às sub-redes, portanto use a tabela selecionada private-routes. A tabela pública também encaminha 0.0.0.0/0 para um gateway de Internet; a privada não tem rota padrão. Uma sub-rede privada não tem rota direta para o gateway de Internet. Um gateway NAT público permite que aplicações privadas iniciem conexões IPv4 usando o endereço público do gateway. Ele fica na sub-rede pública, cuja própria rota de Internet já foi fornecida.
Em AWS View, clique em Request outbound service. A requisição HTTP privada retorna Connection failed: não há rota para o serviço externo 198.51.100.20:9000. Clique em Request private application from outside; essa requisição HTTP não solicitada para 10.20.2.10:80 também falha. A aplicação mantém seu endereço privado.
Um endereço Elastic IP é um IPv4 público alocado. Aloque um no domínio VPC e adicione tags para identificar seu recurso de prática. O valor entre aspas de --tag-specifications é um único argumento que descreve o tipo de recurso e suas tags:
ALLOCATION_ID=$(aws ec2 allocate-address \
--domain vpc \
--tag-specifications 'ResourceType=elastic-ip,Tags=[{Key=Name,Value=parcel-nat-address},{Key=Project,Value=parcel}]' \
--query 'AllocationId' \
--output text)
Consulte o endereço alocado:
aws ec2 describe-addresses \
--allocation-ids "$ALLOCATION_ID" \
--query 'Addresses[].{Allocation:AllocationId,PublicIP:PublicIp,Domain:Domain}' \
--output table
O resultado contém ID de alocação, IPv4 público e domínio vpc. Anote o endereço público para comparar com o tráfego depois. Ele pertence ao futuro NAT; não o associe à aplicação. Mantenha esse Terminal aberto para conservar os IDs salvos.
Criar um gateway NAT público
Coloque NAT na sub-rede pública e confirme que sua criação sozinha não configura o roteamento da aplicação privada.
NAT precisa de dois recursos existentes: a sub-rede pública e o Elastic IP alocado. --subnet-id escolhe a localização, --allocation-id o endereço público e --connectivity-type public um gateway para tráfego com destino à Internet. O tipo de recurso natgateway aplica tags de propriedade. Salve o ID gerado:
NAT_ID=$(aws ec2 create-nat-gateway \
--subnet-id "$PUBLIC_SUBNET_ID" \
--allocation-id "$ALLOCATION_ID" \
--connectivity-type public \
--tag-specifications 'ResourceType=natgateway,Tags=[{Key=Name,Value=parcel-nat},{Key=Project,Value=parcel}]' \
--query 'NatGateway.NatGatewayId' \
--output text)
A criação pode responder antes de o gateway ficar pronto. Um waiter da CLI consulta repetidamente o estado até atingir a condição indicada. Aguarde available antes de adicionar a rota:
aws ec2 wait nat-gateway-available --nat-gateway-ids "$NAT_ID"
Um waiter bem-sucedido termina sem saída. Consulte estado, sub-rede e associação de endereço:
aws ec2 describe-nat-gateways \
--nat-gateway-ids "$NAT_ID" \
--query 'NatGateways[].{ID:NatGatewayId,State:State,Subnet:SubnetId,Addresses:NatGatewayAddresses}' \
--output json
State é available, Subnet corresponde à sub-rede pública e NatGatewayAddresses contém seu ID de alocação e endereço público. PrivateIp pertence à faixa pública 10.20.1.0/24: é o endereço privado da interface NAT, separado do Elastic IP e do endereço da aplicação. NAT é um recurso distinto; a aplicação privada não recebeu esse endereço.
AWS View agora mostra NAT. Clique novamente em Request outbound service. Ainda falha porque a tabela privada não tem rota padrão. Criar o gateway fornece um possível próximo salto, mas não o seleciona automaticamente para a sub-rede privada. A rota pública existente para o gateway de Internet permanece inalterada.
Rotear tráfego de saída privado através de NAT
Adicione a rota privada padrão e compare o endereço privado da aplicação com o endereço de origem observado pelo serviço externo.
Uma rota seleciona o próximo salto para uma faixa de destinos. 0.0.0.0/0 corresponde a destinos IPv4 que não correspondem a uma rota mais específica. --nat-gateway-id seleciona seu NAT em vez do gateway de Internet. Adicione a rota apenas à tabela privada salva:
aws ec2 create-route \
--route-table-id "$PRIVATE_RT_ID" \
--destination-cidr-block 0.0.0.0/0 \
--nat-gateway-id "$NAT_ID"
A resposta indica criação bem-sucedida. Consulte as rotas da tabela privada:
aws ec2 describe-route-tables \
--route-table-ids "$PRIVATE_RT_ID" \
--query 'RouteTables[].Routes' \
--output json
A rota local permanece. A nova rota padrão tem seu NatGatewayId e estado active. O caminho dos pacotes agora é: aplicação privada → NAT na sub-rede pública → gateway de Internet → serviço externo.
Depois que AWS View mostrar a rota privada padrão, clique em Request outbound service. Retorna Success; o corpo da resposta contém o IPv4 de origem realmente observado pelo serviço HTTP externo. Compare-o com o endereço público alocado:
aws ec2 describe-addresses \
--allocation-ids "$ALLOCATION_ID" \
--query 'Addresses[0].PublicIp' \
--output text
Os dois endereços coincidem. A tradução de endereços de rede (NAT) substitui a origem privada pelo endereço público do gateway e acompanha a conexão para retornar a resposta ao iniciador. O endereço da própria aplicação continua sendo 10.20.2.10.

Exemplo de AWS View: a aplicação permanece em 10.20.2.10, a rota privada padrão seleciona NAT disponível e o corpo HTTP mostra o endereço público alocado. IDs e endereços gerados podem variar.
Clique em Request private application from outside. Continua retornando Connection failed. A conectividade de saída e seu tráfego de retorno não criam um caminho público de entrada para a aplicação privada. NAT não aceita uma conexão de Internet não solicitada para essa aplicação.
Diagnosticar e restaurar uma rota privada ausente
Remova uma rota, observe a falha e restaure a conectividade sem recriar NAT.
Um gateway pode estar disponível enquanto seu cliente não possui uma rota utilizável. Exclua apenas a rota privada padrão, mantendo NAT e a rota pública de Internet:
aws ec2 delete-route --route-table-id "$PRIVATE_RT_ID" --destination-cidr-block 0.0.0.0/0
A exclusão bem-sucedida não produz saída. Inspecione a tabela privada:
aws ec2 describe-route-tables \
--route-table-ids "$PRIVATE_RT_ID" \
--query 'RouteTables[].Routes' \
--output json
Resta apenas a rota local da VPC. AWS View ainda mostra NAT disponível, mas sem rota privada padrão. Clique em Request outbound service; uma nova requisição falha. O sucesso anterior é um registro histórico, não o resultado dessa nova requisição.
Restaure a mesma rota para o mesmo gateway:
aws ec2 create-route \
--route-table-id "$PRIVATE_RT_ID" \
--destination-cidr-block 0.0.0.0/0 \
--nat-gateway-id "$NAT_ID"
Consulte as rotas novamente:
aws ec2 describe-route-tables \
--route-table-ids "$PRIVATE_RT_ID" \
--query 'RouteTables[].Routes' \
--output json
A rota padrão ativa retorna. Em AWS View, envie uma nova Request outbound service; ela funciona e mostra o mesmo endereço público NAT. Request private application from outside continua falhando. Essas observações distinguem um gateway disponível de um caminho completo de roteamento do cliente.
Excluir o caminho NAT de prática e liberar seu endereço
Remova sua rota e NAT, libere o endereço público e demonstre que a rede privada fornecida permanece intacta.
Exclua a rota privada padrão antes de remover seu próximo salto. Caso contrário, a tabela pode conservar uma rota para um gateway excluído:
aws ec2 delete-route --route-table-id "$PRIVATE_RT_ID" --destination-cidr-block 0.0.0.0/0
A exclusão bem-sucedida não produz saída. Exclua apenas seu NAT:
aws ec2 delete-nat-gateway --nat-gateway-id "$NAT_ID"
A resposta identifica o gateway solicitado. Use o waiter de exclusão antes de liberar o endereço:
aws ec2 wait nat-gateway-deleted --nat-gateway-ids "$NAT_ID"
O waiter bem-sucedido termina sem saída. Excluir NAT remove sua interface de rede e desassocia o Elastic IP, mas não libera a alocação. Consulte o endereço antes de liberá-lo:
aws ec2 describe-addresses \
--allocation-ids "$ALLOCATION_ID" \
--query 'Addresses[].{Allocation:AllocationId,PublicIP:PublicIp,Association:AssociationId}' \
--output json
A alocação e o endereço público permanecem, enquanto Association é null: o endereço está alocado, mas não está mais associado. Libere agora esse recurso separado:
aws ec2 release-address --allocation-id "$ALLOCATION_ID"
A liberação bem-sucedida não produz saída. Consulte todo o inventário de gateways, sem depender de tags removíveis:
aws ec2 describe-nat-gateways \
--query 'NatGateways[].{ID:NatGatewayId,State:State,Subnet:SubnetId}' \
--output table
Seu gateway pode continuar listado com estado deleted; nenhum NAT de prática deve estar ativo. Um registro de exclusão mantido não significa que ele ainda possa encaminhar tráfego. Confira todo o inventário de endereços:
aws ec2 describe-addresses \
--query 'Addresses[].{Allocation:AllocationId,PublicIP:PublicIp}' \
--output table
A alocação de prática está ausente. Agora consulte as rotas privadas:
aws ec2 describe-route-tables \
--route-table-ids "$PRIVATE_RT_ID" \
--query 'RouteTables[].Routes' \
--output json
A rota local da VPC permanece e a rota padrão está ausente. A aplicação, as sub-redes, as regras de segurança, o gateway público de Internet e a rede de referência fornecidos continuam presentes. Uma consulta de inventário que falhou não comprova exclusão.
Em AWS View, clique em Request outbound service; falha novamente porque você removeu intencionalmente o caminho NAT. Request private application from outside permanece bloqueada. Os resultados correspondem ao estado inicial da rede privada.
Execute a verificação de conclusão desta etapa.
Resumo
Você alocou um endereço público, colocou NAT na sub-rede pública e roteou as requisições de saída de uma aplicação privada por ele. O serviço externo observou o endereço NAT traduzido, enquanto requisições de entrada não solicitadas permaneceram bloqueadas. Remover e restaurar a rota privada padrão demonstrou por que a disponibilidade do gateway sozinha não estabelece conectividade.
Em seguida, removeu a rota e NAT, liberou o endereço e verificou a preservação do estado inicial da rede privada.



