Introdução
Uma aplicação privada de entregas lê um manifesto do S3 por NAT. Ela precisa de um caminho específico do serviço sem acesso geral à Internet. Você criará um endpoint de gateway do S3, comparará solicitações reais, diagnosticará uma associação incorreta e restaurará a rede fornecida.
Conclua primeiro Give a Private Subnet Outbound Access. Este ambiente novo fornece sua própria aplicação, objeto S3, sub-redes pública e privada, gateway NAT e regras de segurança. A CLI está configurada. Preserve esses recursos e a rede de referência; crie e exclua apenas seu endpoint e restaure a rota NAT padrão privada removida temporariamente.
Relação com certificações
Este laboratório oferece prática básica nos seguintes temas:
- Cloud Practitioner (CLF-C02) · Tarefa 3.5: Papéis dos gateways VPC e da conectividade privada.
- Solutions Architect – Associate (SAA-C03) · Tarefa 1.2: Acesso básico de aplicações privadas por endpoints de serviço e tabelas de rotas.
- CloudOps Engineer – Associate (SOA-C03) · Tarefas 5.1 e 5.3: Configurar endpoints e diagnosticar associações com tabelas.
- Advanced Networking – Specialty (ANS-C01) · Tarefa 3.1: Fundamentos de manutenção de rotas de serviço e verificação da conectividade privada.
Criar um endpoint de gateway do S3 para a aplicação privada
Inspecione o caminho NAT inicial, identifique os intervalos S3 e crie o endpoint para a tabela privada.
Use Terminal e abra AWS View ao lado. A aplicação mantém 10.20.2.10. O bucket fornecido parcel-delivery-storage contém message.txt com Parcel manifest ready.
cd /home/labex/project
Selecione a VPC pela tag Name. Filtros selecionam recursos, a consulta extrai o ID e $(...) o guarda:
VPC_ID=$(aws ec2 describe-vpcs \
--filters Name=tag:Name,Values=application-network \
--query 'Vpcs[0].VpcId' \
--output text)
Guarde os IDs das tabelas privada e pública. Suas associações com sub-redes já estão corretas:
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)
PUBLIC_RT_ID=$(aws ec2 describe-route-tables \
--filters "Name=vpc-id,Values=$VPC_ID" Name=tag:Name,Values=public-routes \
--query 'RouteTables[0].RouteTableId' \
--output text)
Leia as rotas e associações:
aws ec2 describe-route-tables \
--route-table-ids "$PRIVATE_RT_ID" "$PUBLIC_RT_ID" \
--query 'RouteTables[].{ID:RouteTableId,Routes:Routes,Associations:Associations}' \
--output json
A rota privada 0.0.0.0/0 aponta para NAT; a pública aponta para o gateway de Internet. Ambas mantêm local. Guarde o ID NAT para a restauração:
NAT_ID=$(aws ec2 describe-nat-gateways \
--filter "Name=vpc-id,Values=$VPC_ID" Name=state,Values=available \
--query 'NatGateways[0].NatGatewayId' \
--output text)
Leia seus endereços para comparar solicitações:
aws ec2 describe-nat-gateways \
--nat-gateway-ids "$NAT_ID" \
--query 'NatGateways[].{State:State,Addresses:NatGatewayAddresses}' \
--output json
No AWS View, clique em Read storage object: a resposta contém Success e o manifesto. Source address é o endereço público NAT. Request outbound service também funciona com o mesmo endereço. Esse é o comportamento inicial a restaurar.
Uma lista de prefixos gerenciada pela AWS agrupa intervalos do serviço em uma região. Um endpoint de gateway do S3 adiciona uma rota à lista nas tabelas associadas, sem atribuir endereço público à aplicação nem oferecer Internet geral. Selecione a lista S3 e leia os intervalos IPv4:
PREFIX_ID=$(aws ec2 describe-prefix-lists \
--filters Name=prefix-list-name,Values=com.amazonaws.us-east-1.s3 \
--query 'PrefixLists[0].PrefixListId' \
--output text)
aws ec2 get-managed-prefix-list-entries \
--prefix-list-id "$PREFIX_ID" \
--query 'Entries[].Cidr' \
--output json
Crie o endpoint S3 de us-east-1, associado somente à tabela privada. --vpc-endpoint-type Gateway escolhe o tipo baseado em rotas; --service-name, o serviço regional; --route-table-ids, a tabela da aplicação. Tags identificam seu recurso de prática:
ENDPOINT_ID=$(aws ec2 create-vpc-endpoint \
--vpc-id "$VPC_ID" \
--vpc-endpoint-type Gateway \
--service-name com.amazonaws.us-east-1.s3 \
--route-table-ids "$PRIVATE_RT_ID" \
--tag-specifications 'ResourceType=vpc-endpoint,Tags=[{Key=Name,Value=parcel-s3-endpoint},{Key=Project,Value=parcel}]' \
--query 'VpcEndpoint.VpcEndpointId' \
--output text)
Leia o estado e a associação:
aws ec2 describe-vpc-endpoints \
--vpc-endpoint-ids "$ENDPOINT_ID" \
--query 'VpcEndpoints[].{ID:VpcEndpointId,State:State,Type:VpcEndpointType,Service:ServiceName,Tables:RouteTableIds}' \
--output json
Continue quando State for available. Caso contrário, aguarde alguns segundos e repita a consulta. O tipo é Gateway, o serviço é S3 e apenas a tabela privada está associada. Mantenha Terminal aberto para preservar as variáveis.
Clique novamente em Read storage object. O manifesto é o mesmo, mas a origem agora é 10.20.2.10. A rota S3 é mais específica que a rota NAT padrão: S3 usa o endpoint e outras saídas usam NAT.
Manter S3 sem a rota NAT padrão
Remova o caminho geral de saída e verifique o caminho específico do serviço.
Exclua apenas a rota NAT padrão privada. Preserve gateway, endereço, rota pública e endpoint:
aws ec2 delete-route --route-table-id "$PRIVATE_RT_ID" --destination-cidr-block 0.0.0.0/0
Uma exclusão bem-sucedida não produz saída. Leia as rotas:
aws ec2 describe-route-tables \
--route-table-ids "$PRIVATE_RT_ID" \
--query 'RouteTables[].Routes' \
--output json
Permanecem local e S3 DestinationPrefixListId, mas não a rota padrão. GatewayId é o ID do endpoint e o estado é active. Associações do endpoint gerenciam essas rotas; não as edite ou exclua com comandos comuns de rotas.
Uma nova Read storage object retorna Parcel manifest ready de 10.20.2.10. Request outbound service falha porque 198.51.100.20:9000 está fora do prefixo S3 e sem rota padrão. Request private application from outside também falha. O endpoint fornece S3 privado, sem endereço público nem rotas para outros destinos da Internet.

