Attualmente ho il seguente design:
- Server ospitato nel cloud centrale con un'API REST
- Più server remoti ciascuno con un'API REST
I dati vengono registrati dai server remoti al server centrale a intervalli regolari.
I comandi vengono inviati dal server centrale a singoli server remoti sotto forma di POST alla API REST in esecuzione sul server remoto.
Sono preoccupato per la sicurezza. La cosa più importante è impedire l'emissione di comandi non autorizzati ai server remoti.
Attualmente sto usando l'autenticazione basata su token. Ogni server remoto ha un token senza scadenza emesso dal server centrale che è memorizzato in un file di configurazione sul filesystem del server remoto. Questo token viene passato nell'intestazione di autorizzazione delle richieste POST provenienti dal server remoto.
L'altra direzione della comunicazione funziona in modo simile. Ogni server remoto genera un token per il server centrale che è archiviato in un database relazionale nella stessa rete del server cloud centrale.
I miei problemi con questo design:
- Se il database è compromesso, l'utente malintenzionato può impartire comandi ai dispositivi remoti: essenzialmente sto memorizzando le password in formato testo nel db
- Se il file system di un dispositivo remoto viene compromesso, l'utente malintenzionato accede al token
Quali sono i modi per migliorare questo progetto? La comunicazione dal server cloud centrale al dispositivo remoto non ha bisogno di essere una API REST. Sembra che quello di cui ho bisogno sia una specie di stretta di mano bidirezionale tra i due server. Come è possibile con una API REST?
Alcune note:
- Entrambe le restanti apis vengono pubblicate su HTTPS
- I dispositivi remoti spesso perdono la connettività Internet per periodi di tempo
- I dispositivi remoti sono a rischio di essere rubati fisicamente
Alcune cose che ho considerato:
- Potrei connettere tutti i server al database centrale ospitato e usarlo per la comunicazione. Questo non sembra ideale, perché questo sembra un rischio per la sicurezza di avere questi dispositivi remoti collegati direttamente al database. Inoltre, i server remoti spesso perdono la connettività.
- Limita l'accesso ai server remoti a una whitelist di indirizzi IP incluso il server remoto centrale