Conectar uma sub-rede pública à Internet

AWSBeginner
Pratique Agora

Introdução

Uma aplicação de entregas está pronta dentro de uma VPC, mas seu serviço público ainda não consegue receber uma solicitação externa. Você criará o caminho que falta: um gateway da Internet anexado à VPC, uma rota padrão na tabela de rotas da sub-rede da aplicação e um endereço público associado à interface de rede da aplicação.

Conclua primeiro Criar uma VPC com sub-redes para aplicações. Este ambiente novo fornece sua própria VPC, sub-redes, aplicação e regras de acesso; ele não reutiliza sua VM anterior. A CLI já está configurada. Preserve a rede de referência não relacionada à tarefa e todos os recursos fornecidos para a aplicação.

Relação com certificações

Este laboratório oferece prática dos seguintes tópicos de exame.

Anexar um gateway da Internet

Nesta etapa, você inspecionará a rede fornecida para a aplicação e anexará um gateway da Internet à sua VPC.

Use Terminal para os comandos e clique em AWS View ao lado. A visualização lê o mesmo estado de recursos que a CLI. A VPC application-network contém public-subnet e private-subnet; a aplicação fornecida usa o endereço privado 10.20.1.10 em public-subnet.

cd /home/labex/project

Selecione a VPC da aplicação pela tag Name. --filters limita os resultados do servidor; --query seleciona o ID. $(...) captura esse ID em uma variável do shell para as próximas etapas:

VPC_ID=$(aws ec2 describe-vpcs \
  --filters Name=tag:Name,Values=application-network \
  --query 'Vpcs[0].VpcId' \
  --output text)

Consulte as sub-redes da rede selecionada:

aws ec2 describe-subnets \
  --filters "Name=vpc-id,Values=$VPC_ID" \
  --query 'Subnets[].{CIDR:CidrBlock,ID:SubnetId}' \
  --output table

Os intervalos são 10.20.1.0/24 e 10.20.2.0/24. A rede de referência separada 10.99.0.0/16 não participa da tarefa; preserve-a.

HTTP é o protocolo de solicitação e resposta usado pelo endpoint desta aplicação. Uma porta identifica o serviço receptor; esta aplicação escuta na porta TCP 80. Em AWS View, clique em Request application · client A. Isso envia uma solicitação externa a partir do cliente fornecido 198.51.100.10. O resultado é Connection failed com No public address. A aplicação existe, mas seu caminho público está incompleto.

Um gateway da Internet (IGW) conecta o caminho de roteamento público de uma VPC à Internet. Criar e anexar o gateway são operações separadas. Adicione tags ao novo gateway para identificar seu recurso de prática; a especificação de tags entre aspas é um único argumento:

IGW_ID=$(aws ec2 create-internet-gateway \
  --tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=parcel-internet},{Key=Project,Value=parcel}]' \
  --query 'InternetGateway.InternetGatewayId' \
  --output text)

Anexe apenas esse gateway à VPC selecionada da aplicação:

aws ec2 attach-internet-gateway --internet-gateway-id "$IGW_ID" --vpc-id "$VPC_ID"

Um anexo bem-sucedido não produz saída do comando. Consulte a relação:

aws ec2 describe-internet-gateways \
  --internet-gateway-ids "$IGW_ID" \
  --query 'InternetGateways[].{ID:InternetGatewayId,Attachments:Attachments}' \
  --output json

O anexo identifica sua VPC e tem o estado available. AWS View agora mostra esse gateway abaixo da VPC. O anexo, por si só, não fornece uma rota de sub-rede nem um endereço público para a aplicação. Mantenha este Terminal aberto para preservar os IDs salvos.

Adicionar a rota padrão da sub-rede pública

Nesta etapa, você direcionará o tráfego de Internet da sub-rede pública ao gateway anexado.

Uma tabela de rotas associa intervalos de destino a alvos. Cada sub-rede usa sua tabela associada, ou a tabela principal da VPC caso não tenha uma associação explícita. Aqui, a preparação forneceu tabelas associadas separadamente: public-routes e private-routes. Selecione public-routes dentro da VPC da sua aplicação:

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

