Capítulo 22 — Segurança de TO, IoT e sistemas ciberfísicos: automação
Mapa da aula
Aula 22 publicada. Mapa, exemplo, EX064.
flowchart TD
N0["22.1 O que automatizar"]
N1["22.2 Lendo o relatório"]
N2["22.3 Reporte, não altere"]
N3["22.4 Agendamento e registro"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX064"]
Desenho lógico
flowchart LR
N0["22.1 O que automatizar"]
N1["22.2 Lendo o relatório"]
N2["22.3 Reporte, não altere"]
N3["22.4 Agendamento e registro"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX064"]
[22.1 O que automatizar]
|
v
[22.2 Lendo o relatório]
|
v
[22.3 Reporte, não altere]
|
v
[22.4 Agendamento e registro]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX064]
Objetivos de aprendizagem
Você vai (1) automatizar verificações de rotina, como a expiração de certificados; (2) desenhar automações que reportam em vez de alterar sistemas de TO; (3) agendar e registrar tarefas automatizadas; e (4) tratar falhas da própria automação.
22.1 O que automatizar
Boas candidatas são verificações repetitivas com regras claras: expiração de certificados, conclusão de backups, deriva do inventário (o Capítulo 11 executado semanalmente), comparação de fluxos (o Capítulo 12 executado diariamente sobre capturas novas). Más candidatas são ações em controladores ativos; essas continuam manuais e aprovadas.
"""Lab 22: report days until expiry for synthetic IoT logger certificates."""
from datetime import date
today = date(2026, 10, 12)
certs = {"LOG-01": date(2026, 11, 2), "LOG-02": date(2027, 6, 30), "LOG-03": date(2026, 10, 5), "LOG-04": date(2026, 12, 20)}
for dev, exp in sorted(certs.items(), key=lambda kv: kv[1]):
d = (exp - today).days
flag = "EXPIRED" if d < 0 else "renew-now" if d <= 30 else "plan" if d <= 90 else "ok"
print(f"{dev} expires {exp} in {d:4} days -> {flag}")
Execute com python3 lab_certs.py. Saída verificada:
LOG-03 expires 2026-10-05 in -7 days -> EXPIRED
LOG-01 expires 2026-11-02 in 21 days -> renew-now
LOG-04 expires 2026-12-20 in 69 days -> plan
LOG-02 expires 2027-06-30 in 261 days -> ok
As verificações de Priya começam pela verificação de expiração de certificados acima; a primeira execução encontrou um certificado expirado e um com renovação devida. A verificação lê a expiração do certificado de cada registrador na exportação do fornecedor e classifica os registradores em expirado, renovar agora, planejar e ok. A primeira execução deu LOG-03 expirado, LOG-01 com 21 dias, LOG-04 com 69 dias e LOG-02 ok, com 261 dias.
22.2 Lendo o relatório
O certificado do LOG-03 expirou há uma semana, então esse registrador provavelmente está falhando ao conectar e há leituras faltando. O LOG-01 tem 21 dias restantes e precisa de renovação agora, dados os prazos do fornecedor. O LOG-04 deve ser planejado; o LOG-02 está bem. Ordenar pela data de expiração põe os itens urgentes primeiro. Priya agendou a verificação para as 06:00, diariamente. A primeira execução abriu chamados para o LOG-03 e o LOG-01. O fornecedor confirmou que o LOG-03 tinha parado de enviar dados em 5 de outubro; o gerente de qualidade registrou uma lacuna de sete dias nos registros da nuvem para aquela sala, coberta pelo histórico da sonda do CLP no HIST.
22.3 Reporte, não altere
O script imprime e poderia enviar o relatório por e-mail; ele não renova certificados sozinho. A renovação passa pelo processo do fornecedor, porque uma renovação automática que falhe pela metade poderia deixar um registrador offline. A verificação de Priya abre chamados; ela não age. O LOG-01, com 21 dias restantes, foi renovado pelo processo do fornecedor dentro da semana, e o chamado registra a nova data de expiração. Se o script tivesse tentado renovar o LOG-03 automaticamente e falhado pela metade, a NCS poderia ter perdido um segundo registrador sem saber. Manter o script apenas reportando também significa que ele não precisa de acesso de escrita ao portal do fornecedor, então as suas credenciais valem menos se o host de gerenciamento for comprometido.
22.4 Agendamento e registro
Execute a verificação diariamente a partir de um agendador num host de gerenciamento na VLAN de gerenciamento de TO, grave a saída num log com carimbos de tempo e alerte se a tarefa não tiver rodado. Uma falha silenciosa da automação é pior que nenhuma automação, porque as pessoas param de verificar manualmente. Na NCS, a tarefa roda no host de gerenciamento de TO às 06:00, registra cada execução com o seu carimbo de tempo, e o agendador gera um alerta se nenhuma linha de log aparecer até as 06:15. Esse alerta importa porque a verificação de certificados é hoje a única razão pela qual alguém olha as datas de expiração dos registradores.
Exemplo resolvido (NCS sintética)
Priya agenda a verificação para as 06:00, diariamente. A primeira execução dispara um chamado para o LOG-03 (expirado) e o LOG-01 (renovar agora). O fornecedor confirma que o LOG-03 parou de enviar dados em 5 de outubro; o gerente de qualidade registra uma lacuna de sete dias nos registros da nuvem para aquela sala, coberta pelo histórico da sonda do CLP no HIST.
Caso sintético — Northgate Cold Storage. As datas e os dispositivos são inventados.
Erros e limites
O script usa uma data "de hoje" fixa para que a sua saída seja reproduzível; uma versão de produção usaria a data atual. As datas dos certificados precisam vir dos dispositivos ou do fornecedor, e não de uma tabela digitada à mão.
Exercícios
- EX064 — Mudando os limiares. Se "renew-now" valesse para ≤ 60 dias, quais dispositivos mudariam de estado? Rubrica: 3 = nenhuma mudança de estado, com o LOG-04 ainda em "plan" aos 69 dias; 2 = conclusão certa, sem razão; 1 = diz que o LOG-04 vira renew-now; 0 = nada.
- EX065 — Usando a data real. Que mudança de linha faz o script usar a data atual, e o que se perde? Rubrica: 3 =
today = date.today(); a reprodutibilidade da saída documentada; 2 = um; 1 = vago; 0 = nada. - EX066 — Detectando uma falha silenciosa. Descreva como a NCS perceberia se a tarefa das 06:00 parasse de rodar. Rubrica: 3 = uma verificação de heartbeat/log esperado alerta quando nenhuma execução é registrada até o prazo; 2 = parcial; 1 = "alguém percebe"; 0 = nada.
Síntese
Automatize verificações que reportam com clareza e falham ruidosamente; mantenha as mudanças em dispositivos de TO em mãos humanas e aprovadas.
Continue estudando — capítulo 22 de 30
← Capítulo 21 · Índice de capítulos do curso · Capítulo 23 →
Siga para a próxima lição escrita.