Exemplo: a tabela privada tem local e o prefixo S3, sem 0.0.0.0/0. A resposta real contém o manifesto e origem 10.20.2.10. NAT continua disponível, mas não participa desse caminho S3. IDs e endereços gerados podem variar.
Observar a associação com a tabela errada
Mova o endpoint para fora da tabela da aplicação e observe por que um recurso disponível pode ser inacessível.
Associação endpoint–tabela é diferente de associação sub-rede–tabela. Altere somente a primeira:
aws ec2 modify-vpc-endpoint \
--vpc-endpoint-id "$ENDPOINT_ID" \
--add-route-table-ids "$PUBLIC_RT_ID" \
--remove-route-table-ids "$PRIVATE_RT_ID"
A resposta informa Return: true. Leia o endpoint:
aws ec2 describe-vpc-endpoints \
--vpc-endpoint-ids "$ENDPOINT_ID" \
--query 'VpcEndpoints[].{State:State,Tables:RouteTableIds}' \
--output json
Continua available, mas apenas a tabela pública aparece. Leia ambas:
aws ec2 describe-route-tables \
--route-table-ids "$PRIVATE_RT_ID" "$PUBLIC_RT_ID" \
--query 'RouteTables[].{ID:RouteTableId,Routes:Routes,Associations:Associations}' \
--output json
A rota S3 automática passou à tabela pública. A privada contém só local; sua rota NAT já foi removida. As associações das sub-redes continuam intactas. Compartilhar uma VPC não disponibiliza uma rota de endpoint a todas as sub-redes.
Quando AWS View mostrar a mudança, clique em Read storage object. A nova solicitação retorna Connection failed e Storage unavailable: falta o caminho S3 na tabela da aplicação. Request outbound service também falha. O sucesso anterior é histórico. Preserve essa falha para a verificação do passo; depois você a corrigirá.
Restaurar a rota privada do serviço
Repare a associação sem recriar o endpoint, atribuir endereço público ou restaurar NAT.
Devolva o mesmo endpoint à tabela privada e remova a pública:
aws ec2 modify-vpc-endpoint \
--vpc-endpoint-id "$ENDPOINT_ID" \
--add-route-table-ids "$PRIVATE_RT_ID" \
--remove-route-table-ids "$PUBLIC_RT_ID"
Leia a associação:
aws ec2 describe-vpc-endpoints \
--vpc-endpoint-ids "$ENDPOINT_ID" \
--query 'VpcEndpoints[].{State:State,Tables:RouteTableIds}' \
--output json
Somente a privada deve aparecer. Inspecione as rotas:
aws ec2 describe-route-tables \
--route-table-ids "$PRIVATE_RT_ID" "$PUBLIC_RT_ID" \
--query 'RouteTables[].{ID:RouteTableId,Routes:Routes}' \
--output json
A rota S3 privada retorna automaticamente e desaparece da pública. A rota pública de Internet permanece; a privada ainda não tem rota padrão.
Uma nova Read storage object retorna o manifesto original de 10.20.2.10. Request outbound service continua falhando, pois S3 não fornece conectividade geral à Internet. Request private application from outside segue bloqueada. Endereço privado e regras fornecidas são preservados.
Excluir o endpoint e restaurar NAT
Exclua seu endpoint, confira a retirada das rotas automáticas e restaure a rota privada para o NAT fornecido.
Exclua apenas seu endpoint:
aws ec2 delete-vpc-endpoints --vpc-endpoint-ids "$ENDPOINT_ID"
Unsuccessful deve estar vazio. Leia o inventário completo, sem filtrar por tags removíveis:
aws ec2 describe-vpc-endpoints \
--query 'VpcEndpoints[].{ID:VpcEndpointId,State:State,Tables:RouteTableIds}' \
--output json
Pode restar um registro deleted, mas nenhum endpoint de prática ativo. O registro não encaminha tráfego. Se aparecer deleting, aguarde alguns segundos e repita a consulta. Leia as tabelas:
aws ec2 describe-route-tables \
--route-table-ids "$PRIVATE_RT_ID" "$PUBLIC_RT_ID" \
--query 'RouteTables[].{ID:RouteTableId,Routes:Routes}' \
--output json
Nenhuma deve conter o prefixo S3. Read storage object falha enquanto a privada contém só local, confirmando que não há caminho alternativo oculto.
Restaure a rota padrão com o ID NAT salvo. Não exclua NAT, endereço, aplicação ou dados S3:
aws ec2 create-route \
--route-table-id "$PRIVATE_RT_ID" \
--destination-cidr-block 0.0.0.0/0 \
--nat-gateway-id "$NAT_ID"
Leia as rotas restauradas:
aws ec2 describe-route-tables \
--route-table-ids "$PRIVATE_RT_ID" \
--query 'RouteTables[].Routes' \
--output json
local e NAT ativo correspondem ao estado inicial. Uma consulta de inventário com falha não prova exclusão: a consulta autenticada deve funcionar e confirmar ausência ou deleted, sem rotas automáticas.
Clique novamente em Read storage object: o manifesto retorna por NAT, cujo endereço público aparece em Source address. Request outbound service funciona com o mesmo endereço; Request private application from outside segue bloqueada. Preserve VPC, sub-redes, NAT, regras, objeto S3 e rede de referência.
Execute a verificação de conclusão desta etapa.
Resumo
Você criou um endpoint S3 e verificou leituras reais com origem privada. Sem a rota NAT padrão, S3 continuou acessível e outros destinos foram bloqueados. A associação pública interrompeu o acesso; a privada o reparou sem mudar aplicação ou regras.
Você excluiu o endpoint e suas rotas e restaurou NAT.



