DBAtlas · Atlas de operações de banco de dados

Hardening de segurança do MongoDB (autorização, TLS, roles, audit)

MongoDBNível: AvançadoDuração: 10 min (auditoria) – 2 horas (hardening completo)

Runbook por cenários para aplicar hardening a um MongoDB em execução (servidor único, replica set ou sharded cluster) sem downtime: auditoria de segurança somente leitura, autorização rolling com keyFile + transitionToAuth, custom roles e usuários com privilégio mínimo, SCRAM-SHA-256, bindIp e firewall, transição allowTLS → preferTLS → requireTLS, autenticação de membros por x.509, audit log (Enterprise/Percona) e encryption at rest; ao final a auditoria é repetida para mostrar que os riscos foram fechados. Em sistemas instalados com os guias de instalação deste site, a autorização e o keyfile já estão habilitados: comece pela auditoria e aplique apenas os cenários que apontarem RISCO. A operação do dia a dia e o backup estão em guias separados de MongoDB.

Topologia: Servidor único, replica set com 3+ membros ou sharded cluster

Cenários

  • Auditoria do estado de segurança (somente leitura) — Não altera nada. Acesso sem autenticação, endereços em escuta, TLS, mecanismos de autenticação, usuários com privilégios elevados, audit e encryption at rest são reportados como OK / AVISO / RISCO. Escolha esta opção se não souber por onde começar.
  • Hardening completo (tudo em ordem) — Auditoria → internal auth + authorization (sem downtime com transitionToAuth) → usuários com privilégio mínimo → SCRAM-SHA-256 → bindIp/firewall → TLS (allowTLS → preferTLS → requireTLS) → audit (Enterprise/Percona) → auditoria final. Em replica set é feito de forma rolling; cada passo arriscado pede confirmação.
  • Autorização desabilitada: habilitar authorization (keyFile, sem downtime) — Qualquer um consegue se conectar sem usuário e senha. Em replica set e sharded cluster, a autorização é habilitada de forma rolling e sem downtime com keyFile + transitionToAuth; em servidor único é necessário um reinício curto.
  • Usuários com privilégio mínimo e custom roles (aplicação, backup, monitoramento) — As aplicações se conectam com root ou com uma conta de administrador compartilhada. É criada uma custom role que concede à aplicação apenas as operações necessárias no próprio banco de dados, além de usuários separados para backup e monitoramento; mostra-se também como guardar as senhas com segurança no lado do cron/da aplicação.
  • Desabilitar SCRAM-SHA-1, somente SCRAM-SHA-256 — As credenciais de usuários antigos estão armazenadas com SHA-1, ou a auditoria encontrou SCRAM-SHA-1 habilitado. Os usuários são migrados para SHA-256 e, em seguida, authenticationMechanisms é restringido com um reinício rolling.
  • Restringir o acesso de rede (bindIp 0.0.0.0, firewall) — O mongod escuta em todas as interfaces (0.0.0.0, bindIpAll) ou a porta está aberta para todos. O bindIp é reduzido a localhost + IP interno do servidor, e o firewall libera apenas os membros e a rede da aplicação. Rolling, sem downtime.
  • Criptografar conexões: TLS (allowTLS → preferTLS → requireTLS) — O tráfego entre a aplicação e os membros, e entre os membros, não é criptografado. Os certificados são distribuídos, os membros passam primeiro para allowTLS com reinício rolling, depois para preferTLS em tempo de execução e para requireTLS quando as aplicações estiverem prontas. Opcional: autenticação x.509 entre os membros.
  • Habilitar o audit log (Enterprise / Percona) — É preciso registrar quem fez login e quando, as alterações de usuários/roles e as operações de drop. No MongoDB Enterprise e no Percona Server for MongoDB isso é habilitado com auditLog; o Community não tem esse recurso (uma alternativa é mostrada).
  • Encryption at rest (criptografar os dados em disco) — Se o disco ou um backup for roubado, os dados não podem ser lidos. No Enterprise/Percona, a criptografia do WiredTiger é habilitada reconstruindo os membros um a um com initial sync; no Community, o disco de dados é criptografado com LUKS.

