Files
reservas/docs/PRODUCTION_CHECKLIST.md

83 lines
5.5 KiB
Markdown

# 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.
- [ ] Confirmar por inspeção e testes simulados que o portal não contém endpoints de criação, edição ou eliminação de inventário.
- [ ] Validar tecnicamente a produção apenas com pedidos `GET`; nunca usar um movimento artificial como teste de conectividade.
- [ ] No primeiro movimento institucional legítimo, usar um ativo existente e não atribuído, verificar o preflight e reconciliar `handover_records`.
- [ ] Confirmar que um ativo já atribuído é bloqueado sem qualquer pedido de escrita.
- [ ] 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 | Codex (validação técnica) | 2026-08-05 | Parcial: dois tokens distintos responderam a `GET`; sincronização de 2367 ativos; zero escritas | Registo interno em [PROJECT_STATUS.md](PROJECT_STATUS.md); validação institucional pendente |
| SMTP/TLS | Por atribuir | — | Pendente | — |
| Monitorização | Por atribuir | — | Pendente | — |
| Restauro | Por atribuir | — | Pendente | — |
| Piloto | Por atribuir | — | Pendente | — |