Con molti tipi di dati archiviati nel database, a volte potremmo avere a che fare con dati riservati, che potrebbero includere dati di carte di credito, dati finanziari, informazioni personali. Tali dati PII (Personal Identifiable Information) sono soggetti a normative, ad esempio:PCI DSS, HIPAA o GDPR di cui abbiamo bisogno per proteggere e garantire riservatezza, integrità e disponibilità.
La crittografia dei dati fa parte dell'architettura di MongoDB per l'implementazione della sicurezza negli ambienti di produzione. L'obiettivo della crittografia dei dati è aggiungere ulteriori garanzie per la sicurezza dei dati, in particolare dalle minacce interne. Blocchiamo il servizio e le porte del database, manteniamo un elenco di controllo degli accessi di chi può accedere ed eseguire quali operazioni nel database e abilitiamo la crittografia per proteggere dallo sniffing durante la trasmissione di rete o quando i dati vengono archiviati. In questo blog discuteremo come utilizzare la crittografia in MongoDB.
Crittografia dati in transito
La crittografia dei dati in transito garantisce che i dati MongoDB siano protetti tra i client (ad esempio, il server delle applicazioni) e il server del database e tra i server del database nell'architettura MongoDB ReplicaSet o ShardedCluster. MongoDB utilizza certificati SSL/TLS, generati come certificati autofirmati o certificati emessi dall'autorità di certificazione.
Il modo migliore è utilizzare il certificato di un'autorità di certificazione, perché consentirà ai driver MongoDB di controllare l'host con l'autorità di certificazione, il che significa che ci sarà una convalida dell'identità del server per evitare man-in -l'attacco medio. Puoi comunque utilizzare il certificato autofirmato in una rete attendibile.
La crittografia SSL/TLS MongoDB deve utilizzare i codici TLS/SSL con una chiave minima di 128 bit. A partire da MongoDB versione 4.2 e successive, c'è un nuovo parametro chiamato net.tls. Fornisce le stesse funzionalità di net.ssl. La configurazione nel file mongod.conf come mostrato di seguito:
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
Anche se vogliamo aggiungere la convalida del certificato client, dobbiamo solo aggiungere il parametro CAFile come segue:
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caClientCert.pem
Con la configurazione sopra, le connessioni SSL/TLS MongoDB richiedono certificati validi dai client e il client deve specificare la connessione SSL/TLS e presentare i file delle chiavi del certificato.
Nella configurazione precedente, utilizziamo net.tls che esiste su MongoDB 4.2. Per la versione precedente, possiamo utilizzare la configurazione net.ssl come mostrato di seguito:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
E l'aggiunta della convalida del certificato client è simile alla configurazione net.tls. Basta aggiungere il parametro CAFile come mostrato di seguito:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caClientCert.pem
Crittografia dati inattivi
Parlando di crittografia dei dati inattivi, esistono diversi metodi di crittografia dei dati MongoDB che sono:
-
Crittografia del motore di archiviazione del database
MongoDB fornisce la crittografia nativa sul motore di archiviazione WiredTiger. La crittografia del resto dei dati richiede la protezione di due chiavi per i dati, che sono la chiave master utilizzata per crittografare i dati e la chiave master utilizzata per crittografare le chiavi del database. La crittografia utilizza lo standard di crittografia avanzata AES256-CBC. Utilizza chiavi asimmetriche che è la stessa chiave per crittografare e decrittografare i dati. È disponibile solo in Enterprise Edition a partire dalla versione 3.2 e successive.
Percona Server per MongoDB ha la crittografia dei dati inattivi che fa parte del server open source, introdotto dalla versione 3.6. La versione corrente non include il Key Management Interoperability Protocol (KMIP) o Amazon KMS. Possiamo utilizzare un file di chiavi locale o un server di gestione delle chiavi di terze parti come Hashicorp Vault.
Il parametro in Percona Server per MongoDB relativo alla crittografia è encryptionCipherMode che possiamo configurare scegliendo una delle seguenti modalità di cifratura:
-
AES256-CBC
-
AES256-GCM
Il codice predefinito è AES256-CBC se non hai applicato esplicitamente uno dei precedenti. Possiamo abilitare la crittografia dei dati inattivi sul nuovo Percona Server per l'installazione di MongoDB, ma non supporta i servizi MongoDB esistenti.
-
Crittografia disco/archiviazione
La crittografia di archiviazione è la crittografia del supporto di archiviazione. Possiamo utilizzare la crittografia del disco basata su Linux come LUKS per crittografare il volume di dati del disco o, se utilizziamo un ambiente cloud, potrebbe esserci un'opzione di crittografia. Ad esempio, in AWS è possibile avere lo storage a blocchi crittografato e lo storage S3.
-
Crittografia basata su API
La crittografia basata su API utilizza software di crittografia di terze parti oppure l'applicazione fornisce un algoritmo per crittografare i dati prima che vengano archiviati nel database MongoDB. L'intero processo è gestito dal livello dell'applicazione.