Descrição do Problema
Os grupos de segurança da AWS têm como objetivo filtrar o tráfego de entrada/saída para uma instância EC2. As práticas recomendadas de segurança exigem garantir que os grupos de segurança da AWS restrinjam todo o tráfego público e não permita acesso irrestrito (endereço IP com sufixo /0) para reduzir a possibilidade de ataques cibernéticos, violações e riscos de perda de dados.
Nossas recomendações ajudarão você a encontrar todos os grupos de segurança com acesso irrestrito (ou seja, 0.0.0.0/0) às suas instâncias EC2 usando AWS CLI. Como resultado você obterá uma lista de grupos de segurança com regras que permitem acesso irrestrito, que ajuda você a tomar ações essenciais do ponto de vista da segurança e permitir autorização somente de hosts conhecidos.
Recomendações
Passo 1
Se quisermos encontrar todos os SGs, devemos analisar todas as regiões disponíveis.
Comando AWS CLI:
aws ec2 describe-regions --query "Regiões[].NomeDaRegião" --texto de saída
Mais informações podem ser encontradas aqui:
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-regions.html
Passo 2
Para cada região disponível, devemos analisar todas as portas de destino (22 e 3389 no nosso caso) e encontrar todos os grupos de segurança com essas portas que são permitidas a partir de endereços zero cidr, ou seja, 0.0.0.0/0 para ipv4 e ::/0 para ipv6
Comando AWS CLI:
aws ec2 describe-security-groups --region "$region" --filters Nome=ip-permission.from-port,Values=$port Nome=ip-permission.to-port,Values=$port --query 'SecurityGroups[?((IpPermissions.IpRanges.CidrIp == "0.0.0.0/0") || (IpPermissions.Ipv6Ranges.CidrIpv6 == "::/0"))].[GroupId]' --texto de saída
Mais informações podem ser encontradas aqui:
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-security-groups.html
Otimização de custo de nuvem gratuita. Vida
Nota 1
Regras de entrada para grupos de segurança permitem especificar intervalos de portas como [20, 25]. Infelizmente, o AWS cli não permite comparação para filtragem do lado do servidor. Neste caso, considere usar algo mais poderoso do que o AWS cli.
Nota 2
O AWS cli tem um mecanismo de paginação para grandes quantidades de dados na saída. Se você tiver muitos SGs em uma região, o script fornecido processará apenas a primeira página. Considere usar algo mais poderoso do que o AWS cli.
Como resultado, um comando de linha:
para região em $(aws ec2 describe-regions --query "Regions[].RegionName" --texto de saída); faça para porta em 22 3389; faça para groupId em $(aws ec2 describe-security-groups --region "$region" --filters Nome=ip-permission.from-port,Values=$port Nome=ip-permission.to-port,Values=$port --query 'SecurityGroups[?((IpPermissions.IpRanges.CidrIp == "0.0.0.0/0") || (IpPermissions.Ipv6Ranges.CidrIpv6 == "::/0"))].[GroupId]' --texto de saída); faça eco "Região: $region Porta: $port GroupId: $groupId"; feito; feito; feito
Exemplo de saída:
… Região: ap-south-1 Porta: 3389 GroupId: sg-040f94474611b14fb Região: ap-south-1 Porta: 3389 GroupId: sg-0a79acb4f95e1ce90 Região: eu-west-3 Porta: 22 GroupId: sg-0e88381b1b9c5c6b4 …
👆🏻 A melhor prática de segurança é remover as senhas do AWS Management Console quando os usuários saem da sua organização, não precisam mais delas ou apenas usam chaves de acesso (uma combinação de um ID de chave de acesso e uma chave de acesso secreta) para acessar a conta da AWS.
✔️ Encontre a melhor maneira de encontrar usuários inativos do IAM com acesso ao console de gerenciamento da AWS para evitar problemas de segurança → https://hystax.com/the-best-way-to-find-inactive-iam-users-with-aws-management-console-access-to-avoid-security-issues