С много видове данни, съхранявани в базата данни, понякога може да имаме работа с поверителни данни, които могат да включват данни от кредитни карти, финансови записи, лична информация. Тези данни за PII (лична идентификационна информация) подлежат на регулиране, напр.:PCI DSS, HIPAA или GDPR, които са ни необходими, за да защитим и гарантираме поверителността, целостта и наличността.
Шифроването на данни е част от архитектурата на MongoDB за внедряване на сигурност в производствени среди. Целта на криптирането на данни е добавяне на повече гаранции за сигурността на данните, особено от вътрешни заплахи. Ние заключваме услугата и портовете на базата данни, поддържаме списък за контрол на достъпа за това кой може да осъществява достъп и кои операции в базата данни и позволяваме криптиране за защита от подслушване по време на мрежово предаване или когато данните се съхраняват. В този блог ще обсъдим как да използваме криптиране в MongoDB.
Шифроване на данни при предаване
Шифроването на данни при преминаване гарантира, че данните на MongoDB са защитени между клиентите (т.е. сървър на приложения) и сървъра на база данни и между сървърите на база данни в архитектурата MongoDB ReplicaSet или ShardedCluster. MongoDB използва SSL/TLS сертификати, генерирани като самоподписани сертификати или сертификати, издадени от сертифициращия орган.
Най-добрият начин е да използвате сертификата от сертифициращ орган, защото той ще позволи на драйверите на MongoDB да проверят хоста със сертифициращия орган, което означава, че ще има валидиране на идентичността на сървъра, за да се избегне влизане -средната атака. Все още можете да използвате самоподписания сертификат в надеждна мрежа.
SSL/TLS криптирането на MongoDB трябва да използва TLS/SSL шифрове с минимум 128-битов ключ. Започвайки от MongoDB версия 4.2 и по-нова, има нов параметър, наречен net.tls. Той предоставя същата функционалност като net.ssl. Конфигурацията във файла mongod.conf, както е показано по-долу:
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
Докато, ако искаме да добавим валидиране на клиентски сертификат, просто трябва да добавим параметър CAFile, както следва:
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caClientCert.pem
С горната конфигурация, MongoDB SSL/TLS връзките изискват валидни сертификати от клиентите и клиентът трябва да посочи SSL/TLS връзка и да представи файловете с ключ на сертификата.
В горната конфигурация използваме net.tls, който съществува в MongoDB 4.2. За горната версия можем да използваме net.ssl конфигурация, както е показано по-долу:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
И добавянето на валидиране на клиентски сертификат е подобно с конфигурацията на net.tls. Просто добавете параметъра CAFile, както е показано по-долу:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caClientCert.pem
Криптиране на данни в покой
Като говорим за криптиране на данни в покой, има няколко метода за криптиране на данни в MongoDB, които са:
-
Криптиране на машината за съхранение на база данни
MongoDB осигурява естествено криптиране на механизма за съхранение на WiredTiger. Шифроването на остатъка от данни изисква защита от два ключа за данните, които са главен ключ, използван за криптиране на данните, и главен ключ, използван за криптиране на ключовете на базата данни. Шифроването използва AES256-CBC Advanced Encryption Standard. Той използва асиметрични ключове, които са един и същи ключ за криптиране и декриптиране на данните. Предлага се само в Enterprise Edition, започвайки от версия 3.2 и по-нова.
Percona Server за MongoDB има криптиране на данни в покой, което идва като част от сървъра с отворен код, въведен от версия 3.6. Настоящата версия не включва протокола за оперативна съвместимост за управление на ключове (KMIP) или Amazon KMS. Можем да използваме локален ключов файл или сървър за управление на ключове на трета страна, като например Hashicorp Vault.
Параметърът в Percona Server за MongoDB, свързан с криптирането, е encryptionCipherMode, който можем да конфигурираме, като изберем един от следните режими на шифроване:
-
AES256-CBC
-
AES256-GCM
Шифърът по подразбиране е AES256-CBC, ако не сте приложили изрично едно от горните. Можем да активираме криптиране на данни в покой на новия Percona Server за инсталация на MongoDB, но той не поддържа съществуващи услуги на MongoDB.
-
Шифроване на диск/съхранение
Криптирането на съхранение е криптирането на носителя за съхранение. Можем да използваме базирано на Linux криптиране на диск, като LUKS, за да криптираме обема на данните на диска, или ако използваме облачна среда, може да има опция за криптиране. Например в AWS е възможно да имате криптирано блоково хранилище, както и съхранение на S3.
-
Криптиране, базирано на API
Криптирането, базирано на API, използва софтуер за криптиране на трети страни или приложението предоставя алгоритъм за криптиране на данните, преди да бъдат съхранени в базата данни MongoDB. Целият процес се управлява от слоя на приложението.