<h2>VPC: Fundamentos e Arquitetura</h2>
<p>Uma Virtual Private Cloud (VPC) é sua rede privada isolada na AWS, funcionando como um data center virtual. Cada VPC possui um bloco CIDR (ex: 10.0.0.0/16) que define o intervalo de endereços IP disponíveis. Ao criar uma VPC, você controla completamente a segurança, roteamento e conectividade dos recursos — máquinas EC2, bancos de dados RDS e load balancers vivem dentro dessa rede isolada.</p>
<p>A estrutura básica é simples: você cria uma VPC com um CIDR block, depois divide em <strong>subnets</strong> (subredes) menores, configura como o tráfego flui entre elas com <strong>route tables</strong>, e conecta à internet através do <strong>Internet Gateway</strong>. Vamos explorar cada componente com profundidade.</p>
<h2>Subnets: Segmentação e Disponibilidade</h2>
<h3>O que são Subnets e por que existem?</h3>
<p>Subnets são divisões de uma VPC vinculadas a uma Availability Zone específica (us-east-1a, us-east-1b, etc). Ao criar subnets em múltiplas AZs, você garante alta disponibilidade — se um data center falhar, seus recursos em outras AZs continuam rodando. Uma subnet 10.0.1.0/24 (na VPC 10.0.0.0/16) pode ter até 251 IPs usáveis (256 menos 5 reservados pela AWS).</p>
<p>Subnets públicas rotam tráfego para a internet através de um Internet Gateway; subnets privadas não têm essa rota direta. Essa separação é fundamental para segurança — bancos de dados podem ficar em subnets privadas, inacessíveis da internet pública.</p>
<pre><code class="language-hcl"># Terraform: Criando uma VPC com duas subnets em AZs diferentes
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
enable_dns_hostnames = true
enable_dns_support = true
tags = {
Name = "production-vpc"
}
}
resource "aws_subnet" "public_1" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
availability_zone = "us-east-1a"
map_public_ip_on_launch = true
tags = {
Name = "public-subnet-1a"
}
}
resource "aws_subnet" "public_2" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.2.0/24"
availability_zone = "us-east-1b"
map_public_ip_on_launch = true
tags = {
Name = "public-subnet-1b"
}
}
resource "aws_subnet" "private_1" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.10.0/24"
availability_zone = "us-east-1a"
tags = {
Name = "private-subnet-1a"
}
}</code></pre>
<h3>Planejamento de CIDR Blocks</h3>
<p>Nunca escolha arbitrariamente seus ranges. Use ferramentas como calculadoras CIDR e documente seu plano. Uma subnet /24 acomoda ~250 hosts; uma /26 acomoda ~60. Para produção com múltiplas aplicações, considere: públicas /24 e privadas /23 para crescimento. Evite sobreposições ao conectar VPCs via VPC Peering.</p>
<h2>Route Tables e Roteamento Avançado</h2>
<h3>Route Tables: Definindo o Fluxo de Tráfego</h3>
<p>Uma route table é um conjunto de regras (rotas) que determinam para onde o tráfego de uma subnet é enviado. Toda subnet deve estar associada a uma route table — se não associar explicitamente, usa-se a route table padrão da VPC (raramente adequada para produção). Cada rota especifica um destino (CIDR block de destino) e um alvo (IGW, NAT Gateway, outra VPC, etc).</p>
<p>A regra <strong>mais específica</strong> sempre vence. Se sua route table tem 10.0.0.0/16 → local e 10.0.1.0/24 → NAT Gateway, um pacote para 10.0.1.5 segue para o NAT Gateway por ser mais específico (/24 vs /16). Isso é crítico para entender comportamentos inesperados.</p>
<pre><code class="language-hcl"># Terraform: Route table pública com Internet Gateway
resource "aws_internet_gateway" "main" {
vpc_id = aws_vpc.main.id
tags = {
Name = "production-igw"
}
}
resource "aws_route_table" "public" {
vpc_id = aws_vpc.main.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.main.id
}
route {
cidr_block = "10.0.0.0/16"
gateway_id = "local"
}
tags = {
Name = "public-rt"
}
}
resource "aws_route_table_association" "public_1" {
subnet_id = aws_subnet.public_1.id
route_table_id = aws_route_table.public.id
}
Route table privada com NAT Gateway para saída controlada
resource "aws_eip" "nat" {
domain = "vpc"
tags = {
Name = "nat-eip"
}
}
resource "aws_nat_gateway" "main" {
allocation_id = aws_eip.nat.id
subnet_id = aws_subnet.public_1.id
tags = {
Name = "production-nat"
}
depends_on = [aws_internet_gateway.main]
}
resource "aws_route_table" "private" {
vpc_id = aws_vpc.main.id
route {
cidr_block = "0.0.0.0/0"
nat_gateway_id = aws_nat_gateway.main.id
}
tags = {
Name = "private-rt"
}
}
resource "aws_route_table_association" "private_1" {
subnet_id = aws_subnet.private_1.id
route_table_id = aws_route_table.private.id
}</code></pre>
<h3>Roteamento Avançado: Transit Gateway e Rotas Estáticas</h3>
<p>Para conectar múltiplas VPCs e redes on-premises, use <strong>AWS Transit Gateway</strong> — um hub central que elimina a complexidade de mesh VPC Peering. Defina rotas estáticas apontando para o TGW para tráfego inter-VPC. Para ambientes híbridos, use <strong>VPN connections</strong> ou <strong>Direct Connect</strong> com rotas específicas na tabela privada.</p>
<h2>Internet Gateway: Conectando à Internet Pública</h2>
<h3>Conceito e Configuração</h3>
<p>Um Internet Gateway (IGW) é um componente VPC que permite comunicação bidirecional entre instâncias e a internet. Diferente de um NAT Gateway (que mascara endereços privados), o IGW permite que instâncias com IPs Elásticos sejam acessadas diretamente de fora. Toda instância em subnet pública com IP público e rota default para o IGW está internamente exposta.</p>
<p>O IGW requer dois passos: criar o gateway e associá-lo à VPC, depois adicionar uma rota 0.0.0.0/0 → IGW na route table da subnet pública. Sem essa rota, o IGW existe mas não é utilizado. Security Groups e Network ACLs adicionam camadas de proteção após o roteamento.</p>
<h3>Segurança com Internet Gateway</h3>
<p>Nunca coloque bancos de dados diretos em subnets públicas com IGW. Use o padrão camadas: subnet pública com ALB/NAT, subnet privada com aplicação, subnet privada com banco. Security Groups controlam tráfego por porta (stateful), enquanto Network ACLs oferecem filtragem em nível de subnet (stateless). Para máxima segurança, use VPC endpoints para acessar serviços AWS sem passar pela internet (S3, DynamoDB, Secrets Manager via endpoints privados).</p>
<pre><code class="language-hcl"># Security Group para ALB em subnet pública
resource "aws_security_group" "alb_sg" {
name = "alb-sg"
vpc_id = aws_vpc.main.id
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "alb-sg"
}
}
Security Group para aplicação em subnet privada
resource "aws_security_group" "app_sg" {
name = "app-sg"
vpc_id = aws_vpc.main.id
ingress {
from_port = 8080
to_port = 8080
protocol = "tcp"
security_groups = [aws_security_group.alb_sg.id]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "app-sg"
}
}</code></pre>
<h2>Conclusão</h2>
<p>Você agora compreende que <strong>VPC é sua fronteira de segurança</strong>: subnets oferecem isolamento por AZ, route tables direcionam tráfego com precisão CIDR, e Internet Gateway conecta controladamente à internet. O padrão vencedor é subnets públicas para entrada (ALB/NAT), privadas para lógica (aplicações) e privadas para persistência (bancos). Pratique dividindo blocos CIDR, mapeie dependências de tráfego antes de codificar, e sempre use Infrastructure as Code (Terraform/CloudFormation) para reprodutibilidade.</p>
<h2>Referências</h2>
<ul>
<li><a href="https://docs.aws.amazon.com/vpc/" target="_blank" rel="noopener noreferrer">AWS VPC Documentation</a></li>
<li><a href="https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/welcome.html" target="_blank" rel="noopener noreferrer">AWS Well-Architected Framework - Security Pillar</a></li>
<li><a href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc" target="_blank" rel="noopener noreferrer">Terraform AWS Provider - VPC Resources</a></li>
<li><a href="https://acloudguru.com" target="_blank" rel="noopener noreferrer">A Cloud Guru - Advanced Networking in AWS</a></li>
<li><a href="https://cloudexpert.com/vpc-design" target="_blank" rel="noopener noreferrer">CloudExpert - VPC Design Patterns</a></li>
</ul>