Pular para o conteúdo principal

Plano de Contingência e Recuperação de Desastres

Sistema Acesso ao Emprego - Portal de Talentos


InformaçãoDetalhes
Versão do Documento1.0.0
Data de CriaçãoJaneiro/2026
Última AtualizaçãoJaneiro/2026
ClassificaçãoConfidencial
ResponsávelEquipe de Infraestrutura
Próxima RevisãoJulho/2026

1. Introdução

1.1 Objetivo

Este documento estabelece os procedimentos para garantir a continuidade operacional do Sistema Acesso ao Emprego em situações de falha, desastre ou interrupção de serviço, minimizando o impacto nas operações e assegurando a recuperação dos serviços dentro dos níveis acordados.

1.2 Escopo

Este plano abrange:

  • Identificação e classificação de riscos
  • Procedimentos de resposta a incidentes
  • Estratégias de backup e recuperação
  • Plano de comunicação
  • Testes e manutenção do plano

1.3 Definições

TermoDefinição
RTO (Recovery Time Objective)Tempo máximo tolerável para restauração do serviço
RPO (Recovery Point Objective)Perda máxima aceitável de dados (em tempo)
MTTR (Mean Time To Repair)Tempo médio para reparo
BCP (Business Continuity Plan)Plano de Continuidade de Negócios
DR (Disaster Recovery)Recuperação de Desastres

1.4 Metas de Recuperação

ServiçoRTORPOCriticidade
API Backend1 hora4 horasCrítica
Banco de Dados2 horas1 horaCrítica
Frontend30 minutosN/AAlta
Worker Celery2 horas4 horasMédia
Serviços de Email4 horas24 horasBaixa

2. Análise de Riscos

2.1 Matriz de Riscos

IDRiscoProbabilidadeImpactoNível
R01Falha de hardware do servidorBaixaAltoMédio
R02Corrupção de banco de dadosBaixaCríticoAlto
R03Ataque cibernético (DDoS/Ransomware)MédiaCríticoCrítico
R04Falha de rede/conectividadeMédiaAltoAlto
R05Erro humano em produçãoMédiaAltoAlto
R06Falha de serviço de nuvemBaixaAltoMédio
R07Desastre natural (incêndio, inundação)Muito BaixaCríticoMédio
R08Falha de energia prolongadaBaixaAltoMédio
R09Expiração de certificados SSLMédiaMédioMédio
R10Estouro de capacidade de discoMédiaAltoAlto

2.2 Classificação de Incidentes

SeveridadeDescriçãoTempo de RespostaEscalação
CríticaSistema completamente indisponível< 15 minutosImediata
AltaFuncionalidade principal comprometida< 30 minutos30 minutos
MédiaFuncionalidade secundária afetada< 2 horas4 horas
BaixaImpacto mínimo na operação< 8 horas24 horas

3. Estrutura de Resposta a Incidentes

3.1 Equipe de Resposta

FunçãoResponsabilidadeContato PrincipalBackup
Coordenador de CriseCoordenação geral, decisões críticas[Nome] - [Telefone][Nome]
Líder TécnicoDiagnóstico e resolução técnica[Nome] - [Telefone][Nome]
DBARecuperação de banco de dados[Nome] - [Telefone][Nome]
InfraestruturaServidores e rede[Nome] - [Telefone][Nome]
ComunicaçãoComunicação com stakeholders[Nome] - [Telefone][Nome]

3.2 Cadeia de Escalação

Nível 1: Equipe de Suporte (0-15 min)
↓ (se não resolvido)
Nível 2: Líder Técnico (15-30 min)
↓ (se não resolvido)
Nível 3: Coordenador de Crise (30-60 min)
↓ (se crítico)
Nível 4: Gestão Executiva

3.3 Canal de Comunicação de Emergência

CanalUsoAcesso
Grupo WhatsApp EmergênciaComunicação rápidaEquipe de resposta
Email EmergênciaDocumentação formalemergencia@portal-talentos.gov.br
Telefone de PlantãoContato direto(XX) XXXXX-XXXX

4. Estratégia de Backup

4.1 Política de Backup

TipoFrequênciaRetençãoLocalCriptografia
Backup Completo DBDiário (03:00)30 diasS3 + LocalAES-256
Backup Incremental DBA cada 6 horas7 diasS3AES-256
Backup de ArquivosDiário (04:00)30 diasS3AES-256
Snapshot de ServidorSemanal4 semanasProvider CloudSim
Backup de ConfiguraçõesA cada alteração90 diasGit + S3Sim

4.2 Scripts de Backup

4.2.1 Backup do Banco de Dados

#!/bin/bash
# /opt/scripts/backup-database.sh

set -e

DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups/database"
S3_BUCKET="s3://portal-talentos-backups/database"
RETENTION_DAYS=30

mkdir -p $BACKUP_DIR

echo "[$(date)] Iniciando backup do banco de dados..."

