Pares de Chaves e Autenticação
Como Acessar uma Instância EC2?
Para se conectar a uma instância EC2, você precisa de um mecanismo de autenticação. A AWS utiliza pares de chaves SSH para Linux e senhas para Windows.
┌─────────────────────────────────────────────────────────────┐
│ AUTENTICAÇÃO EC2 │
├─────────────────────────────────────────────────────────────┤
│ │
│ LINUX WINDOWS │
│ ───── ─────── │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ Chave SSH│ │ Senha │ │
│ │ (RSA/ED) │ │ │ │
│ └────┬─────┘ └────┬─────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ │
│ │ SSH │ │ RDP │ │
│ │ Porta 22 │ │ Porta 3389│ │
│ └────┬─────┘ └────┬─────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────────┐ │
│ │ Instância EC2 │ │
│ └──────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Pares de Chaves SSH (Linux)
O que é um Par de Chaves?
Um par de chaves é composto por duas partes:
┌─────────────────────────────────────────────────────────────┐
│ PAR DE CHAVES SSH │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ CHAVE PRIVADA │ │
│ │ (minha-chave.pem) │ │
│ │ │ │
│ │ • Arquivo que VOCÊ mantém no seu computador │ │
│ │ • NUNCA compartilhe ou publique! │ │
│ │ • Serve para provar sua identidade │ │
│ │ • Se perder = sem acesso à instância │ │
│ │ │ │
│ │ Formato: arquivo .pem (Linux/Mac) ou .ppk (PuTTY) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ CHAVE PÚBLICA │ │
│ │ (instalada na instância) │ │
│ │ │ │
│ │ • Instalada automaticamente pela AWS ao iniciar │ │
│ │ • Armazenada em ~/.ssh/authorized_keys │ │
│ │ • Pode ser compartilhada sem risco │ │
│ │ • Permite verificar a chave privada │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 🔐 Princípio: O que é criptografado com a pública só │
│ pode ser descriptografado com a privada correspondente │
│ │
└─────────────────────────────────────────────────────────────┘
Analogia: Cadeado e Chave
┌─────────────────────────────────────────────────────────────┐
│ ANALOGIA: CADEADO E CHAVE │
├─────────────────────────────────────────────────────────────┤
│ │
│ CHAVE PÚBLICA = CADEADO ABERTO │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 🔓 Você pode dar cadeados abertos │ │
│ │ para qualquer pessoa. Elas podem fechar │ │
│ │ caixas com eles, mas não abrir. │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ CHAVE PRIVADA = CHAVE ÚNICA DO CADEADO │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 🔑 Só VOCÊ tem a chave que abre │ │
│ │ esses cadeados. Se você perder, │ │
│ │ ninguém pode abrir as caixas. │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ APLICAÇÃO: │
│ • Instância EC2 = Caixa fechada com seu cadeado │
│ • Conexão SSH = Usar sua chave para entrar │
│ │
└─────────────────────────────────────────────────────────────┘
Criar um Par de Chaves
Via Console AWS
1. EC2 → Network & Security → Key Pairs
2. Create key pair
3. Nome: "minha-chave-ec2"
4. Tipo: RSA (ou ED25519)
5. Formato: .pem (Linux/Mac) ou .ppk (PuTTY/Windows)
6. Create key pair
7. ⬇️ O arquivo .pem é baixado automaticamente
8. ⚠️ GUARDE-O COM SEGURANÇA! A AWS não armazena esse arquivo!
Via AWS CLI
# Criar um par de chaves
aws ec2 create-key-pair \
--key-name minha-chave-ec2 \
--query 'KeyMaterial' \
--output text > minha-chave-ec2.pem
# Definir permissões (Linux/Mac)
chmod 400 minha-chave-ec2.pem
Conectar via SSH
Linux / macOS
# Sintaxe básica
ssh -i /caminho/para/chave.pem usuario@ip-publico
# Exemplo concreto
ssh -i ~/Downloads/minha-chave-ec2.pem ec2-user@52.1.2.3
# Usuários padrão conforme a AMI:
# Amazon Linux, RHEL : ec2-user
# Ubuntu : ubuntu
# Debian : admin ou debian
# CentOS : centos ou ec2-user
# SUSE : ec2-user ou root
Windows com PuTTY
1. Baixar PuTTY e PuTTYgen
2. Converter .pem em .ppk:
• Abrir PuTTYgen
• Load → Selecionar o .pem
• Save private key → minha-chave.ppk
3. Conectar com PuTTY:
• Host Name: ec2-user@52.1.2.3
• Connection → SSH → Auth → Browse → minha-chave.ppk
• Open
Windows com OpenSSH (Windows 10+)
# Windows 10/11 já possui SSH integrado
ssh -i C:\Users\meu-usuario\minha-chave-ec2.pem ec2-user@52.1.2.3
Erros Comuns
Erro: "Permission denied"
┌─────────────────────────────────────────────────────────────┐
│ ERRO: PERMISSION DENIED │
├─────────────────────────────────────────────────────────────┤
│ │
│ Mensagem: │
│ Permission denied (publickey,gssapi-keyex,gssapi-with-mic)│
│ │
│ Possíveis causas: │
│ │
│ 1. Chave errada │
│ → Verifique se está usando o par de chaves correto │
│ │
│ 2. Usuário incorreto │
│ → ec2-user para Amazon Linux, ubuntu para Ubuntu │
│ │
│ 3. Security Group │
│ → Porta 22 fechada ou IP de origem incorreto │
│ │
│ 4. Instância ainda não pronta │
│ → Aguarde os status checks passarem │
│ │
└─────────────────────────────────────────────────────────────┘
Erro: "Permissions too open"
┌─────────────────────────────────────────────────────────────┐
│ ERRO: PERMISSIONS TOO OPEN │
├─────────────────────────────────────────────────────────────┤
│ │
│ Mensagem: │
│ WARNING: UNPROTECTED PRIVATE KEY FILE! │
│ Permissions 0644 for 'minha-chave.pem' are too open. │
│ │
│ Solução (Linux/Mac): │
│ chmod 400 minha-chave.pem │
│ │
│ Explicação: │
│ • 400 = somente leitura para o proprietário │
│ • SSH recusa chaves legíveis por outros │
│ • Proteção contra roubo de chave │
│ │
└─────────────────────────────────────────────────────────────┘
Erro: "Connection timeout"
┌─────────────────────────────────────────────────────────────┐
│ ERRO: CONNECTION TIMEOUT │
├─────────────────────────────────────────────────────────────┤
│ │
│ Possíveis causas: │
│ │
│ 1. Security Group │
│ → Porta 22 não aberta │
│ → Seu IP não está autorizado │
│ │
│ 2. Sem IP público │
│ → Instância em subnet privada │
│ → Elastic IP não associado │
│ │
│ 3. NACL bloqueando │
│ → Verifique as regras de rede do subnet │
│ │
│ 4. Instância não está running │
│ → Verifique o estado da instância │
│ │
└─────────────────────────────────────────────────────────────┘
Autenticação Windows (RDP)
Recuperar a Senha
┌─────────────────────────────────────────────────────────────┐
│ CONEXÃO WINDOWS - RDP │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. Aguarde 4+ minutos após o lançamento │
│ (O Windows precisa gerar a senha) │
│ │
│ 2. EC2 → Instances → Selecione a instância │
│ │
│ 3. Actions → Security → Get Windows password │
│ │
│ 4. Faça upload do seu arquivo .pem (chave privada) │
│ │
│ 5. Clique em "Decrypt Password" │
│ │
│ 6. Copie a senha exibida │
│ │
│ 7. Conecte-se com Remote Desktop: │
│ • Endereço: IP público da instância │
│ • Usuário: Administrator │
│ • Senha: a senha descriptografada │
│ │
└─────────────────────────────────────────────────────────────┘
Gerenciamento de Chaves
Boas Práticas
┌─────────────────────────────────────────────────────────────┐
│ BOAS PRÁTICAS - CHAVES SSH │
├─────────────────────────────────────────────────────────────┤
│ │
│ ✅ FAÇA: │
│ │
│ • Use uma chave diferente por ambiente │
│ - chave-dev.pem │
│ - chave-staging.pem │
│ - chave-prod.pem │
│ │
│ • Armazene as chaves em local seguro │
│ - Gerenciador de senhas (1Password, etc.) │
│ - Cofre corporativo (Vault) │
│ │
│ • Defina as permissões corretas │
│ - chmod 400 nos arquivos .pem │
│ │
│ • Use chaves ED25519 (mais seguro que RSA) │
│ │
│ ❌ EVITE: │
│ │
│ • Compartilhar chaves por email ou Slack │
│ • Comitar chaves no Git │
│ • Usar a mesma chave para tudo │
│ • Deixar chaves não utilizadas │
│ │
└─────────────────────────────────────────────────────────────┘
Alternativa: EC2 Instance Connect
A AWS oferece uma alternativa às chaves SSH: EC2 Instance Connect
┌─────────────────────────────────────────────────────────────┐
│ EC2 INSTANCE CONNECT │
├─────────────────────────────────────────────────────────────┤
│ │
│ Conexão SSH pela console AWS sem gerenciar chaves │
│ │
│ Como usar: │
│ 1. EC2 → Instances → Selecione a instância │
│ 2. Connect → EC2 Instance Connect │
│ 3. Connect │
│ 4. Um terminal abre no navegador! │
│ │
│ Vantagens: │
│ • Não precisa gerenciar chave │
│ • Acesso de qualquer lugar │
│ • Rastreabilidade via CloudTrail │
│ │
│ Desvantagens: │
│ • Necessita acesso de rede à instância │
│ • Não permite transferência de arquivos (scp) │
│ • Não é ideal para automação │
│ │
└─────────────────────────────────────────────────────────────┘
Alternativa: AWS Systems Manager Session Manager
┌─────────────────────────────────────────────────────────────┐
│ SESSION MANAGER │
├─────────────────────────────────────────────────────────────┤
│ │
│ Conexão SSH sem porta 22 aberta! │
│ │
│ Como funciona: │
│ • Agente SSM instalado na instância │
│ • Conexão via Console AWS ou CLI │
│ • Passa pelas APIs da AWS, não por SSH direto │
│ │
│ Vantagens: │
│ • Não precisa abrir a porta 22 │
│ • Não precisa gerenciar chave SSH │
│ • Logs de todas as sessões │
│ • Acesso a instâncias privadas │
│ │
│ aws ssm start-session --target i-0123456789abcdef0 │
│ │
└─────────────────────────────────────────────────────────────┘
Resumo
| Conceito | Descrição |
|---|---|
| Chave Privada | Arquivo .pem que deve ser mantido em segredo |
| Chave Pública | Instalada na instância |
| SSH | Protocolo de conexão Linux (porta 22) |
| RDP | Protocolo de conexão Windows (porta 3389) |
| chmod 400 | Permissões corretas para chave privada |
| Instance Connect | Alternativa sem gestão de chaves |
Quiz de Validação
- Qual a diferença entre chave pública e chave privada?
- Qual usuário usar para SSH no Amazon Linux?
- Qual comando define as permissões corretas em um arquivo .pem?
- Por que o SSH recusa uma chave com permissões "too open"?
- Como recuperar a senha de uma instância Windows?
- Qual alternativa permite conectar sem gerenciar chaves?
Próxima seção: Security Groups