TERRAFORM SERIES: LAB … Working on AWS: (redes) VPCs e SECURITY-GROUPS
Aviso de SPOILER: Caso apresente dores de cabeça e uma forte sensação de Déjà Vu, durante a leitura deste POST, significa que és um veterano e portanto me acompanha há algum tempo … Quando o BLOG ainda era intitulado de automatesmachines.org … E com toda certeza, também é de seu conhecimento que fizemos uma série “introdutória” a nuvem da AWS. Pois bem, do contrário, ou na ausência desses sintomas, implica dizer que você é novo por aqui e sendo assim, uma visita ao presente link abaixo talvez não seja uma má ideia:
https://vicrlda.com.br/index.php/aws/
Recados dados, fique comigo para mais um artigo sobre esta incrível ferramenta chamada TERRAFORM ❤️
>_ VPC : ATRIBUINDO UMA REDE
Uma vez imerso na AWS, a nomenclatura correta para rede de computador é simplesmente VPC. E sim, aqueles mais adiantados no tema sabem muito bem que esse tópico resultaria perfeitamente numa série à parte. Na verdade, diversos serviços da AWS dariam excelentes séries aqui no BLOG. E sim, sim, tudo isso está em meus planos 🙃 Mas voltando, sempre que criamos uma máquina EC2 a mesma será relacionada automaticamente a uma regra de acesso, sendo esta última apresentada na forma de grupo, e que na prática trata-se de uma VPC. Ou rede de computador, como é o caso da AWS. A cada nova VPC que criamos, um grupo padrão já é vinculado a mesma nativamente, e ainda assim, bem antes a própria AWS disponibiliza uma rede padrão pré-configurada no momento em que iniciamos nossa conta na web console
Para consultar, modificar e até mesmo criar novas redes, acesse o menu correspondente via barra de pesquisas, digitando ‘vpc’ (sem as aspas), “favoritando-o” em seguida (para salvá-lo e fixá-lo na HOME), e por fim, clicando na opção VIRTUAL PRIVATE CLOUD > YOUR VPCs
localizada na barra lateral esquerda:

Ou se preferir, use a opção REDE E SEGURANÇA
no menu EC2 para instâncias:
PAINEL EC2 > REDE E SEGURANÇA > SECURITY GROUPS

Supondo que sejam máquinas para três desenvolvedores diferentes, a ideia é logicamente permitir o acesso SSH de cada um e garantir um nível mínimo de comunicação entre elas. Para isso precisamos recorrer a documentação oficial vista no próprio site Procure pelos provedores (em inglês, providers), depois AWS, em seguida recursos (eu sei, são muitos!), e finalmente VPC resources, na seção aws_security_group
O caminho percorrido encontra-se aqui Feito isso, abra sua IDE/editor com o código dos textos anteriores. Copie o exemplo da página e cole o mesmo no VSCode. Lembrando: você não irá apagar nada do fonte passado e sim acrescentar tais linhas ao final dele.
resource "aws_security_group" "allow_tls" {
name = "allow_tls"
description = "Allow TLS inbound traffic"
vpc_id = aws_vpc.main.id
ingress {
description = "TLS from VPC"
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = [aws_vpc.main.cidr_block]
ipv6_cidr_blocks = [aws_vpc.main.ipv6_cidr_block]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
ipv6_cidr_blocks = ["::/0"]
}
tags = {
Name = "allow_tls"
}
}
A seguir, editando e explicando parte por parte desta nova seção. Trechos destacados em negrito são as alterações propostas por mim:
resource "aws_security_group" "ssh-access" {
name = "ssh-access"
description = "Allow SSH inbound traffic"
Nada de extraordinário aqui, apenas nomeando o recurso (neste caso, grupo) de acesso-ssh
com uma breve descrição.
ingress {
description = "SSH from VPC"
from_port = 22
to_port = 22
protocol = "tcp"
Modificando a porta atual para 22 por se tratar de tráfego SSH que, assim como o TLS, também é um protocolo TCP, permanecendo esse último item inalterado.
cidr_blocks = ["187.19.208.26/32"]
Pausa para aquele momento “boas práticas de segurança” 😁 dado é informação, informação é poder, e poder é dinheiro, então nada mais justo do que restringir o acesso a essa máquina. Em outras palavras, a gestão aqui é muito importante pois o roubo, furto ou quebra do mesmo além de ocasionar perdas de capital, também gera ruídos na relação (empresa/fornecedor) <> (cliente/usuário), apresentando-se quase sempre na forma de perda de confiança. Defina aqui somente os IPs autorizados a acessar determinada máquina. Para descobrir qual é o seu, visite https://www.whatismyip.com/

Encerrando, agora identificamos todo esse bloco de configurações com a TAG acesso-ssh
tags = {
Name = "ssh-access"
Salve o conteúdo, dê o COMMIT no repositório, e vá para a console do VSCode

TERMINAL > NEW TERMINAL
Última volta, a poucos metros da bandeira final, comece a executar os comandos do TERRAFORM propriamente dito:
terraform plan
Aqui ele apenas mostrará as modificações propostas, sem aplicar nada no ambiente. Isso é ótimo, principalmente em meios tão críticos e sensíveis como é PRODUÇÃO, por exemplo.


terraform apply
Imediatamente após o plan
, mova-se para o apply

E veja a confirmação na web console:

[…] retira o grupo atual e acrescenta o novo especificado. Mas não é bem isso que queremos, pois a ideia continua sendo provisionar três máquinas diferentes para três desenvolvedores distintos, […]