Introdução
Uma aplicação pública de entregas tem rota para a Internet, endereço público e permissão HTTP no grupo de segurança, mas o cliente A não consegue lê-la. A ACL da sub-rede permite a porta de destino da solicitação e bloqueia a porta de retorno do cliente. Você diagnosticará e reparará esse caminho, observará prioridades e restaurará a configuração inicial fornecida.
Conclua primeiro Connect Privately to S3 with a VPC Endpoint. Este ambiente novo fornece sua própria aplicação, sub-redes pública e privada, rota pública, endereço, grupo e ACL personalizada. A CLI está configurada. Preserve esses recursos e a rede de referência. Modifique apenas a regra estudada e remova a negação temporária durante a limpeza. O estado final reproduz intencionalmente a falha inicial; não remove a aplicação fornecida.
Relação com certificações
Esta prática básica aborda os seguintes tópicos de exame.
- Cloud Practitioner (CLF-C02) · Tarefa 3.5: Funções básicas dos grupos de segurança e ACLs de VPC.
- Solutions Architect – Associate (SAA-C03) · Tarefa 1.2: Controles de segurança de sub-rede e condições de acesso à aplicação.
- CloudOps Engineer – Associate (SOA-C03) · Tarefa 5.3: Diagnóstico de conectividade por regras ACL e portas de resposta.
- Advanced Networking – Specialty (ANS-C01) · Tarefa 3.1: Prática básica de regras ordenadas e verificação do retorno real.
Inspecionar o limite da sub-rede da aplicação
Localize a aplicação e compare rota, grupo e ACL antes de alterar qualquer coisa.
Use Terminal e abra AWS View ao lado. O endereço privado da aplicação pública é 10.20.1.10. O cliente A é 198.51.100.10; B é 198.51.100.20. O grupo fornecido permite apenas A TCP 80. A porta 8081 não possui autorização de serviço.
cd /home/labex/project
Selecione a VPC pela tag Name. Filtros selecionam recursos, a consulta extrai o ID e $(...) o salva:
VPC_ID=$(aws ec2 describe-vpcs \
--filters Name=tag:Name,Values=application-network \
--query 'Vpcs[0].VpcId' \
--output text)
Salve a sub-rede pública e sua interface fornecida:
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)
ENI_ID=$(aws ec2 describe-network-interfaces \
--filters "Name=subnet-id,Values=$SUBNET_ID" \
--query 'NetworkInterfaces[0].NetworkInterfaceId' \
--output text)
Leia endereço privado, associação pública e grupo anexado:
aws ec2 describe-network-interfaces \
--network-interface-ids "$ENI_ID" \
--query 'NetworkInterfaces[].{Private:PrivateIpAddress,Public:Association.PublicIp,Groups:Groups}' \
--output json
Leia a tabela associada à sub-rede:
aws ec2 describe-route-tables \
--filters "Name=association.subnet-id,Values=$SUBNET_ID" \
--query 'RouteTables[].{Routes:Routes,Associations:Associations}' \
--output json
O endereço público está associado, e uma rota ativa 0.0.0.0/0 aponta para um gateway de Internet. Salve e consulte o grupo:
GROUP_ID=$(aws ec2 describe-security-groups \
--filters "Name=vpc-id,Values=$VPC_ID" Name=group-name,Values=supplied-application \
--query 'SecurityGroups[0].GroupId' \
--output text)
aws ec2 describe-security-groups \
--group-ids "$GROUP_ID" \
--query 'SecurityGroups[].{Inbound:IpPermissions,Outbound:IpPermissionsEgress}' \
--output json
A entrada permite TCP 80 de 198.51.100.10/32, com a saída padrão fornecida. Preserve essas regras.
Uma ACL de rede controla o tráfego que cruza o limite da sub-rede. Cada sub-rede tem uma ACL; uma ACL pode atender várias. Diferentemente de um grupo com estado, a ACL é sem estado: permitir uma solicitação não permite automaticamente sua resposta. Selecione a ACL associada:
ACL_ID=$(aws ec2 describe-network-acls \
--filters "Name=association.subnet-id,Values=$SUBNET_ID" \
--query 'NetworkAcls[0].NetworkAclId' \
--output text)
Leia identidade, associações e entradas separadas de entrada e saída:
aws ec2 describe-network-acls \
--network-acl-ids "$ACL_ID" \
--query 'NetworkAcls[].{ID:NetworkAclId,Default:IsDefault,Associations:Associations,Entries:Entries}' \
--output json
É a personalizada application-acl, não a ACL padrão. A regra 100 permite A TCP destino 80 em ambos os sentidos. Egress: false significa entrada; true, saída. Protocolo 6 é TCP. Tráfego sem correspondência alcança a negação final, * no AWS View e 32767 na CLI.
No AWS View, clique em Request application · client A: retorna Connection failed apesar da rota e da autorização do grupo. Request application · client B e Request port 8081 também falham. Mantenha este Terminal aberto para preservar os IDs.
Reparar a regra da porta de retorno do cliente
Substitua a porta de saída incorreta mantendo o endereço restrito do cliente.
A solicitação HTTP sai da porta efêmera escolhida pelo cliente para a porta 80 do servidor. A resposta sai da 80 para essa porta do cliente. Em cada sentido, a ACL compara a porta de destino do pacote. Uma saída com destino 80 não admite essa resposta.
O intervalo efêmero depende do cliente iniciador. Neste exercício, permita o intervalo comum 1024–65535 apenas para A, 198.51.100.10/32. Não é um padrão universal de todos os sistemas operacionais. Substitua a saída 100; --egress escolhe saída e --port-range o intervalo de destino:
aws ec2 replace-network-acl-entry \
--network-acl-id "$ACL_ID" \
--rule-number 100 \
--protocol 6 \
--rule-action allow \
--egress \
--cidr-block 198.51.100.10/32 \
--port-range From=1024,To=65535
Uma substituição bem-sucedida não produz saída. Leia as entradas:
aws ec2 describe-network-acls \
--network-acl-ids "$ACL_ID" \
--query 'NetworkAcls[].Entries' \
--output json
A entrada 100 continua permitindo A TCP 80. A saída 100 permite agora destinos 1024–65535 para o mesmo cliente. As negações padrão e a associação permanecem iguais.
No AWS View, clique novamente em Request application · client A. A nova solicitação retorna Application online, origem 198.51.100.10, destino 80. Request application · client B e Request port 8081 continuam falhando. Solicitação e resposta atravessam a ACL sem ampliar permissões de entrada do grupo ou da ACL para outros clientes.

