S mnoha druhy dat uložených v databázi můžeme někdy pracovat s důvěrnými údaji, mezi které mohou patřit údaje o kreditních kartách, finanční záznamy a osobní údaje. Tyto údaje PII (Personal Identifiable Information) podléhají regulaci, např.:PCI DSS, HIPAA nebo GDPR, které musíme chránit a zajistit důvěrnost, integritu a dostupnost.
Šifrování dat je součástí architektury MongoDB pro implementaci zabezpečení v produkčních prostředích. Cílem šifrování dat je přidat další zabezpečení pro zabezpečení dat, zejména před hrozbami zevnitř. Uzamkneme službu a porty databáze, udržujeme seznam řízení přístupu, kdo může přistupovat k databázi a jaké operace s ní provádět, a umožňujeme šifrování, abychom chránili před sniffováním během síťového přenosu nebo při ukládání dat. V tomto blogu probereme, jak používat šifrování v MongoDB.
Šifrování dat při přenosu
Šifrování dat při přenosu zajišťuje zabezpečení dat MongoDB mezi klienty (tj. aplikačním serverem) a databázovým serverem a mezi databázovými servery v architektuře MongoDB ReplicaSet nebo ShardedCluster. MongoDB používá certifikáty SSL/TLS, buď vygenerované jako certifikáty s vlastním podpisem, nebo certifikáty, které vydává certifikační autorita.
Nejlepším způsobem je použít certifikát od certifikační autority, protože to umožní ovladačům MongoDB zkontrolovat hostitele u certifikační autority, což znamená, že dojde k ověření identity serveru, aby se zabránilo vniknutí - střední útok. Certifikát s vlastním podpisem můžete stále používat v důvěryhodné síti.
Šifrování MongoDB SSL/TLS musí používat šifry TLS/SSL s minimálně 128bitovým klíčem. Počínaje MongoDB verze 4.2 a vyšší je zde nový parametr nazvaný net.tls. Poskytuje stejné funkce jako net.ssl. Konfigurace v souboru mongod.conf, jak je znázorněno níže:
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
Pokud chceme přidat ověření klientského certifikátu, stačí přidat parametr CAFile takto:
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caClientCert.pem
S výše uvedenou konfigurací vyžadují připojení MongoDB SSL/TLS platné certifikáty od klientů a klient musí specifikovat připojení SSL/TLS a předložit soubory certifikátů.
Ve výše uvedené konfiguraci používáme net.tls, který existuje na MongoDB 4.2. Pro výše uvedenou verzi můžeme použít konfiguraci net.ssl, jak je uvedeno níže:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
Přidání ověření klientského certifikátu je podobné jako u konfigurace net.tls. Stačí přidat parametr CAFile, jak je znázorněno níže:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caClientCert.pem
Šifrování dat v klidu
Pokud mluvíme o šifrování dat v klidu, existuje několik metod šifrování dat MongoDB, které jsou:
-
Šifrování databázového úložiště
MongoDB poskytuje nativní šifrování na modulu úložiště WiredTiger. Šifrování datového zbytku vyžaduje ochranu dat dvěma klíči, kterými jsou hlavní klíč používaný k šifrování dat a hlavní klíč používaný k šifrování databázových klíčů. Šifrování používá AES256-CBC Advanced Encryption Standard. Používá asymetrické klíče, což je stejný klíč pro šifrování a dešifrování dat. Je k dispozici pouze ve verzi Enterprise Edition počínaje verzí 3.2 a vyšší.
Percona Server pro MongoDB má šifrování dat v klidu, které je součástí open source serveru, zavedeného od verze 3.6. Aktuální verze nezahrnuje protokol Key Management Interoperability Protocol (KMIP) ani Amazon KMS. Můžeme použít místní klíčový soubor nebo server pro správu klíčů třetí strany, jako je Hashicorp Vault.
Parametr v Percona Server pro MongoDB související se šifrováním je encryptionCipherMode, který můžeme nakonfigurovat výběrem jednoho z následujících režimů šifrování:
-
AES256-CBC
-
AES256-GCM
Výchozí šifra je AES256-CBC, pokud jste výslovně nepoužili jednu z výše uvedených možností. Můžeme povolit šifrování dat v klidu na nové instalaci Percona Server pro MongoDB, ale nepodporuje stávající služby MongoDB.
-
Šifrování disku/úložišť
Šifrování úložiště je šifrování úložného média. K šifrování datového objemu disku můžeme použít šifrování disku založené na Linuxu, jako je LUKS, nebo pokud používáme cloudové prostředí, může existovat možnost šifrování. Například v AWS je možné mít šifrované úložiště bloků i úložiště S3.
-
Šifrování založené na rozhraní API
Šifrování založené na rozhraní API používá šifrovací software třetí strany nebo aplikace poskytuje algoritmus pro šifrování dat před jejich uložením do databáze MongoDB. Celý proces je řízen aplikační vrstvou.