docker-compose -f /opt/portal-talentos/docker-compose.prod.yml exec -T postgres \
pg_dump -U portal_talentos_user -Fc portal_talentos_db > $BACKUP_DIR/db_${DATE}.dump

gzip $BACKUP_DIR/db_${DATE}.dump

openssl enc -aes-256-cbc -salt -pbkdf2 \
-in $BACKUP_DIR/db_${DATE}.dump.gz \
-out $BACKUP_DIR/db_${DATE}.dump.gz.enc \
-pass file:/opt/scripts/.backup_key

rm $BACKUP_DIR/db_${DATE}.dump.gz

aws s3 cp $BACKUP_DIR/db_${DATE}.dump.gz.enc $S3_BUCKET/

find $BACKUP_DIR -name "*.enc" -mtime +$RETENTION_DAYS -delete

echo "[$(date)] Backup concluído com sucesso: db_${DATE}.dump.gz.enc"

4.2.2 Backup de Arquivos de Mídia

#!/bin/bash
# /opt/scripts/backup-media.sh

set -e

DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups/media"
S3_BUCKET="s3://portal-talentos-backups/media"
MEDIA_DIR="/opt/portal-talentos/backend/media"

mkdir -p $BACKUP_DIR

echo "[$(date)] Iniciando backup de arquivos de mídia..."

tar -czf $BACKUP_DIR/media_${DATE}.tar.gz -C $MEDIA_DIR .

aws s3 sync $BACKUP_DIR/ $S3_BUCKET/ --delete

find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete

echo "[$(date)] Backup de mídia concluído: media_${DATE}.tar.gz"

4.3 Agendamento de Backups (Cron)

# /etc/cron.d/portal-talentos-backup

0 3 * * * root /opt/scripts/backup-database.sh >> /var/log/backup-db.log 2>&1
0 4 * * * root /opt/scripts/backup-media.sh >> /var/log/backup-media.log 2>&1
0 */6 * * * root /opt/scripts/backup-incremental.sh >> /var/log/backup-incr.log 2>&1

4.4 Verificação de Integridade

#!/bin/bash
# /opt/scripts/verify-backup.sh

