Bem-vindo à aula sobre Segurança de Secrets Management. Em aplicações modernas, segredos como senhas, chaves de API, tokens e certificados são essenciais para autenticação e comunicação entre serviços. No entanto, o gerenciamento inadequado desses segredos é uma das principais causas de violações de segurança. Nesta aula, você aprenderá os conceitos fundamentais e as melhores práticas para proteger segredos, utilizando ferramentas como Vaults, políticas de acesso e auditoria.

Vamos explorar como centralizar o armazenamento de segredos, automatizar a rotação para reduzir o risco de exposição, controlar quem pode acessar o quê e manter trilhas de auditoria para monitorar e responder a incidentes. Ao final, você terá uma visão clara de como implementar um sistema robusto de gerenciamento de segredos em sua organização.

Vaults

Um Vault (cofre) é um sistema centralizado para armazenar e gerenciar segredos de forma segura. Ele atua como um repositório criptografado, onde os segredos são protegidos em repouso e em trânsito. Diferente de armazenar segredos em arquivos de configuração ou variáveis de ambiente, um Vault oferece controle de acesso granular, rotação automática e auditoria. Ferramentas populares incluem HashiCorp Vault, AWS Secrets Manager, Azure Key Vault e Google Secret Manager.

O uso de um Vault elimina a necessidade de hardcodar segredos no código-fonte, reduzindo o risco de vazamento em repositórios. Além disso, ele permite a revogação imediata de segredos comprometidos e a emissão de segredos dinâmicos, como credenciais de banco de dados geradas sob demanda. A implementação de um Vault envolve a configuração de um backend de armazenamento, a definição de políticas de acesso e a integração com aplicações através de APIs ou SDKs.

Exemplo de configuração de um segredo no HashiCorp Vault usando a CLI:

# Iniciar o Vault em modo de desenvolvimento (não recomendado para produção)
vault server -dev

# Em outro terminal, configurar o endereço do Vault
export VAULT_ADDR='http://127.0.0.1:8200'
export VAULT_TOKEN='root-token'

# Armazenar um segredo
vault kv put secret/minha-aplicacao username=admin password=senha-secreta

# Ler o segredo
vault kv get secret/minha-aplicacao

No exemplo acima, o segredo é armazenado no caminho 'secret/minha-aplicacao' e pode ser acessado por aplicações autorizadas. Em ambientes de produção, o Vault deve ser configurado com TLS, um backend de armazenamento persistente e múltiplas réplicas para alta disponibilidade.

Rotation

Rotação de segredos é o processo de substituir periodicamente um segredo por um novo, invalidando o anterior. Isso reduz a janela de exposição caso um segredo vaze e é uma prática recomendada por normas como PCI-DSS e ISO 27001. A rotação pode ser manual ou automatizada, e deve ser planejada para minimizar interrupções nos serviços.

Ferramentas de Vault oferecem funcionalidades de rotação automática para vários tipos de segredos, como credenciais de banco de dados, tokens de API e certificados. Por exemplo, o Vault pode gerar credenciais dinâmicas para bancos de dados, que são criadas com tempo de vida limitado e rotacionadas automaticamente. Isso elimina a necessidade de senhas estáticas e melhora a segurança.

Exemplo de rotação de senha de banco de dados usando o Vault:

# Habilitar o banco de dados no Vault
vault secrets enable database

# Configurar a conexão com o banco
vault write database/config/minha-db \
    plugin_name=postgresql-database-plugin \
    allowed_roles="minha-rota" \
    connection_url="postgresql://{{username}}:{{password}}@localhost:5432/mydb" \
    username="vault" \
    password="senha-do-vault"

# Criar uma role que gera credenciais dinâmicas
vault write database/roles/minha-rota \
    db_name=minha-db \
    creation_statements="CREATE USER \"{{name}}\" WITH PASSWORD '{{password}}' VALID UNTIL '{{expiration}}';" \
    default_ttl="1h" \
    max_ttl="24h"

# Gerar credenciais dinâmicas (rotacionadas automaticamente)
vault read database/creds/minha-rota

Nesse exemplo, cada vez que uma aplicação solicita credenciais, o Vault cria um usuário temporário com uma senha aleatória, válida por 1 hora. Quando o tempo expira, o usuário é removido e novas credenciais podem ser geradas. Isso garante que os segredos sejam rotacionados constantemente sem intervenção manual.

Access policies

Políticas de acesso definem quem pode ler, escrever ou gerenciar segredos no Vault. Elas seguem o princípio do menor privilégio, ou seja, cada usuário ou aplicação recebe apenas as permissões necessárias para suas funções. Isso minimiza o impacto de um comprometimento e facilita a auditoria.

