Med mange slags data, der er gemt i databasen, kan vi nogle gange beskæftige os med fortrolige data, som kan omfatte kreditkortdata, økonomiske data, personlige oplysninger. Disse PII-data (Personal Identificable Information) er underlagt regulering, f.eks.:PCI DSS, HIPAA eller GDPR, som vi har brug for for at beskytte og sikre fortrolighed, integritet og tilgængelighed.
Datakryptering er en del af arkitekturen af MongoDB til sikkerhedsimplementering i produktionsmiljøer. Formålet med datakryptering er at tilføje flere sikkerhedsforanstaltninger for datasikkerheden, især fra insidertrusler. Vi låser databasens service og porte ned, vedligeholder en adgangskontrolliste over, hvem der kan få adgang til og udføre hvilke operationer i databasen, og aktiverer kryptering for at beskytte mod sniffning under netværkstransmission, eller når dataene lagres. I denne blog vil vi diskutere, hvordan man bruger kryptering i MongoDB.
Datakryptering i transit
Datakryptering under overførsel sikrer, at MongoDB-data er sikret mellem klienterne (dvs. applikationsserveren) og databaseserveren og mellem databaseserverne i MongoDB ReplicaSet- eller ShardedCluster-arkitekturen. MongoDB bruger SSL/TLS-certifikater, enten genereret som selvsignerede certifikater eller certifikater, der er udstedt af certifikatmyndigheden.
Den bedste måde er at bruge certifikatet fra en certifikatmyndighed, fordi det vil give MongoDB-drivere mulighed for at tjekke værten hos certifikatmyndigheden, hvilket betyder, at der vil være en validering af serveridentitet for at undgå man-in -midten angreb. Du kan stadig bruge det selvsignerede certifikat i et betroet netværk.
MongoDB SSL/TLS-kryptering skal bruge TLS/SSL-kryptering med minimum 128-bit nøgle. Fra MongoDB version 4.2 og nyere er der en ny parameter kaldet net.tls. Det giver samme funktionalitet som net.ssl. Konfigurationen i filen mongod.conf som vist nedenfor:
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
Hvis vi vil tilføje klientcertifikatvalidering, skal vi blot tilføje parameter CAFile som følger:
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caClientCert.pem
Med ovenstående konfiguration kræver MongoDB SSL/TLS-forbindelser gyldige certifikater fra klienterne, og klienten skal angive SSL/TLS-forbindelse og præsentere certifikatnøglefilerne.
I ovenstående konfiguration bruger vi net.tls, som findes på MongoDB 4.2. Til ovenstående version kan vi bruge net.ssl-konfigurationen som vist nedenfor:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
Og tilføjelse af klientcertifikatvalidering svarer til net.tls-konfigurationen. Tilføj blot parameteren CAFile som vist nedenfor:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caClientCert.pem
Datakryptering i hvile
Når vi taler om datakryptering i hvile, er der flere metoder til MongoDB datakryptering, som er:
-
Database Storage Engine-kryptering
MongoDB leverer indbygget kryptering på WiredTiger-lagringsmotoren. Datarestkrypteringen kræver beskyttelse af dataene med to nøgler, som er hovednøgle, der bruges til at kryptere dataene, og hovednøgle, der bruges til at kryptere databasenøglerne. Krypteringen bruger AES256-CBC Advanced Encryption Standard. Den bruger asymmetriske nøgler, som er den samme nøgle til kryptering og dekryptering af data. Den er kun tilgængelig i Enterprise Edition fra og med version 3.2 og nyere.
Percona Server til MongoDB har datakryptering i hvile, som kommer som en del af open source-serveren, introduceret fra version 3.6. Den aktuelle udgivelse inkluderer ikke Key Management Interoperability Protocol (KMIP) eller Amazon KMS. Vi kan bruge en lokal nøglefil eller en tredjeparts nøgleadministrationsserver såsom Hashicorp Vault.
Parameteren i Percona Server for MongoDB relateret til kryptering er encryptionCipherMode, som vi kan konfigurere ved at vælge en af følgende chiffertilstande:
-
AES256-CBC
-
AES256-GCM
Standardkrypteringen er AES256-CBC, hvis du ikke eksplicit har anvendt en af ovenstående. Vi kan aktivere data ved hvile-kryptering på den nye Percona Server til MongoDB-installation, men den understøtter ikke eksisterende MongoDB-tjenester.
-
Disk/lagerkryptering
Lagringskrypteringen er kryptering af lagermediet. Vi kan bruge Linux-baseret diskkryptering såsom LUKS til at kryptere diskens datavolumen, eller hvis vi bruger et skymiljø, kan der være en krypteringsmulighed. For eksempel er det i AWS muligt at have krypteret bloklagring såvel som S3-lager.
-
API-baseret kryptering
Den API-baserede kryptering bruger tredjeparts krypteringssoftware, eller applikationen giver en algoritme til at kryptere dataene, før de gemmes i MongoDB-databasen. Hele processen håndteres af applikationslaget.