feat: harden identity and recovery operations
This commit is contained in:
79
docs/PRODUCTION_CHECKLIST.md
Normal file
79
docs/PRODUCTION_CHECKLIST.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# Checklist de entrada em produção
|
||||
|
||||
Este documento é o registo de prontidão. Cada item deve ter responsável, data e ligação para a evidência no sistema institucional de operação. Nunca colocar segredos, tokens ou dados pessoais neste ficheiro.
|
||||
|
||||
## 1. Microsoft Entra ID
|
||||
|
||||
- [ ] Registar uma aplicação de tenant único do tipo Web.
|
||||
- [ ] Configurar exatamente `https://<domínio>/auth/microsoft/callback` como redirect URI.
|
||||
- [ ] Criar credencial com validade e rotação definidas; preferir mecanismo externo de segredos.
|
||||
- [ ] Definir `MICROSOFT_ENABLED=true`, client ID, tenant GUID, secret e redirect URI fora do repositório.
|
||||
- [ ] Confirmar que uma conta local consegue associar e remover a identidade em Segurança.
|
||||
- [ ] Confirmar login, logout, utilizador desativado, tenant incorreto e rotação da chave de assinatura.
|
||||
- [ ] Aplicar Conditional Access/MFA institucional aos perfis privilegiados.
|
||||
- [ ] Documentar o procedimento de recuperação através de login local administrado.
|
||||
|
||||
Referências oficiais: [Authorization Code Flow com PKCE](https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-auth-code-flow), [tokens e validação de claims](https://learn.microsoft.com/en-us/entra/identity-platform/security-tokens) e [validação de assinatura/emissor](https://learn.microsoft.com/en-us/entra/identity-platform/access-tokens).
|
||||
|
||||
## 2. Snipe-IT
|
||||
|
||||
- [ ] Confirmar URL e versão da instância institucional.
|
||||
- [ ] Criar conta/token de leitura com menor privilégio.
|
||||
- [ ] Criar conta/token operacional separado, apenas com checkout/check-in necessários.
|
||||
- [ ] Executar sincronização integral e comparar amostra de etiquetas, categorias, estados e localizações.
|
||||
- [ ] Exercitar checkout/check-in com equipamentos de teste e reconciliar `handover_records`.
|
||||
- [ ] Confirmar resposta a indisponibilidade, timeout e falha parcial sem retries de escrita.
|
||||
|
||||
## 3. Email, domínio e TLS
|
||||
|
||||
- [ ] Configurar SMTP institucional e remetente autorizado.
|
||||
- [ ] Validar submissão, esclarecimento, aprovação, rejeição e substituição em destinatários reais de teste.
|
||||
- [ ] Publicar domínio e certificado TLS com renovação automática.
|
||||
- [ ] Definir `APP_ENV=production`, `APP_DEBUG=false`, `APP_URL=https://...`, cookies seguros e proxy confiável.
|
||||
- [ ] Remover exposição pública de PostgreSQL, Redis, Vite e Mailpit.
|
||||
|
||||
## 4. Segredos e infraestrutura
|
||||
|
||||
- [ ] Montar `APP_KEY`, credenciais PostgreSQL/Redis/SMTP, tokens Snipe-IT e Entra através do gestor externo.
|
||||
- [ ] Confirmar que logs, dumps, imagens e artefactos de CI não contêm segredos.
|
||||
- [ ] Construir imagem imutável, executar migrations com etapa controlada e reiniciar workers após deploy.
|
||||
- [ ] Definir limites de CPU/memória, rotação de logs e política de atualização de imagens/dependências.
|
||||
|
||||
## 5. Saúde, monitorização e alertas
|
||||
|
||||
- [ ] Monitorizar `GET /health/live` para disponibilidade do processo.
|
||||
- [ ] Usar `GET /health/ready` para retirar instâncias sem PostgreSQL/cache do balanceamento.
|
||||
- [ ] Alertar para HTTP 5xx, latência, filas acumuladas, jobs falhados, scheduler parado e disco baixo.
|
||||
- [ ] Alertar para sincronização Snipe-IT falhada/antiga e erros de autenticação anormais.
|
||||
- [ ] Definir contacto, severidade, escalonamento e janela de manutenção.
|
||||
|
||||
## 6. Backup e recuperação
|
||||
|
||||
- [ ] Agendar `ops/backup-postgres.sh <destino>` com utilizador restrito e armazenamento cifrado.
|
||||
- [ ] Copiar backups e respetivos `.sha256` para uma localização externa com retenção diária/semanal/mensal.
|
||||
- [ ] Monitorizar idade, tamanho e resultado de cada backup.
|
||||
- [ ] Executar `ops/test-restore-postgres.sh <ficheiro.dump>` pelo menos mensalmente em ambiente isolado.
|
||||
- [ ] Registar RPO, RTO, responsável, duração e resultado do ensaio.
|
||||
- [ ] Ensaiar recuperação da configuração e segredos por procedimento separado.
|
||||
|
||||
## 7. Segurança, desempenho e piloto
|
||||
|
||||
- [ ] Executar análise de dependências, análise estática e testes completos no artefacto de release.
|
||||
- [ ] Testar autorização horizontal/vertical para todos os perfis e exportações.
|
||||
- [ ] Testar concorrência na aprovação/reserva contra PostgreSQL real.
|
||||
- [ ] Medir catálogo, calendário global, relatórios e exportações com volume representativo.
|
||||
- [ ] Executar E2E com equipamentos reais, scanner, entrega parcial, incidente e reconciliação.
|
||||
- [ ] Importar utilizadores/perfis iniciais e rever a matriz de aprovadores.
|
||||
- [ ] Formar requisitantes, aprovadores, operadores e administradores com runbook aplicável.
|
||||
- [ ] Realizar piloto limitado, registar incidentes e obter decisão formal de go/no-go.
|
||||
|
||||
## Registo de evidências
|
||||
|
||||
| Área | Responsável | Data | Resultado | Evidência externa |
|
||||
|---|---|---|---|---|
|
||||
| Entra ID | Por atribuir | — | Pendente | — |
|
||||
| Snipe-IT | Por atribuir | — | Pendente | — |
|
||||
| SMTP/TLS | Por atribuir | — | Pendente | — |
|
||||
| Monitorização | Por atribuir | — | Pendente | — |
|
||||
| Restauro | Por atribuir | — | Pendente | — |
|
||||
| Piloto | Por atribuir | — | Pendente | — |
|
||||
Reference in New Issue
Block a user