Security Groups, NACLs e exposição mínima
Objetivos desta aula
- Configurar SG com referência entre grupos
- Distinguir SG de NACL
- Auditar exposição da conta
Security Group é firewall com estado, aplicado à interface de rede: você declara o que entra, e a resposta sai automaticamente. NACL é sem estado, aplicada à subnet, e exige regras de ida e volta — usada como camada adicional grosseira, não como controle principal.
A técnica que separa amador de profissional é referenciar SG em vez de CIDR: o SG do banco permite 5432 apenas com origem no SG da aplicação. Assim, quando novas instâncias entram, a permissão acompanha automaticamente e nenhum IP precisa ser mantido à mão.
Auditar exposição deveria ser rotina semanal: procurar regras com 0.0.0.0/0 em portas administrativas ou de banco. Encontrar 22 ou 5432 abertos ao mundo é o achado mais comum — e o mais explorado.
1. Security Group é stateful
Se a entrada foi permitida, a resposta sai automaticamente. SGs só têm regras de allow e se aplicam a interfaces de rede (instância, ALB, RDS).
2. Referenciar SG em vez de IP
A regra do banco diz 'aceito 5432 vindo do SG da API'. Se a API escalar para 50 instâncias, nada muda. Essa é a forma idiomática de encadear camadas.
3. NACL é stateless
Aplica-se à subnet, tem allow e deny numerados e precisa liberar também as portas efêmeras de retorno (1024–65535). Use raramente, como camada extra de bloqueio.
4. Acesso administrativo sem porta 22
O AWS Systems Manager Session Manager abre shell sem SSH, sem bastion e com auditoria. Assim nenhum SG precisa de 22 aberto para a internet.
5. Checagem final
Apenas o ALB aceita 443 da internet; a API aceita só do ALB; o banco só da API.
Na prática
SG referenciando SG e auditoria de exposição
bash
SG_APP=$(aws ec2 create-security-group --group-name cloudshop-app \
--description "API CloudShop" --vpc-id "$VPC_ID" --query GroupId --output text)
SG_DB=$(aws ec2 create-security-group --group-name cloudshop-db \
--description "RDS CloudShop" --vpc-id "$VPC_ID" --query GroupId --output text)
# somente o ALB acessa a aplicacao na 3000
aws ec2 authorize-security-group-ingress --group-id "$SG_APP" \
--protocol tcp --port 3000 --source-group "$SG_ALB"
# somente a aplicacao acessa o banco
aws ec2 authorize-security-group-ingress --group-id "$SG_DB" \
--protocol tcp --port 5432 --source-group "$SG_APP"
# auditoria: regras abertas ao mundo
aws ec2 describe-security-groups \
--query 'SecurityGroups[?IpPermissions[?IpRanges[?CidrIp==`0.0.0.0/0`]]].{ID:GroupId,Nome:GroupName}'Nota de segurança: SSH aberto ao mundo (22 em 0.0.0.0/0) sofre ataque contínuo. Use SSM Session Manager ou bastion com IP restrito.
Cadeia de security groups
text
sg-alb : inbound 443 de 0.0.0.0/0
sg-api : inbound 3000 de sg-alb <- referencia ao SG, nao IP
sg-db : inbound 5432 de sg-api
(nenhum SG com 22 aberto; acesso via SSM Session Manager)Encontrar exposições perigosas
bash
aws ec2 describe-security-groups \
--query "SecurityGroups[?IpPermissions[?IpRanges[?CidrIp=='0.0.0.0/0'] && (FromPort==\`22\` || FromPort==\`5432\`)]].GroupId"
aws ssm start-session --target i-0123456789abcdef0 # shell sem SSHNota de segurança: Porta 22 ou de banco aberta para 0.0.0.0/0 é um dos achados mais explorados em ataques automatizados.
Por que isso importa
Este é literalmente o boss do módulo e um dos achados mais comuns em auditoria real.
Erro comum
Liberar 0.0.0.0/0 'temporariamente' para testar e esquecer de fechar.
Dica de produção
Prefira SSM Session Manager a SSH: acesso auditado, sem porta aberta e sem chave para vazar.
Alerta de segurança
Banco acessível pela internet com senha fraca é comprometido em horas por varredura automatizada.
Pergunta de entrevista
Diferencie Security Group e NACL e explique quando usar cada um.
Glossário
- stateful
- Firewall que rastreia conexões e libera a resposta automaticamente.
- referência de SG
- Regra cuja origem é outro Security Group, e não um bloco de IPs.
- stateful
- Lembra conexões; a resposta de um tráfego permitido é liberada automaticamente.
- NACL
- Lista de controle de acesso stateless aplicada à subnet.
- Session Manager
- Acesso a instâncias via SSM, sem SSH nem portas abertas.
Conexão com o CloudShop
Fechar o acesso ao banco do CloudShop apenas ao SG da API.
Quiz da aula
1. Qual origem é correta na regra 5432 do SG do banco?
2. Qual a forma idiomática de liberar o banco só para a API?
3. NACL precisa liberar portas de retorno?
Minhas anotações
Salvo automaticamente neste navegador.