Consulte suas rotas e associações:

aws ec2 describe-route-tables \
  --route-table-ids "$PUBLIC_ROUTE_TABLE_ID" \
  --query 'RouteTables[].{ID:RouteTableId,Routes:Routes,Associations:Associations}' \
  --output json

A associação identifica public-subnet; a rota existente 10.20.0.0/16 tem o alvo local, que mantém o tráfego da VPC dentro dela. Não remova essa rota local nem altere private-routes.

Uma rota padrão, 0.0.0.0/0, cobre destinos IPv4 que não correspondem a uma rota mais específica. --gateway-id define o gateway da Internet como alvo:

aws ec2 create-route \
  --route-table-id "$PUBLIC_ROUTE_TABLE_ID" \
  --destination-cidr-block 0.0.0.0/0 \
  --gateway-id "$IGW_ID"

A resposta contém Return: true. Consulte a tabela novamente:

aws ec2 describe-route-tables \
  --route-table-ids "$PUBLIC_ROUTE_TABLE_ID" \
  --query 'RouteTables[].Routes[].{Destination:DestinationCidrBlock,Target:GatewayId,State:State}' \
  --output table

A rota padrão aponta para seu igw-... e está active; a rota local permanece. AWS View mostra 0.0.0.0/0 sob public-routes, apontando para o mesmo gateway. Clique novamente em Request application · client A. A solicitação ainda falha com No public address. A sub-rede já possui uma rota pública, mas a aplicação precisa de seu próprio endereço IPv4 público.

Associar um endereço público e testar HTTP

Nesta etapa, você associará um IP elástico à aplicação fornecida e enviará uma solicitação externa bem-sucedida.

Um IP elástico é um endereço IPv4 público alocado à sua conta que pode ser associado a um recurso compatível. Seu ID de alocação identifica o endereço reservado; seu ID de associação identifica o vínculo com um recurso. Durante a limpeza, você removerá o vínculo e a alocação.

Uma interface de rede (ENI) fornece a conexão de rede e o IP privado de uma aplicação. Este laboratório fornece a interface da aplicação; você não precisa criar uma instância nem configurar seu sistema operacional. Selecione-a por VPC e nome:

ENI_ID=$(aws ec2 describe-network-interfaces \
  --filters "Name=vpc-id,Values=$VPC_ID" Name=tag:Name,Values=application-interface \
  --query 'NetworkInterfaces[0].NetworkInterfaceId' \
  --output text)

Aloque um endereço para uso em uma VPC e salve seu ID de alocação:

ALLOCATION_ID=$(aws ec2 allocate-address \
  --domain vpc \
  --query 'AllocationId' \
  --output text)

Associe-o à interface da aplicação e salve o ID de associação:

ASSOCIATION_ID=$(aws ec2 associate-address \
  --allocation-id "$ALLOCATION_ID" \
  --network-interface-id "$ENI_ID" \
  --query 'AssociationId' \
  --output text)

Consulte o estado resultante da interface:

aws ec2 describe-network-interfaces \
  --network-interface-ids "$ENI_ID" \
  --query 'NetworkInterfaces[].{ID:NetworkInterfaceId,PrivateIP:PrivateIpAddress,PublicIP:Association.PublicIp}' \
  --output table

O endereço privado continua sendo 10.20.1.10; o campo público agora contém um endereço. Em AWS View, o cartão da aplicação mostra esse endereço público junto com a rota para o gateway. Clique em Request application · client A.

O resultado é Success, com endereço de origem 198.51.100.10, porta de destino 80 e corpo Application online. Esta é uma resposta HTTP da aplicação fornecida. Uma lista de recursos configurados, por si só, não comprovaria que a solicitação funciona.

A aplicação tem um endereço público e uma rota para o gateway da Internet; o cliente A recebe sua resposta HTTP

Exemplo de resultado: a sub-rede pública mostra a rota para o gateway e o endereço da aplicação; a solicitação retorna Application online. Os IDs e endereços alocados variam.

As regras de acesso preparadas permitem esse cliente e porta. O próximo laboratório ensinará a controlar essas regras; mantenha-as inalteradas aqui.

