Gerenciamento de segredos: HashiCorp Vault vs AWS Secrets Manager

1. Introdução ao Gerenciamento de Segredos em Ambientes Modernos

1.1. O que são segredos e por que o gerenciamento centralizado é crítico

Segredos são informações sensíveis que concedem acesso a sistemas, bancos de dados, APIs e infraestrutura. Exemplos incluem senhas, chaves de API, tokens de autenticação, certificados TLS e chaves SSH. Em ambientes modernos, com dezenas ou centenas de microsserviços, o gerenciamento manual desses segredos torna-se inviável e perigoso.

O gerenciamento centralizado de segredos resolve problemas como:
- Eliminação de segredos hardcoded em código-fonte
- Rotação automatizada sem downtime
- Auditoria centralizada de quem acessou o quê
- Revogação rápida em caso de comprometimento

1.2. Desafios comuns: vazamento de credenciais, rotação manual e compliance

Vazamento de credenciais é uma das principais causas de violações de segurança. Estudos mostram que credenciais expostas em repositórios Git respondem por milhares de incidentes anualmente. A rotação manual de segredos, além de propensa a erros, raramente é feita com a frequência necessária. Compliance com regulamentações como PCI-DSS, HIPAA e GDPR exige controles rigorosos de acesso e auditoria.

1.3. Visão geral do cenário: HashiCorp Vault vs AWS Secrets Manager

HashiCorp Vault é uma ferramenta open-source que oferece gerenciamento de segredos com suporte a múltiplos backends, segredos dinâmicos e criptografia como serviço. Pode ser executado on-premise, em qualquer cloud ou como serviço gerenciado (HCP Vault).

AWS Secrets Manager é um serviço gerenciado nativo da AWS, projetado para ambientes que já operam integralmente no ecossistema AWS. Oferece rotação automática integrada com serviços gerenciados da AWS.

2. Arquitetura e Modelo de Deploy

2.1. HashiCorp Vault: arquitetura cliente-servidor

O Vault opera com uma arquitetura cliente-servidor. O servidor Vault gerencia o armazenamento e acesso aos segredos, enquanto clientes (aplicações, serviços) se autenticam e solicitam segredos via API REST.

Exemplo de configuração básica do Vault com backend Raft:

storage "raft" {
  path = "/opt/vault/data"
  node_id = "node1"
}

listener "tcp" {
  address     = "0.0.0.0:8200"
  tls_disable = false
  tls_cert_file = "/opt/vault/tls/cert.pem"
  tls_key_file  = "/opt/vault/tls/key.pem"
}

api_addr = "https://vault.example.com:8200"
cluster_addr = "https://vault.example.com:8201"

seal "awskms" {
  region     = "us-east-1"
  kms_key_id = "alias/vault-unseal"
}

Para alta disponibilidade, utiliza-se clustering com Raft ou Consul como backend de storage.

2.2. AWS Secrets Manager: serviço gerenciado

AWS Secrets Manager é totalmente gerenciado pela AWS. Não requer provisionamento de servidores, configuração de clusters ou manutenção. A integração com IAM, KMS e CloudTrail é nativa.

Exemplo de criação de segredo via AWS CLI:

aws secretsmanager create-secret \
    --name "prod/db-password" \
    --description "Database password for production" \
    --secret-string "MySuperSecretP@ssw0rd!" \
    --kms-key-id "arn:aws:kms:us-east-1:123456789012:key/abc123" \
    --tags '[{"Key":"Environment","Value":"Production"}]'

2.3. Comparação de modelos de implantação

Característica HashiCorp Vault AWS Secrets Manager
Modelo Autogerenciado ou SaaS (HCP) SaaS gerenciado
Custos operacionais Alto (manutenção, patches, HA) Baixo (zero manutenção)
Escalabilidade Configuração manual de clusters Escalabilidade automática
Flexibilidade de deploy On-premise, qualquer cloud Apenas AWS

3. Funcionalidades Principais e Armazenamento de Segredos

3.1. Tipos de segredos suportados

Ambas as soluções suportam segredos estáticos (senhas, chaves de API), mas o Vault se destaca com segredos dinâmicos e certificados.

3.2. HashiCorp Vault: motores de segredos

O Vault possui motores de segredos especializados. Exemplo de configuração do motor de banco de dados PostgreSQL:

# Habilitar o motor de banco de dados
vault secrets enable database

# Configurar conexão com PostgreSQL
vault write database/config/postgres-db \
    plugin_name=postgresql-database-plugin \
    allowed_roles="readonly" \
    connection_url="postgresql://{{username}}:{{password}}@postgres.example.com:5432/mydb" \
    username="vault_user" \
    password="vault_password"

# Criar role que gera credenciais dinâmicas
vault write database/roles/readonly \
    db_name=postgres-db \
    creation_statements="CREATE USER \"{{name}}\" WITH PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
    default_ttl="1h" \
    max_ttl="24h"

