データベースにはさまざまな種類のデータが保存されているため、クレジットカードのデータ、財務記録、個人情報などの機密データを扱う場合があります。これらのPII(個人識別情報)データは規制の対象となります。たとえば、PCI DSS、HIPAA、GDPRなど、機密性、整合性、可用性を保護および確保する必要があります。
データ暗号化は、本番環境でのセキュリティ実装のためにMongoDBを設計することの一部です。データ暗号化の目的は、特に内部の脅威からのデータのセキュリティのためのより多くの保護手段を追加することです。データベースのサービスとポートをロックダウンし、データベースへのアクセスと操作を実行できるユーザーのアクセス制御リストを維持し、暗号化を有効にして、ネットワーク送信中またはデータの保存時にスニッフィングから保護します。このブログでは、MongoDBで暗号化を使用する方法について説明します。
転送中のデータ暗号化により、MongoDBデータがクライアント(つまり、アプリケーションサーバー)とデータベースサーバー間、およびMongoDBReplicaSetまたはShardedClusterアーキテクチャのデータベースサーバー間で保護されます。 MongoDBは、自己署名証明書または認証局によって発行された証明書として生成されたSSL/TLS証明書を使用します。
最良の方法は、認証局からの証明書を使用することです。これにより、MongoDBドライバーは認証局でホストをチェックできるようになります。つまり、中間者を回避するためにサーバーIDの検証が行われます。 -中間者攻撃。信頼できるネットワークで自己署名証明書を引き続き使用できます。
MongoDB SSL / TLS暗号化では、128ビット以上のキーを持つTLS/SSL暗号を使用する必要があります。 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接続を指定し、証明書キーファイルを提示する必要があります。
上記の構成では、MongoDB4.2に存在するnet.tlsを使用します。上記のバージョンでは、以下に示すように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ストレージエンジンでネイティブ暗号化を提供します。データレスト暗号化には、データの暗号化に使用されるマスターキーとデータベースキーの暗号化に使用されるマスターキーの2つのキー保護が必要です。暗号化はAES256-CBCAdvancedEncryptionStandardを使用します。データの暗号化と復号化に同じキーである非対称キーを使用します。バージョン3.2以降のEnterpriseEditionでのみ使用できます。
MongoDB用のPerconaサーバーには、バージョン3.6から導入されたオープンソースサーバーの一部として提供されるデータ暗号化が保存されています。現在のリリースには、Key Management Interoperability Protocol(KMIP)またはAmazonKMSは含まれていません。ローカルキーファイルまたはHashicorpVaultなどのサードパーティのキー管理サーバーを使用できます。
暗号化に関連するMongoDB用のPercona ServerのパラメーターはencryptionCipherModeであり、次の暗号モードのいずれかを選択して構成できます。
-
AES256-CBC
-
AES256-GCM
上記のいずれかを明示的に適用しなかった場合、デフォルトの暗号はAES256-CBCです。 MongoDBインストール用の新しいPerconaServerで保存データの暗号化を有効にすることはできますが、既存のMongoDBサービスはサポートしていません。
-
ディスク/ストレージの暗号化
ストレージの暗号化は、ストレージメディアの暗号化です。 LUKSなどのLinuxベースのディスク暗号化を使用してディスクのデータボリュームを暗号化できます。クラウド環境を使用する場合は、暗号化オプションがある可能性があります。たとえば、AWSでは、S3ストレージだけでなく暗号化されたブロックストレージも使用できます。
-
APIベースの暗号化
APIベースの暗号化では、サードパーティの暗号化ソフトウェアを使用するか、アプリケーションがデータをMongoDBデータベースに保存する前に暗号化するアルゴリズムを提供します。プロセス全体がアプリケーション層によって処理されます。