Med många typer av data lagrade i databasen kan vi ibland ha att göra med konfidentiella uppgifter, som kan inkludera kreditkortsuppgifter, ekonomiuppgifter, personlig information. Dessa PII-data (Personal Identifiable Information) är föremål för reglering, t.ex.:PCI DSS, HIPAA eller GDPR som vi behöver för att skydda och säkerställa konfidentialitet, integritet och tillgänglighet.
Datakryptering är en del av arkitekturen av MongoDB för säkerhetsimplementering i produktionsmiljöer. Syftet med datakryptering är att lägga till fler skyddsåtgärder för datasäkerheten, särskilt från insiderhot. Vi låser databasens tjänst och portar, upprätthåller en åtkomstkontrolllista över vem som kan komma åt och utföra vilka operationer i databasen, och möjliggör kryptering för att skydda mot sniffning under nätverksöverföring eller när data lagras. I den här bloggen kommer vi att diskutera hur man använder kryptering i MongoDB.
Datakryptering under transport
Datakryptering under överföring säkerställer att MongoDB-data är säkrad mellan klienterna (d.v.s. applikationsservern) och databasservern och mellan databasservrarna i MongoDB ReplicaSet- eller ShardedCluster-arkitekturen. MongoDB använder SSL/TLS-certifikat, antingen genererade som självsignerade certifikat eller certifikat som är utfärdade av certifikatutfärdaren.
Det bästa sättet är att använda certifikatet från en certifikatutfärdare, eftersom det kommer att tillåta MongoDB-drivrutiner att kontrollera värden med certifikatutfärdaren vilket innebär att det kommer att ske en validering av serveridentitet för att undvika man-in -mittattacken. Du kan fortfarande använda det självsignerade certifikatet i ett pålitligt nätverk.
MongoDB SSL/TLS-kryptering måste använda TLS/SSL-chiffer med minst 128-bitars nyckel. Från och med MongoDB version 4.2 och senare finns det en ny parameter som heter net.tls. Det ger samma funktionalitet som net.ssl. Konfigurationen i filen mongod.conf som visas nedan:
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
Om vi vill lägga till klientcertifikatvalidering behöver vi bara lägga till parametern CAFile enligt följande:
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caClientCert.pem
Med ovanstående konfiguration kräver MongoDB SSL/TLS-anslutningar giltiga certifikat från klienterna och klienten måste ange SSL/TLS-anslutning och presentera certifikatnyckelfilerna.
I ovanstående konfiguration använder vi net.tls som finns på MongoDB 4.2. För ovanstående version kan vi använda net.ssl-konfigurationen som visas nedan:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
Och att lägga till klientcertifikatvalidering är liknande med net.tls-konfigurationen. Lägg bara till parametern CAFile som visas nedan:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caClientCert.pem
Datakryptering i vila
Att tala om datakryptering i vila, det finns flera metoder för MongoDB-datakryptering som är:
-
Databas Storage Engine-kryptering
MongoDB tillhandahåller inbyggd kryptering på WiredTiger-lagringsmotorn. Datarestkrypteringen kräver två nycklarskydd för data, vilka är huvudnyckeln som används för att kryptera data och huvudnyckeln som används för att kryptera databasnycklarna. Krypteringen använder AES256-CBC Advanced Encryption Standard. Den använder asymmetriska nycklar som är samma nyckel för att kryptera och dekryptera data. Den är endast tillgänglig i Enterprise Edition från och med version 3.2 och senare.
Percona Server för MongoDB har datakryptering i vila som kommer som en del av servern med öppen källkod, introducerad från version 3.6. Den aktuella versionen inkluderar inte Key Management Interoperability Protocol (KMIP) eller Amazon KMS. Vi kan använda en lokal nyckelfil eller en tredje parts nyckelhanteringsserver som Hashicorp Vault.
Parametern i Percona Server för MongoDB relaterad till kryptering är encryptionCipherMode som vi kan konfigurera genom att välja ett av följande chifferlägen:
-
AES256-CBC
-
AES256-GCM
Standardchifferet är AES256-CBC om du inte uttryckligen tillämpade något av ovanstående. Vi kan aktivera kryptering av data i vila på den nya Percona Server för MongoDB-installationen, men den stöder inte befintliga MongoDB-tjänster.
-
Disk-/lagringskryptering
Lagringskrypteringen är krypteringen av lagringsmediet. Vi kan använda Linux-baserad diskkryptering som LUKS för att kryptera datavolymen på disken, eller om vi använder en molnmiljö kan det finnas ett krypteringsalternativ. Till exempel, i AWS är det möjligt att ha krypterad blocklagring såväl som S3-lagring.
-
API-baserad kryptering
Den API-baserade krypteringen använder tredje parts krypteringsmjukvara eller så tillhandahåller applikationen en algoritm för att kryptera data innan den lagras i MongoDB-databasen. Hela processen hanteras av applikationslagret.