LATEST_BACKUP=$(ls -t /backups/database/*.enc | head -1)

openssl enc -aes-256-cbc -d -pbkdf2 \
-in $LATEST_BACKUP \
-out /tmp/test_restore.dump.gz \
-pass file:/opt/scripts/.backup_key

gunzip -t /tmp/test_restore.dump.gz

rm /tmp/test_restore.dump.gz

echo "[$(date)] Verificação de integridade: OK"

5. Procedimentos de Recuperação

5.1 Recuperação de Falha Total do Sistema

Passo 1: Avaliação Inicial (0-15 min)

docker-compose -f docker-compose.prod.yml ps
docker-compose -f docker-compose.prod.yml logs --tail=100
ping -c 3 localhost
curl -I http://localhost:8080/api/v1/health/

Passo 2: Tentativa de Reinicialização (15-30 min)

docker-compose -f docker-compose.prod.yml down
docker system prune -f
docker-compose -f docker-compose.prod.yml up -d
sleep 30
docker-compose -f docker-compose.prod.yml ps

Passo 3: Verificação de Serviços (30-45 min)

docker-compose -f docker-compose.prod.yml exec backend python manage.py check
docker-compose -f docker-compose.prod.yml exec backend celery -A app status
curl -I https://seu-dominio.com.br/api/v1/health/

5.2 Recuperação de Banco de Dados Corrompido

Passo 1: Parar Serviços Dependentes

docker-compose -f docker-compose.prod.yml stop backend worker beat

Passo 2: Identificar Último Backup Válido

aws s3 ls s3://portal-talentos-backups/database/ --recursive | sort | tail -10

Passo 3: Download e Descriptografia do Backup

aws s3 cp s3://portal-talentos-backups/database/db_YYYYMMDD_HHMMSS.dump.gz.enc /tmp/

openssl enc -aes-256-cbc -d -pbkdf2 \
-in /tmp/db_YYYYMMDD_HHMMSS.dump.gz.enc \
-out /tmp/db_restore.dump.gz \
-pass file:/opt/scripts/.backup_key

gunzip /tmp/db_restore.dump.gz

Passo 4: Restauração do Banco

docker-compose -f docker-compose.prod.yml exec postgres psql -U portal_talentos_user -d postgres -c "
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'portal_talentos_db' AND pid <> pg_backend_pid();"

docker-compose -f docker-compose.prod.yml exec postgres psql -U portal_talentos_user -d postgres -c "DROP DATABASE IF EXISTS portal_talentos_db;"
docker-compose -f docker-compose.prod.yml exec postgres psql -U portal_talentos_user -d postgres -c "CREATE DATABASE portal_talentos_db;"

cat /tmp/db_restore.dump | docker-compose -f docker-compose.prod.yml exec -T postgres pg_restore -U portal_talentos_user -d portal_talentos_db

Passo 5: Verificação e Reinicialização

docker-compose -f docker-compose.prod.yml exec postgres psql -U portal_talentos_user -d portal_talentos_db -c "SELECT COUNT(*) FROM accounts_user;"

docker-compose -f docker-compose.prod.yml start backend worker beat

docker-compose -f docker-compose.prod.yml exec backend python manage.py check

5.3 Recuperação de Ataque Ransomware

Passo 1: Isolamento Imediato

sudo ufw deny from any
docker-compose -f docker-compose.prod.yml down

Passo 2: Documentação do Incidente

  • Capturar screenshots
  • Salvar logs
  • Registrar timeline

Passo 3: Análise Forense

docker logs portal-talentos-backend-1 > /evidence/backend_logs.txt
sudo cp -r /var/log /evidence/system_logs

Passo 4: Restauração em Ambiente Limpo

# Em servidor limpo/novo
git clone https://github.com/Tav-Web/portal-talentos.git /opt/portal-talentos

# Restaurar backup de data anterior ao ataque
# Aplicar patches de segurança antes de colocar online

Passo 5: Verificação de Segurança

  • Trocar todas as senhas e tokens
  • Revogar e regenerar certificados
  • Verificar integridade do código

6. Plano de Comunicação

6.1 Templates de Comunicação

Template: Comunicação Inicial de Incidente

ASSUNTO: [SEVERIDADE] - Incidente no Sistema Acesso ao Emprego

SITUAÇÃO: [Em investigação / Identificado / Em resolução]

DATA/HORA: [Timestamp]

IMPACTO:
- Serviços afetados: [Lista de serviços]
- Usuários impactados: [Estimativa]
- Funcionalidades indisponíveis: [Lista]

AÇÕES EM ANDAMENTO:
- [Ação 1]
- [Ação 2]

PRÓXIMA ATUALIZAÇÃO: [Data/hora]

Equipe de Resposta a Incidentes

Template: Atualização de Status

ASSUNTO: [ATUALIZAÇÃO] - Incidente no Sistema Acesso ao Emprego

STATUS ATUAL: [Progresso]

TIMELINE:
- [HH:MM] - Ação realizada
- [HH:MM] - Ação realizada

PREVISÃO DE RESOLUÇÃO: [Estimativa]

PRÓXIMA ATUALIZAÇÃO: [Data/hora]

Template: Resolução de Incidente

ASSUNTO: [RESOLVIDO] - Incidente no Sistema Acesso ao Emprego

O incidente foi resolvido às [HH:MM].

CAUSA RAIZ:
[Descrição técnica da causa]

RESOLUÇÃO:
[Descrição das ações tomadas]

IMPACTO TOTAL:
- Duração: [X horas/minutos]
- Serviços afetados: [Lista]
- Dados perdidos: [Se aplicável]

AÇÕES PREVENTIVAS:
- [Ação 1]
- [Ação 2]

LIÇÕES APRENDIDAS:
[Breve descrição]

Equipe de Resposta a Incidentes

6.2 Lista de Distribuição

GrupoQuando NotificarCanal
Equipe TécnicaTodos os incidentesSlack/WhatsApp
Gestão TISeveridade Alta/CríticaEmail + Telefone
Usuários InternosImpacto > 30 minEmail
Gestão ExecutivaSeveridade CríticaTelefone

7. Testes do Plano

7.1 Cronograma de Testes

Tipo de TesteFrequênciaResponsávelPróxima Data
Restauração de BackupMensalDBA[Data]
Simulação de FailoverTrimestralInfraestrutura[Data]
Teste de DR CompletoSemestralCoordenador[Data]
Revisão do PlanoAnualTodos[Data]

7.2 Checklist de Teste de Recuperação

  • Backup mais recente identificado
  • Download do backup executado com sucesso
  • Descriptografia do backup validada
  • Restauração em ambiente de teste concluída
  • Integridade dos dados verificada
  • Aplicação funcionando corretamente
  • Tempo de recuperação dentro do RTO
  • Documentação do teste atualizada

7.3 Registro de Testes

DataTipoResultadoTempoObservações
[Data]Restauração DBSucesso/Falha[X min][Notas]

8. Manutenção do Plano

8.1 Gatilhos de Revisão

O plano deve ser revisado quando:

  • Ocorrer mudança significativa na infraestrutura
  • Após qualquer incidente de severidade alta ou crítica
  • Mudança na equipe de resposta
  • Novos requisitos regulatórios
  • Pelo menos uma vez por ano

8.2 Controle de Versões

VersãoDataAlteraçãoAutor
1.0.0Jan/2026Versão inicial[Nome]

9. Anexos

9.1 Diagrama de Recuperação

9.2 Contatos de Emergência Externos

ServiçoContatoFinalidade
Provedor de Nuvem[Número/Chat]Suporte de infraestrutura
Registrador de Domínio[Contato]Problemas de DNS
Certificadora SSL[Contato]Problemas de certificado
ISP[Contato]Problemas de conectividade

Este documento é confidencial e deve ser tratado de acordo com a política de segurança da informação.