Exemplo: entrada 100 permite A TCP 80; saída 100 permite destinos de resposta 1024–65535 para A. A negação final aparece nos dois sentidos e a solicitação real retorna Application online. Os IDs podem variar.
Observar uma negação de número menor
Insira propositalmente uma negação correspondente antes da permissão de entrada para observar a ordem.
As regras são avaliadas do menor número para o maior em cada sentido. A primeira correspondência decide; as posteriores não são consideradas. Adicione a entrada temporária 90 negando A TCP 80. --ingress seleciona entrada explicitamente; criar 90 não sobrescreve 100:
aws ec2 create-network-acl-entry \
--network-acl-id "$ACL_ID" \
--rule-number 90 \
--protocol 6 \
--rule-action deny \
--ingress \
--cidr-block 198.51.100.10/32 \
--port-range From=80,To=80
Leia as entradas:
aws ec2 describe-network-acls \
--network-acl-ids "$ACL_ID" \
--query 'NetworkAcls[].Entries' \
--output json
A negação de entrada 90 corresponde antes da permissão 100. A saída 100 ainda permite portas de retorno, e o grupo permite HTTP de A. Nenhum supera a negação anterior da ACL.
Quando AWS View mostrar entrada 90, clique em Request application · client A. A nova solicitação falha; B e 8081 continuam bloqueados. Um sucesso anterior é histórico: solicite novamente após mudar regras. Mantenha 90 para a verificação desta etapa e remova-a na seguinte.
Remover a negação temporária e testar novamente
Remova apenas a negação anterior e confira o caminho de retorno reparado.
Exclua entrada 90. O sentido importa porque os números de entrada e saída são independentes:
aws ec2 delete-network-acl-entry --network-acl-id "$ACL_ID" --rule-number 90 --ingress
Leia as entradas novamente:
aws ec2 describe-network-acls \
--network-acl-ids "$ACL_ID" \
--query 'NetworkAcls[].Entries' \
--output json
90 está ausente. Entrada 100 permite A TCP 80, saída 100 permite seus retornos e o restante é negado. Preserve a associação original, grupo, rota e endereço público.
No AWS View, uma nova Request application · client A retorna Application online. Request application · client B e Request port 8081 falham. O grupo com estado permite respostas a solicitações admitidas, mas a ACL sem estado precisa dos dois sentidos; remover a negação anterior restaura esse limite independente.
Restaurar a configuração ACL inicial fornecida
Desfaça sua edição dos retornos, confirme que nenhuma negação temporária permanece e preserve os recursos.
Restaure saída 100 ao destino 80 fornecido. A limpeza reproduz intencionalmente a falha inicial; essa regra não é recomendada para respostas HTTP funcionais:
aws ec2 replace-network-acl-entry \
--network-acl-id "$ACL_ID" \
--rule-number 100 \
--protocol 6 \
--rule-action allow \
--egress \
--cidr-block 198.51.100.10/32 \
--port-range From=80,To=80
Leia o inventário completo das ACLs da VPC com associações. Tags removíveis não bastam como prova de limpeza:
aws ec2 describe-network-acls \
--filters "Name=vpc-id,Values=$VPC_ID" \
--query 'NetworkAcls[].{ID:NetworkAclId,Default:IsDefault,Associations:Associations,Entries:Entries}' \
--output json
A temporária 90 deve estar ausente. A ACL personalizada continua associada à sub-rede pública da aplicação. As duas regras 100 correspondem a A TCP destino 80, com negações finais intactas. A sub-rede privada mantém sua ACL padrão. Não exclua nem substitua ACL, sub-redes, aplicação, grupo, gateway ou endereço fornecidos.
Leia o grupo original para confirmar suas regras:
aws ec2 describe-security-groups \
--group-ids "$GROUP_ID" \
--query 'SecurityGroups[].{Inbound:IpPermissions,Outbound:IpPermissionsEgress}' \
--output json
No AWS View, uma nova Request application · client A volta a falhar porque sua porta de retorno não está permitida. B e 8081 permanecem bloqueados. Falha de API ou rede indisponível não prova limpeza: o inventário autenticado deve funcionar e o caminho real configurado deve produzir esses resultados.
Execute a verificação de conclusão desta etapa.
Resumo
Você localizou a ACL e diagnosticou o intervalo de respostas ausente. Substituir a saída restaurou HTTP real para A enquanto outras origens e portas ficaram bloqueadas. Uma negação de entrada com número menor demonstrou a primeira correspondência; removê-la restaurou o acesso.
Você preservou grupo, rotas, endereços e associações, removeu a negação temporária e restaurou a configuração original.