No HashiCorp Vault, as políticas são escritas em HCL (HashiCorp Configuration Language) e associadas a tokens ou identidades. Uma política especifica caminhos (paths) e capacidades (create, read, update, delete, list). Por exemplo, uma aplicação de leitura pode ter apenas permissão de leitura no caminho 'secret/data/minha-aplicacao'.

Exemplo de política de acesso no Vault:

# Caminho: /home/user/politica.hcl
path "secret/data/minha-aplicacao" {
  capabilities = ["read"]
}

path "secret/data/outra-aplicacao" {
  capabilities = ["create", "read", "update", "delete"]
}

# Criar e aplicar a política
vault policy write minha-politica /home/user/politica.hcl

# Criar um token com essa política
vault token create -policy=minha-politica

Além de políticas baseadas em caminhos, o Vault suporta políticas baseadas em identidade (Entity) e grupos, permitindo um controle mais refinado. É importante revisar periodicamente as políticas para remover permissões desnecessárias e ajustar a novas necessidades.

Auditing

Auditoria é o registro detalhado de todas as operações realizadas no Vault, incluindo quem acessou qual segredo, quando e de onde. Isso é essencial para conformidade, detecção de atividades suspeitas e investigação de incidentes. O Vault pode enviar logs de auditoria para sistemas externos, como ELK Stack, Splunk ou serviços de armazenamento em nuvem.

Os logs de auditoria devem ser imutáveis e protegidos contra alterações, garantindo sua integridade. Eles também devem ser retidos por um período definido pelas políticas da organização. Ferramentas de análise podem ser usadas para gerar alertas em tempo real sobre padrões anômalos, como múltiplas falhas de autenticação ou acessos fora do horário comercial.

Exemplo de configuração de auditoria no Vault para enviar logs para um arquivo:

# Habilitar auditoria em um arquivo
vault audit enable file file_path=/var/log/vault-audit.log

# Verificar dispositivos de auditoria
vault audit list

Além do Vault, outras soluções de gerenciamento de segredos oferecem recursos de auditoria integrados, como o AWS CloudTrail para o Secrets Manager. É fundamental que os logs incluam informações como ID do usuário, endereço IP, timestamp e a ação executada. Dessa forma, é possível rastrear qualquer acesso a segredos.

Boas Práticas e Observações Finais

  • Centralize o gerenciamento: Use uma única ferramenta de Vault para todos os segredos, evitando espalhá-los em vários lugares.
  • Implemente rotação automática: Sempre que possível, configure a rotação automática para reduzir o risco de segredos vazados.
  • Aplique o princípio do menor privilégio: Revise regularmente as políticas de acesso e remova permissões desnecessárias.
  • Monitore a auditoria: Ative a auditoria e configure alertas para atividades suspeitas.
  • Use segredos dinâmicos: Prefira credenciais dinâmicas com tempo de vida limitado em vez de segredos estáticos.

Referências

Exercícios

  1. Qual é a principal vantagem de usar um Vault em vez de variáveis de ambiente para armazenar segredos?

    ✓ Resposta: Um Vault oferece controle de acesso centralizado, rotação automática, auditoria e proteção criptográfica, enquanto variáveis de ambiente são menos seguras e mais difíceis de gerenciar, além de ficarem expostas em processos.
  2. Explique por que a rotação de segredos é importante e cite um cenário em que ela é crítica.

    ✓ Resposta: A rotação reduz a janela de exposição de um segredo comprometido. Um cenário crítico é quando uma chave de API é vazada em um repositório público; a rotação imediata invalida a chave antiga, impedindo o uso indevido.
  3. Como as políticas de acesso ajudam a melhorar a segurança em um sistema de gerenciamento de segredos?

    ✓ Resposta: As políticas de acesso aplicam o princípio do menor privilégio, limitando o acesso a segredos apenas para quem realmente precisa, reduzindo o impacto de um comprometimento e facilitando a auditoria.
  4. Quais informações devem estar presentes em logs de auditoria para serem úteis em uma investigação?

    ✓ Resposta: Os logs devem incluir: usuário ou entidade que acessou, endereço IP, timestamp, ação executada (leitura, escrita, exclusão) e o caminho do segredo acessado.
  5. Dê um exemplo de como criar uma política de acesso no HashiCorp Vault que permita apenas leitura em um caminho específico.

    ✓ Resposta:
    path "secret/data/meu-segredo" {
      capabilities = ["read"]
    }
    Salve em um arquivo .hcl e aplique com vault policy write minha-politica arquivo.hcl.