Diagnosticar o caminho de retorno de uma ACL de rede

AWSBeginner
Pratique Agora

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.

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.

A ACL reparada admite A e preserva as negações padrão

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.