Pular para o conteúdo principal

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​

ConceitoDescrição
Chave PrivadaArquivo .pem que deve ser mantido em segredo
Chave PúblicaInstalada na instância
SSHProtocolo de conexão Linux (porta 22)
RDPProtocolo de conexão Windows (porta 3389)
chmod 400Permissões corretas para chave privada
Instance ConnectAlternativa sem gestão de chaves

Quiz de Validação​

  1. Qual a diferença entre chave pública e chave privada?
  2. Qual usuário usar para SSH no Amazon Linux?
  3. Qual comando define as permissões corretas em um arquivo .pem?
  4. Por que o SSH recusa uma chave com permissões "too open"?
  5. Como recuperar a senha de uma instância Windows?
  6. Qual alternativa permite conectar sem gerenciar chaves?

Próxima seção: Security Groups