Torna al blog

Dall’IT all’OT: esempio di piattaforma SCADA con Ansible

Use Ansible to standardize SCADA server changes without expanding OT risk. This guide covers inventories, idempotent playbooks, staged testing, credentials, logging, and practical rollback controls.

Un moderno ambiente di sistema SCADA/DCS comprende infrastrutture IT e OT, inclusi server, workstation, switch/router di rete, PLC, RTU e IED, che possono essere configurati e ottimizzati con una piattaforma software centralizzata. Ansible è uno strumento semplice e potente utilizzato per distribuire sistemi SCADA. Può automatizzare la distribuzione di applicazioni su più server o dispositivi, configurare database, impostare protocolli di comunicazione e avviare e arrestare servizi cruciali.

In questo esempio, utilizzeremo una semplice piattaforma di automazione per impartire comandi da remoto a una coppia di server. Sebbene l'ambito sia limitato, questa panoramica di alto livello può essere abbinata ad altri tutorial per lavorare direttamente con PLC e apparecchiature a livello di campo, creando un sistema SCADA più completo.

 

Che cos'è una piattaforma di automazione SCADA?

Red Hat Ansible, come altre piattaforme, è una piattaforma di automazione open source senza agenti che consente agli utenti e agli amministratori di sistema di automatizzare attività ripetitive come la configurazione dei dispositivi, l'installazione di pacchetti, la distribuzione di applicazioni SCADA, la copia di file e la configurazione di rete su più nodi contemporaneamente. Nell'ambiente Ansible, le attività da eseguire su host diversi vengono scritte in un formato leggibile dagli esseri umani chiamato playbook, facile da leggere e da comprendere per l'infrastruttura distribuita.

Ansible è un programma basato su Python con un ricco ecosistema di plugin. Il tipo di plugin più potente è un modulo, che costituisce il vero esecutore delle attività. Gli altri tipi di plugin sono inventario e connessione.

 

Infrastruttura della rete degli host

Figura 1. Il pacchetto principale di Ansible è installato sul nodo di controllo, che può gestire gli host dell'inventario costituiti da server e switch di rete.

 

Il principale punto di forza di Ansible è il supporto multipiattaforma, che include Linux, Windows e gli ambienti cloud virtuali e fisici. Possiamo gestire host diversi (RHEL, Ubuntu e Windows) con un singolo playbook.

Come descritto, i playbook di Ansible scritti in YAML sono facili da leggere e comprendere nel loro formato di testo semplice. Ogni aspetto dell'infrastruttura IT può essere descritto e documentato. Uno dei suoi principali vantaggi è il supporto agli inventari dinamici degli host, il che significa che l'elenco dei computer host gestiti può essere aggiornato dinamicamente. Può integrarsi facilmente con altri sistemi di terze parti, come Jenkins o Red Hat Satellite, oltre che con altri sistemi.

 

L'architettura di Ansible, Ansible operativo e i playbook

Il pacchetto principale di Ansible può essere installato su qualsiasi macchina Linux, ma non può essere installato su Windows a causa della sua dipendenza da Python. Ansible è agentless, ovvero non è necessario installare software aggiuntivo sugli host gestiti. Ansible di solito si connette agli host gestiti utilizzando OpenSSH (host Linux) e WinRM; pertanto è più sicuro ed efficiente rispetto ad altre alternative.

 

Nodo di controllo o controller Ansible

Il computer su cui è installato il pacchetto Ansible è chiamato controller Ansible, talvolta indicato anche come nodo di controllo. Dal nodo di controllo possiamo automatizzare server, workstation, dispositivi di rete e persino infrastrutture cloud pubbliche e private. Ansible non può essere installato sui computer Windows; nonostante ciò, può automatizzare e gestire un host Windows. Ansible è potente e sicuro, poiché non è necessario installare alcun pacchetto o agente aggiuntivo sugli host gestiti.

 

Host dell’inventario

L’elenco dei sistemi gestiti da Ansible è chiamato inventario degli host o host gestiti. Nel file degli host dell’inventario organizziamo i sistemi in gruppi in base alla posizione geografica, alle piattaforme e così via, inserendo il nome host e l’indirizzo IP del nodo. In questo modo Ansible fa riferimento ai sistemi.

 

Plugin Ansible

Per Ansible sono stati creati numerosi plugin; uno dei principali è il modulo, cioè l’operatore effettivo che esegue l’attività. Un playbook Ansible è un file YAML. YAML è facile da leggere e comprendere e viene spesso utilizzato per scrivere file di configurazione. Il playbook Ansible contiene un elenco di play oppure un singolo play. È interessante notare che YAML originariamente significava “Yet Another Markup Language”, poiché è stato sviluppato nell’epoca di altri linguaggi come HTML e XML, ma ha una sintassi più semplice.

 