3.3. AWS Secrets Manager: rotação automática integrada

O AWS Secrets Manager oferece rotação automática para bancos de dados gerenciados (RDS, Redshift, DocumentDB). Exemplo de configuração de rotação:

aws secretsmanager rotate-secret \
    --secret-id "prod/db-password" \
    --rotation-rules '{"AutomaticallyAfterDays": 30}' \
    --rotation-lambda-arn "arn:aws:lambda:us-east-1:123456789012:function:rotate-db-secret"

4. Segurança, Criptografia e Controle de Acesso

4.1. HashiCorp Vault: criptografia e políticas ACL

O Vault criptografa dados em trânsito (TLS) e em repouso (AES-256-GCM). O processo de unseal requer múltiplas chaves compartilhadas. Políticas ACL controlam acesso granular:

path "database/creds/readonly" {
  capabilities = ["read"]
}

path "secret/data/prod/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

4.2. AWS Secrets Manager: criptografia via KMS

A criptografia é feita via AWS KMS, podendo usar chaves gerenciadas pela AWS ou pelo cliente. Políticas IAM controlam acesso:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:prod/*"
        }
    ]
}

4.3. Comparação de auditoria

O Vault oferece audit devices que registram todas as requisições e respostas. O AWS Secrets Manager integra-se com CloudTrail e CloudWatch Logs para auditoria completa.

5. Integração com Ecossistemas e Automação

5.1. HashiCorp Vault: Kubernetes e CI/CD

O Vault integra-se com Kubernetes via CSI Driver e Sidecar Injector. Exemplo de anotação para injeção automática:

metadata:
  annotations:
    vault.hashicorp.com/agent-inject: "true"
    vault.hashicorp.com/agent-inject-secret-db-creds: "database/creds/readonly"
    vault.hashicorp.com/role: "app-role"

5.2. AWS Secrets Manager: integração nativa AWS

Integração direta com Lambda, ECS, EKS e CloudFormation. Exemplo de referência em CloudFormation:

Resources:
  MyApp:
    Type: AWS::ECS::TaskDefinition
    Properties:
      ContainerDefinitions:
        - Name: my-app
          Secrets:
            - Name: DB_PASSWORD
              ValueFrom: arn:aws:secretsmanager:us-east-1:123456789012:secret:prod/db-password

5.3. Casos de uso híbridos

Para ambientes multi-cloud, o Vault é a escolha natural. O External Secrets Operator (ESO) permite sincronizar segredos entre AWS Secrets Manager e Kubernetes, oferecendo um meio-termo.

6. Performance, Custos e Licenciamento

6.1. HashiCorp Vault: open source vs enterprise

A versão Community é gratuita, mas sem suporte oficial. A versão Enterprise (licenciamento por nó) adiciona HSM, performance standby e replicação.

6.2. AWS Secrets Manager: pay-per-use

Cobrança de $0,40 por segredo por mês + $0,05 por 10.000 chamadas de API. Sem custo inicial.

6.3. Trade-offs de performance

O Vault autogerenciado pode atingir latências menores em ambientes controlados, mas exige tuning. O AWS Secrets Manager escala automaticamente, mas pode ter latência adicional em chamadas cross-region.

7. Casos de Uso e Critérios de Escolha

7.1. Quando escolher HashiCorp Vault

  • Ambientes multi-cloud ou on-premise
  • Necessidade de segredos dinâmicos (bancos, cloud providers)
  • Requisitos de compliance rigorosos (PCI-DSS, HIPAA)
  • Equipes com expertise em operação de infraestrutura

7.2. Quando escolher AWS Secrets Manager

  • Workloads 100% AWS
  • Equipes pequenas sem capacidade operacional
  • Necessidade de rotação automática simplificada
  • Baixa complexidade de integração

7.3. Estratégias híbridas

Uma abordagem comum: usar Vault para segredos críticos e dinâmicos (credenciais de banco de dados, certificados) e AWS Secrets Manager para chaves de API e credenciais de serviços AWS.

8. Conclusão e Próximos Passos

8.1. Resumo das principais diferenças

HashiCorp Vault oferece flexibilidade, controle granular e segredos dinâmicos, mas exige investimento operacional. AWS Secrets Manager oferece simplicidade e integração nativa, mas limita-se ao ecossistema AWS.

8.2. Recomendações práticas

Para iniciar:
1. Faça um inventário de todos os segredos atuais
2. Identifique padrões de acesso e rotação
3. Execute uma prova de conceito com a ferramenta escolhida
4. Migre gradualmente, começando por segredos não críticos

8.3. Ferramentas complementares

O External Secrets Operator (ESO) permite usar ambas as soluções simultaneamente, sincronizando segredos para Kubernetes de forma declarativa.

Referências