Observar e restaurar uma rota interrompida

Nesta etapa, você removerá uma rota, observará uma solicitação com falha e restaurará o caminho funcional.

Um endereço público não substitui o roteamento. Remova apenas a rota padrão que você criou; preserve a rota local fornecida:

aws ec2 delete-route \
  --route-table-id "$PUBLIC_ROUTE_TABLE_ID" \
  --destination-cidr-block 0.0.0.0/0

Confirme que o endereço público continua associado:

aws ec2 describe-addresses \
  --allocation-ids "$ALLOCATION_ID" \
  --query 'Addresses[].{PublicIP:PublicIp,Interface:NetworkInterfaceId}' \
  --output table

Em AWS View, public-routes agora contém apenas a rota local. Uma resposta antiga pode ser identificada como Previous request; ela não descreve a configuração modificada. Clique em Request application · client A para enviar uma nova solicitação. O resultado muda para Connection failed, mesmo com o endereço público preservado.

O endereço público permanece, mas a ausência da rota padrão faz uma nova solicitação falhar

Exemplo de diagnóstico: a aplicação ainda tem um endereço público, public-routes contém apenas sua rota local e a nova solicitação falha.

Restaure a rota para o mesmo gateway anexado:

aws ec2 create-route \
  --route-table-id "$PUBLIC_ROUTE_TABLE_ID" \
  --destination-cidr-block 0.0.0.0/0 \
  --gateway-id "$IGW_ID"

A resposta contém Return: true. Depois que a rota reaparecer em AWS View, clique novamente em Request application · client A. Success e Application online retornam. Você isolou o roteamento como condição alterada, em vez de modificar várias configurações ao mesmo tempo.

Remover seu caminho público

Nesta etapa, você removerá apenas o endereço, a rota e o gateway que criou, preservando as redes fornecidas para a aplicação e de referência.

Os recursos possuem dependências. Primeiro desassocie o endereço da interface:

aws ec2 disassociate-address --association-id "$ASSOCIATION_ID"

Depois libere a alocação; a desassociação sozinha deixa um recurso alocado:

aws ec2 release-address --allocation-id "$ALLOCATION_ID"

Remova sua rota padrão antes de desanexar o gateway:

aws ec2 delete-route \
  --route-table-id "$PUBLIC_ROUTE_TABLE_ID" \
  --destination-cidr-block 0.0.0.0/0
aws ec2 detach-internet-gateway --internet-gateway-id "$IGW_ID" --vpc-id "$VPC_ID"

Por fim, exclua o gateway desanexado:

aws ec2 delete-internet-gateway --internet-gateway-id "$IGW_ID"

Esses comandos de remoção não produzem saída quando são bem-sucedidos. Consulte inventários completos para comprovar a ausência dos recursos, em vez de depender de tags:

aws ec2 describe-addresses --query 'Addresses' --output json
aws ec2 describe-internet-gateways --query 'InternetGateways' --output json

Ambos retornam [] neste ambiente novo. Verifique novamente as rotas da sub-rede fornecida:

aws ec2 describe-route-tables \
  --route-table-ids "$PUBLIC_ROUTE_TABLE_ID" \
  --query 'RouteTables[].Routes[].{Destination:DestinationCidrBlock,Target:GatewayId}' \
  --output table

Apenas a rota local permanece. A VPC, as sub-redes e a interface fornecidas para a aplicação ainda existem. AWS View não mostra mais seu gateway nem o endereço público. Clique mais uma vez em Request application · client A; o caminho público removido não pode atender à solicitação. Uma consulta de inventário que falha não comprova a limpeza dos recursos.

Execute a verificação de conclusão desta etapa.

Resumo

Você anexou um gateway da Internet, adicionou uma rota padrão à tabela associada da sub-rede da aplicação e associou um IP elástico. Testou acesso HTTP real, demonstrou que remover a rota interrompe a solicitação apesar do endereço público, restaurou a rota e removeu apenas seus recursos de prática.

Continue com Controlar o acesso à aplicação com grupos de segurança para limitar quais solicitações externas podem chegar à aplicação.