Plugin Ansible

Figura 2. Il software Ansible è composto da numerosi plugin avanzati

 

Avere più di un “play” significa indirizzare un insieme diverso di host dell’inventario. Ogni play contiene attività, che sono gli operatori effettivi: copiare un file, aggiornare il software e installare pacchetti sui dispositivi remoti.

 

Plugin di inventario

Possiamo gestire gli host in diversi tipi di inventari. Un inventario può essere definito staticamente in un file di testo oppure ottenuto dinamicamente da fonti esterne.

 

Plugin di connessione

Questo plugin viene utilizzato per connettersi agli host gestiti. Definisce il modo in cui il controller Ansible si connette agli host gestiti. Per i sistemi Linux possiamo usare i plugin SSH per la connessione remota, mentre per i sistemi Windows si utilizzano i plugin WinRM.

 

Plugin Become

Come ci si connette agli host gestiti, come utente normale o come utente root/Administrator, per installare il software e avviare/arrestare i servizi essenziali? Questi plugin Become consentono ad Ansible di agire con determinati privilegi utente (come sudo) per “diventare” quell’utente e completare alcune attività.

 

Esempio: scrivere un playbook per installare il pacchetto HTTPD sugli host gestiti

In questo esempio utilizzeremo 3 macchine: una sarà il nodo di controllo, mentre le altre due saranno host dell'inventario gestiti dal nodo di controllo tramite Ansible. Il playbook installerà il pacchetto software httpd su 2 server applicativi SCADA. Per chi non lo conoscesse, httpd è un programma software che viene eseguito in background su un server HTTP.

  1. Chiamiamo la prima e la seconda macchina rispettivamente ‘server1’ e ‘server2’; fungeranno da nodi gestiti, mentre la terza macchina, denominata ‘workstation’, fungerà da nodo di controllo.
    nome host Indirizzo IP Versione del sistema operativo Pacchetto Ansible
    server1 192.168.10.40 Versione RHEL 9.3 Non richiesto
    server2 192.168.10.41 Versione RHEL 9.3 Non richiesto
    workstation 192.168.10.50 Versione RHEL 9.3 Ansible core 2.14.9
  2. Il modo più semplice per trovare il nome host e la versione del sistema operativo di tutte le 3 macchine menzionate in precedenza consiste nell'utilizzare il comando ‘hostname’ e leggere il contenuto del file “redhat-release” nella directory ‘/etc’.

    Identificazione del nome della workstation

    Verifica della versione

  3. Sul nodo di controllo ‘workstation’ è installata la versione 2.14 del pacchetto Ansible core e il comando ‘Ansible --version’ viene utilizzato per trovare la versione del pacchetto Ansible.

    Verifica della versione di Ansible

  4. Esegui il ping di entrambi i server per verificare la comunicazione tra il nodo di controllo e gli host dell'inventario.

    Ping dei server per verificare la comunicazione

  5. La gerarchia della directory del progetto contiene i file necessari per eseguire un playbook.
    • playbook.yml: le attività sono scritte per installare il software del server web httpd sugli host gestiti, ovvero server1 e server2.
    • Ansible.cfg
    • group_vars/appservers/var.yml: file per definire le variabili relative a un gruppo specifico
    • host_vars/server1/vars.yml e server2/vars.yml: definiscono le variabili per ciascun server.
    • linux: file di inventario

    Ambito del progetto YAML

    Figura 3. La directory del progetto contiene il file di inventario, playbook.yml e group_vars per definire le variabili

     

  6. Come mostrato nella Figura 3, il codice di playbook.yml verifica innanzitutto che httpd sia installato nella versione più recente, quindi abilita il servizio httpd e distribuisce il contenuto nel file index.html.
  7. Verifica la presenza di eventuali errori di sintassi prima di eseguire il playbook utilizzando il seguente comando: ‘Ansible-playbook playbook.yml --syntax-check’

    Verifica degli errori di sintassi

  8. Se non vengono rilevati errori, esegui il playbook Ansible, che installerà il pacchetto software httpd sugli host gestiti. Ansible esegue le attività passo dopo passo, come mostrato di seguito:

    Fasi e avanzamento dell'esecuzione del progetto

  9. Ora verifichiamo che le modifiche siano state applicate correttamente sugli host gestiti. Le schermate seguenti confermano che il pacchetto httpd è stato installato su ciascun server e che il contenuto è stato scritto correttamente nel file.

    Verifica del server 1

    Verifica del server 2

Partendo da questo semplicissimo esempio, ora possiamo installare software, copiare file, configurare servizi e impostare database su un singolo server o persino su migliaia di server utilizzando un unico playbook.

 

Tutte le immagini sono utilizzate per gentile concessione dell'autore

Lascia un commento

Si prega di notare che, prima di essere pubblicati, i commenti devono essere approvati.