Antes de começar

  • Acesso root/sudo em todos os servidores mongod… e mongos…; SSH do primeiro servidor para os demais (para copiar keyfile e certificados).
  • …Replica set saudável: todos os membros PRIMARY/SECONDARY, lag baixo. Não se faz operação rolling em cluster não saudável.…mongod em execução.…
  • Lista de aplicações e responsáveis: antes de tornar autorização/TLS obrigatórios, a string de conexão de cada aplicação será atualizada. A string de conexão deve conter todos os membros e replicaSet= (para não cair durante o rolling).
  • Janela de manutenção: as operações rolling não causam downtime, mas a cada troca de primary as escritas esperam alguns segundos. Em servidor único, habilitar autorização/TLS exige uma interrupção curta.
  • Se a autorização já estiver habilitada no sharded cluster: no primary de cada shard deve existir um usuário shard-local (root) com o mesmo nome e senha de … do mongos. Os passos por membro (rs.stepDown no reinício rolling, setParameter, auditoria) se conectam diretamente aos membros do shard; lá os usuários do mongos não valem. Verificação: no membro do shard, mongosh --port <porta do shard> e db.getSiblingDB("admin").auth("…", passwordPrompt()).
  • Backup completo recente, com restore já testado.
  • Para audit e encryption at rest, licença do MongoDB Enterprise ou Percona Server for MongoDB. O Community não tem esses recursos.
  • Os nomes dos membros são resolvidos em cada servidor (DNS ou /etc/hosts); com TLS, as conexões são feitas por esses nomes.

Fases do guia

  • Preparação: rede de segurança e ferramentas auxiliares — Backup de configuração e estado · Instalar o PyYAML · Escrever a ferramenta de edição de YAML (dbatlas-yaml) · Escrever a ferramenta de reinício rolling (dbatlas-mongod-restart) · Gravar a senha do administrador em um arquivo temporário
  • Auditoria de estado (somente leitura) — Rede, processo e permissões de arquivos: … · Rede e processo: … · Autorização, TLS e parâmetros: … · Autorização, TLS e parâmetros: … · Usuários, roles e mecanismos de autenticação · Associar os achados aos cenários
  • Autorização: diagnóstico e keyfile — Diagnóstico: a autorização está mesmo desabilitada? · Inventariar as conexões das aplicações · Criar o keyfile · Copiar o keyfile para os outros servidores · Permissões do keyfile: … · Permissões do keyfile: …
  • Autorização: usuário administrador — Criar o usuário administrador (…) · Administrador shard-local: …
  • Usuários com privilégio mínimo e custom role — Criar a custom role da aplicação (…@…) · Criar o usuário da aplicação (…) · Usuários de backup e monitoramento · Verificar o privilégio mínimo (…) · Guardar as senhas com segurança na aplicação e no cron
  • Autorização: verificar que não restam conexões sem autenticação — Conexões de cliente sem autenticação: …
  • Tornar a autorização obrigatória (servidor único) — authorization: enabled · Reiniciar o serviço com segurança (…)
  • Autorização: verificação — O acesso sem autenticação está sendo recusado? · Verificar o privilégio mínimo (…) · Caminho de reversão (se necessário)
  • SCRAM-SHA-256: migrar os usuários — Usuários com credencial SHA-1 · Reduzir os usuários a somente SCRAM-SHA-256
  • SCRAM-SHA-256: verificação — O login com SHA-1 está sendo recusado?
  • Acesso de rede: firewall — Regras de firewall
  • Acesso de rede: verificação — Endereços em escuta: …
  • TLS: certificados — Estado atual do TLS · Gerar a CA interna e os certificados dos servidores · Distribuir os certificados · Permissões e validação dos certificados: … · Permissões dos certificados: …
  • TLS: migrar as aplicações — Migrar as aplicações para TLS e contar as conexões TLS
  • TLS: verificação — A conexão sem TLS está sendo recusada: …
  • Audit log: verificação prévia — Este mongod suporta audit: …
  • Audit log: verificação e rotação — Os registros de audit estão sendo gerados: … · Alternativa para Community: acompanhar os logs de autenticação
  • Encryption at rest: verificação prévia e backup — Suporte a criptografia e espaço em disco: … · O backup completo foi feito?
  • Encryption at rest: marcador de teste — Gravar um marcador em texto puro
  • Encryption at rest (Community): disco de dados com LUKS — Preparar o disco LUKS: … · Mover os dados para o disco criptografado: …
  • Auditoria final (depois do hardening) — Rede, processo e permissões de arquivos: … (estado final) · Rede e processo: … (estado final) · Autorização, TLS e parâmetros: … (estado final) · Autorização, TLS e parâmetros: … (estado final) · Usuários, roles e mecanismos de autenticação (estado final)
  • Limpeza e próximos passos — Apagar o arquivo temporário de senha · Depois: monitoramento e tarefas periódicas
Abrir o plano passo a passo para o seu ambiente →