Se você trabalha com mais de uma conta AWS — e se é SRE ou DevOps, provavelmente trabalha com várias — já deve ter sentido o medo de rodar um terraform destroy na conta errada. O aws-vault resolve esse problema e mais alguns.
O problema
O jeito padrão de configurar credenciais AWS é jogar access keys no ~/.aws/credentials. Funciona, mas tem problemas sérios:
- As chaves ficam em texto puro no disco
- É fácil confundir qual perfil está ativo
- Não há rotação automática
- Se alguém acessa seu home, tem suas chaves
Quando você gerencia 5, 10, 20 contas de clientes diferentes, isso vira uma bomba-relógio.
O que é o aws-vault
O aws-vault é uma ferramenta que armazena suas credenciais AWS no keychain do sistema operacional (ou em backends criptografados) e gera credenciais temporárias via STS quando você precisa.
Na prática:
- Suas access keys nunca ficam em texto puro
- Cada sessão usa credenciais temporárias com expiração
- Você assume roles em contas diferentes de forma simples
- Funciona com SSO, MFA e assume role
Instalação
Linux
| |
macOS
| |
Verificar
| |
Configuração Inicial
Passo 1: Escolher o backend
No Linux sem interface gráfica (servidores, Termux, WSL), use o backend de arquivo criptografado:
| |
Adicione ao seu ~/.bashrc ou ~/.zshrc para persistir:
| |
Na primeira vez que adicionar credenciais, ele vai pedir uma senha para criptografar o vault.
Passo 2: Adicionar credenciais
| |
Ele vai pedir a Access Key ID e Secret Access Key. As chaves são armazenadas criptografadas — não no ~/.aws/credentials.
Passo 3: Configurar perfis com assume role
Aqui é onde a mágica acontece. No ~/.aws/config, você define perfis que assumem roles em outras contas:
| |
Uso no Dia a Dia
Executar comandos em uma conta específica
| |
O aws-vault exec faz o assume role, gera credenciais temporárias e injeta como variáveis de ambiente no subprocesso. Quando o comando termina, as credenciais somem.
Abrir uma shell inteira na conta
| |
Isso abre um subshell com as credenciais da conta. Tudo que você rodar ali dentro (aws cli, terraform, ansible) vai usar aquela conta. Para sair, exit.
Abrir o console AWS no navegador
| |
Abre o console web da AWS já autenticado na conta certa. Muito útil para verificações rápidas.
Listar perfis e sessões ativas
| |
Saída:
Com MFA
Se a conta exige MFA (e deveria), o aws-vault pede o token automaticamente:
| |
Ele cacheia a sessão MFA, então você não precisa digitar o token a cada comando dentro da janela de validade (geralmente 1 hora).
Com AWS SSO (Identity Center)
Se sua organização usa AWS SSO:
| |
| |
Dicas Práticas
1. Alias para contas frequentes
No ~/.bashrc:
| |
Uso:
| |
2. Duração da sessão
Por padrão, as credenciais temporárias duram 1 hora. Para ajustar:
| |
O máximo depende da configuração da role na conta destino (até 12 horas).
3. Usar com Terraform
| |
Ou abra uma shell e trabalhe normalmente:
| |
4. Usar com scripts
| |
5. Prompt do terminal com conta ativa
Adicione ao ~/.bashrc para saber em qual conta você está:
| |
Resultado:
Isso evita aquele momento de pânico: “em qual conta eu estou mesmo?”
O que NÃO fazer
❌ Nunca exporte credenciais permanentes
| |
Se você precisa de variáveis de ambiente, use:
| |
❌ Nunca commite o ~/.aws/credentials
Adicione ao .gitignore global:
| |
❌ Nunca use a mesma access key para tudo
Uma key por finalidade. Se uma vazar, você revoga só aquela.
Troubleshooting
“NoCredentialProviders”
Verifique se o source_profile no ~/.aws/config bate com o nome usado no aws-vault add.
“AccessDenied ao assumir role”
Verifique:
- A role existe na conta destino
- A trust policy da role permite seu usuário
- O
role_arnestá correto no config
“Token expirado”
Saia do subshell e entre novamente:
| |
Comparação: com e sem aws-vault
| Aspecto | Sem aws-vault | Com aws-vault |
|---|---|---|
| Armazenamento | Texto puro em ~/.aws/credentials | Criptografado no keychain/vault |
| Credenciais | Permanentes | Temporárias (STS) |
| Troca de conta | Editar variáveis ou –profile | aws-vault exec perfil |
| MFA | Manual a cada chamada | Cacheado por sessão |
| Risco de vazamento | Alto | Baixo |
| Auditoria | Difícil (mesma key sempre) | Fácil (sessões distintas no CloudTrail) |
Conclusão
O aws-vault é uma daquelas ferramentas que depois que você começa a usar, não entende como vivia sem. O investimento de configuração é de 15 minutos e o retorno é:
- Segurança: credenciais nunca ficam expostas em texto puro
- Praticidade: trocar entre contas é um comando
- Auditoria: cada sessão aparece separada no CloudTrail
- Tranquilidade: saber exatamente em qual conta você está antes de rodar qualquer coisa
Se você gerencia múltiplas contas AWS, pare de usar ~/.aws/credentials em texto puro. Seu eu do futuro agradece.
Links úteis: