ULC Lab · implementação reproduzível
Laboratório: Gerenciamento e Rotação Automatizada de Segredos com HashiCorp Vault e PostgreSQL
Você implementará um ambiente funcional com HashiCorp Vault gerenciando e rotacionando credenciais dinâmicas de um banco PostgreSQL. O laboratório pode ser concluído em cerca de 2 horas.

- Duração estimada
- 120 min
- Passos
- 12
- Validações
- 5
- Versões da documentação consultada
- HashiCorp Vault a versão estável atual · PostgreSQL a versão estável atual · psql (cliente PostgreSQL) a versão estável atual
Demonstrar, na prática, como proteger credenciais de banco de dados utilizando o HashiCorp Vault em modo dev, integrando-o a um PostgreSQL local. Você aprenderá a emitir, revogar e rotacionar segredos automaticamente, além de validar o acesso e entender pontos críticos de troubleshooting.
Topologia
Uma máquina virtual ou host físico executando três serviços: Vault (porta 8200), PostgreSQL (porta 5432) e um cliente de linha de comando. O Vault conecta-se localmente ao PostgreSQL para criar e gerenciar usuários dinâmicos. O usuário interage via CLI do Vault.
┌────────────┐ ┌──────────────┐
│ Cliente │──────▶│ Vault │
│ (CLI/API) │ │ (localhost) │
└────────────┘ │ 8200 │
│ │
▼ │
┌──────────────┐ │
│ PostgreSQL │◀───┘
│ (localhost) │
│ 5432 │
└──────────────┘Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| Máquina virtual ou host físico | 2 vCPUs, 2 GB RAM, 10 GB disco, portas 8200 e 5432 livres, Ubuntu 22.04 ou equivalente |
| HashiCorp Vault | MPL 2.0 · a versão estável atual |
| PostgreSQL | PostgreSQL License · a versão estável atual |
| psql (cliente PostgreSQL) | PostgreSQL License · a versão estável atual |
Roteiro
- Instalar o Vault
Você precisa do Vault instalado para gerenciar segredos. Use o repositório oficial para garantir a versão estável.
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg sudo apt-add-repository "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" sudo apt update && sudo apt install vaultO que você deve ver: Vault instalado e disponível no PATH. 'vault --version' retorna a versão.
- Instalar o PostgreSQL
O PostgreSQL será o banco de dados alvo para rotação de segredos. Instale a versão estável do repositório padrão.
sudo apt update && sudo apt install postgresql postgresql-contribO que você deve ver: Serviço 'postgresql' ativo. 'psql --version' retorna a versão.
- Configurar usuário administrador no PostgreSQL
O Vault precisa de um usuário com permissão para criar e revogar usuários. Crie um usuário 'vaultadmin' com senha forte.
sudo -u postgres psql -c "CREATE ROLE vaultadmin WITH LOGIN PASSWORD 'SenhaForte123' SUPERUSER;"O que você deve ver: CREATE ROLE
- Iniciar o Vault em modo dev
O modo dev é prático para laboratório, mas não use em produção. Ele roda em memória e facilita testes rápidos.
vault server -dev -dev-root-token-id=root & export VAULT_ADDR='http://127.0.0.1:8200'O que você deve ver: Vault server started! Root Token: root
- Exportar variável de ambiente do token
Facilita o uso do CLI sem passar token em cada comando.
export VAULT_TOKEN=rootO que você deve ver: Variável VAULT_TOKEN definida
- Habilitar o secrets engine de banco de dados
O Vault precisa do engine 'database' para gerenciar credenciais dinâmicas.
vault secrets enable databaseO que você deve ver: Success! Enabled the database secrets engine
- Configurar a conexão do Vault com o PostgreSQL
O Vault precisa saber como conectar ao PostgreSQL usando o usuário 'vaultadmin'.
vault write database/config/postgresql \ plugin_name=postgresql-database-plugin \ allowed_roles="readonly" \ connection_url="postgresql://vaultadmin:SenhaForte123@localhost:5432/postgres?sslmode=disable"O que você deve ver: Success! Data written to: database/config/postgresql
- Criar uma role dinâmica para usuários de leitura
Defina como o Vault criará e revogará usuários temporários no PostgreSQL.
vault write database/roles/readonly \ db_name=postgresql \ creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \ default_ttl="1h" \ max_ttl="24h"O que você deve ver: Success! Data written to: database/roles/readonly
- Gerar credencial dinâmica de leitura
Peça ao Vault para criar um usuário temporário no PostgreSQL.
vault read database/creds/readonlyO que você deve ver: Retorna username, password e lease_duration
- Testar acesso ao PostgreSQL usando a credencial dinâmica
Garanta que a credencial criada realmente acessa o banco.
psql -h localhost -U <username> -d postgres -WO que você deve ver: Acesso concedido com permissão de leitura
- Revogar manualmente a credencial dinâmica
Simule a rotação ou expiração manual revogando o lease.
vault lease revoke <lease_id>O que você deve ver: Lease revoked
- Verificar que o usuário foi removido do PostgreSQL
Confirme que o usuário dinâmico não existe mais.
sudo -u postgres psql -c "\du"O que você deve ver: Usuário dinâmico não listado
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Verificar se o Vault está rodando | vault status | Status: active |
| Verificar se o PostgreSQL aceita conexões | psql -h localhost -U vaultadmin -d postgres | Prompt do psql aberto |
| Emitir credencial dinâmica | vault read database/creds/readonly | Retorno de username e password temporários |
| Acessar PostgreSQL com credencial dinâmica | psql -h localhost -U <username> -d postgres -W | Acesso permitido |
| Revogar lease e tentar acessar novamente | psql -h localhost -U <username> -d postgres -W | Acesso negado após revogação |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| vault read database/creds/readonly retorna erro de conexão | Configuração incorreta da connection_url ou PostgreSQL não está aceitando conexões locais | Verifique se o PostgreSQL está rodando e se a connection_url está correta |
| psql não conecta com usuário dinâmico | Usuário expirado ou lease revogado | Gere uma nova credencial dinâmica e tente novamente |
| vault lease revoke retorna erro de lease não encontrado | Lease_id informado está incorreto ou já expirou | Liste leases ativos e confirme o lease_id |
| Vault não inicia na porta 8200 | Porta já em uso ou permissão insuficiente | Libere a porta ou altere a configuração de bind |
Segurança e hardening
- Nunca use modo dev do Vault em produção
- Use senhas fortes e únicas para o usuário administrador
- Restrinja o acesso de rede às portas 8200 e 5432 apenas para hosts autorizados
- Revogue credenciais dinâmicas imediatamente após o uso em ambientes sensíveis
- Audite logs de acesso ao Vault e ao PostgreSQL
Checklist final
Referências
- HashiCorp Vault - Database Secrets Engine · HashiCorp (developer.hashicorp.com)
- HashiCorp Vault CLI · HashiCorp (developer.hashicorp.com)
- Publicado
- 09/09/2026
- Última revisão
- 09/09/2026
- Versão do conteúdo
- 1.0
- Referências
- 2 oficiais
- Revisão técnica
- redação e revisão por IA, URLs conferidas na publicação
- Status
- Atual
