# Como melhorar a administração e organização dos Grupos de Segurança da AWS com o VPC Prefix List

## Introdução

Quando comecei a usar mais a AWS, é comum criar cada vez mais grupos de segurança e com o tempo manter todos eles organizados acaba sendo tedioso, pois você observará que precisará atualizar com uma certa frequência cada grupo de segurança.

Para contextualizar melhor, imagine o seguinte cenário de exemplo:

* Uma equipe de desenvolvedores solicita para você a criação de um novo servidor web no Windows com IIS instalado, então você prontamente cria uma instância EC2 com um novo grupo de segurança chamado "`SG-web-app1`".
    
* Agora a mesma equipe de desenvolvedores solicita para você a criação de um outro servidor Windows com um novo serviço do Windows instalado, então você prontamente cria uma outra instância EC2 e prefere não utilizar o mesmo grupo de segurança, pois você é organizado e prefere criar um outro grupo de segurança com nome diferente que distingue melhor "`SG-services-app1`"
    
* Então em cada grupo de segurança você adiciona o IP de cada desenvolvedor para o protocolo RDP e permite que eles possam acessar remotamente cada instância, isso se pareceria por exemplo com:
    

| Nome | Protocolo | Porta | IP do Desenvolvedor |
| --- | --- | --- | --- |
| SG-web-app1 | RDP | 3389 | 1.2.3.4 |
| SG-web-app1 | RDP | 3389 | 5.6.7.8 |
| SG-services-app1 | RDP | 3389 | 1.2.3.4 |
| SG-services-app1 | RDP | 3389 | 5.6.7.8 |

Observe na tabela que você tem 2 IPs diferentes de 2 desenvolvedores diferentes em 2 grupos de seguranças diferentes e aí que todo o problema começa.

Cada desenvolvedor possui um IP dinâmico e não fixo, isso na prática significa que o IP que eles recebem do provedor de internet deles mudam frequentemente.

Então eles começam a enviar para você que perderam o acesso remoto, isso acontece porque o IP real e atual deles não é o mesmo que você liberou no grupo de segurança inicialmente.

Você então solicita o novo IP para eles e então atualiza cada grupo de segurança e o problema é resolvido.

Mas será que está resolvido mesmo? A resposta curta é sim. Mas comece a multiplicar essa situação para mais pessoas na equipe e para mais grupos de segurança e você passará muito tempo lembrando, organizando e atualizando esses grupos de segurança.

Se você está em uma situação semelhante, compartilho a solução que encontrei para reduzir essa complexidade usando o `VPC Prefix List`.

---

## VPC Prefix List

A lista de prefixo da AWS é um recurso que existe já algum tempo e existem 2 tipos:

1. **Lista de prefixos gerenciadas pela AWS:**
    
    Como o nome indica, essas listas são gerenciadas pela AWS e são usadas para manter um conjunto de intervalos de endereços IP para serviços da AWS como o `S3`, `DynamoDB` e `CloudFront`.
    
2. **Listas de prefixos gerenciadas pelo cliente:**
    
    São criadas e mantidas por qualquer pessoa que tenha acesso ao Console AWS, as APIs da AWS ou aos SDKs da AWS. É nisso que nos concentraremos.
    

A lista de prefixo gerenciados pelo cliente da AWS VPC é uma ótima ferramenta disponível, pois fornece a capacidade de rastrear e manter uma lista de valores de bloco CIDR, que podem então ser referenciados por outros componentes de rede da AWS em suas regras.

---

### Como criar um VPC Prefix List

1- Acesse a console `AWS` → `VPC` → `Managed Prefix Lists`

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1706278311599/46b05868-3688-41e0-9ceb-7a68a2a4b6f4.png align="center")

2- Clique em `Create Prefix List`

Para isso, atente-se as seguintes regras:

* Você deve escolher o tipo de família como IPv4 ou IPv6 e a quantidade máxima de IPs que poderá ter essa lista. **<mark>E esses valores não podem ser alterados depois</mark>**<mark>.</mark>
    
* Um **grupo de segurança** possui um **<mark>limite de 60 regras</mark>**
    
    * Cada entrada da sua lista consumirá uma regra do grupo de segurança
        
    * Por exemplo se sua lista de prefixo tiver 20 endereços IPs, isso consumirá 20 das 60 regras que o grupo de segurança pode ter
        
    * Então obviamente você não pode adicionar mais do que 60 IPs nessa lista, pois atingirá a cota limite do grupo de segurança e não dará certo
        
* Na prática isso significa, que ao adicionar no grupo de segurança uma lista de prefixo, mesmo que seja uma regra, na verdade a lista expandirá pela quantidade de IPs da lista e consumirá do seu limite no grupo de segurança
    
* A única exceção é que digamos que você tenha uma lista de prefixo IPv4 com 60 IPs e outra lista de prefixo IPv6 com outros 60 IPs, então você adiciona essas duas regras no grupo de segurança e irá ter então 120 IPs como total, isso iria funcionar porque a cota do grupo de segurança é imposta separadamente para IPv4 e IPv6
    
* O mesmo não se aplica por exemplo se você adicionar no grupo de segurança 2 listas de prefixos IPv4 com 60 IPs cada, isso daria um total de 120 IPs IPv4 e ultrapassaria a cota de 60 regras do grupo de segurança
    
* Para nosso exemplo, defini um limite de 20 entradas, isso dá uma margem para usar outras regras no grupo de segurança no futuro se for necessário
    
* E lembre-se de adicionar `/32` ao final do IP que algum desenvolvedor te passar, pois esse é o formato correto do CIDR aqui.
    

<div data-node-type="callout">
<div data-node-type="callout-emoji">ℹ</div>
<div data-node-type="callout-text">Então planeje bem e se atente a este detalhe do limite e cota no grupo de segurança</div>
</div>

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1706278632304/6b7d2fb9-90e5-46d8-a866-0cb579412436.png align="center")

---

### Como configurar o Grupo de Segurança

1- Uma vez criado, você verá ela juntamente com as listas de prefixos gerenciados pela AWS:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1712616331041/1cf73770-aa98-4aaa-a44a-bac78fa30870.png align="center")

2- Agora acesse o grupo de segurança e adicione a regra de entrada com o `ID` da lista de prefixo

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1706279972535/1aaf5a97-3f00-49fc-9ad3-37e0df786983.png align="center")

<div data-node-type="callout">
<div data-node-type="callout-emoji">☑</div>
<div data-node-type="callout-text">Pronto!</div>
</div>

---

Para manter ainda mais organizado, costumo criar o grupo de segurança com o nome `SG-<name>-team-rdp-<env>`, por exemplo `SG-simplescloud-team-rdp-qa` e sua regra de entrada ficaria parecido com a imagem acima.

Então o que está acontecendo na prática é que:

* As instâncias EC2 `web-app1` e `services-app1` do nosso exemplo, agora terão esse grupo de segurança adicional `SG-<name>-team-rdp-<env>` anexados nas instâncias e permitirá o acesso remoto para os IPs que serão consultados na lista de prefixo criada. Por exemplo a instância "`web-app1`" teria dois grupos de segurança anexados:
    

| Instância | Grupo de Segurança 1 | Grupo de Segurança 2 |
| --- | --- | --- |
| web-app1 | SG-http-https | SG-simplescloud-team-rdp-qa |
|  | Porta 80 e 443 | Porta 3389 |

* Desta forma, sua instância terá grupos de segurança dedicados pelos protocolos que as regras permitem, evitando aqueles grupos de segurança "`launch-wizard`" que possui todas regras misturadas de `HTTP`, `HTTPS`, `RDP`, `MSSQL`, etc. Facilitando assim a administração a longo prazo
    
* Desta forma ainda, os desenvolvedores ainda sim precisarão fornecer para você seus respectivos IPs dinâmicos atualizados, a grande diferença agora é que você não precisará mais entrar em cada grupo de segurança e ir atualizando, atualizará apenas a lista de prefixo em um único lugar e isso será replicado para todos os grupos de segurança que fizer referência a ela
    
* Diminuindo muito então a sobrecarga de administração e organização dos grupos de segurança.
    

---

Se ainda não estiver convencido dos benefícios, passamos por mais um exemplo:

Imagine que você tenha os IPs repetidos nos grupos de segurança `X`, `Y` e `Z`:

![](https://miro.medium.com/v2/resize:fit:700/0*Wd1hR3VtsdkyCCvG.png align="left")

Aplicando essa solução, isso poderia ser modificado por:

![](https://miro.medium.com/v2/resize:fit:700/0*nUIIVo1SWt-4joPr.png align="left")

Observe então que não será mais necessário entrar em cada grupo de segurança para atualizar, uma vez que você atualizar a lista de prefixo centralmente, isso será aplicado automaticamente para todos os grupos de segurança que fazem referência para essa lista de prefixo em suas regras.

---

## Conclusão

Administrar e organizar os grupos de segurança da AWS é uma tarefa importante relacionada a segurança, porém ela pode ser tediosa e trabalhosa ao longo do tempo. Seu tempo é valioso demais para ficar perdendo tempo com esse tipo de tarefa, então compartilhei uma solução com `VPC Prefix List` para reduzir drasticamente as atualizações diretamente nos grupos de segurança e então manter as coisas organizadas com o menor esforço possível.

<div data-node-type="callout">
<div data-node-type="callout-emoji">✅</div>
<div data-node-type="callout-text">Espero que essas informações tenham sido úteis para você!</div>
</div>
