MongoDBの暗号化機能について初心者目線で解説!
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
サイバー攻撃によって大事なデータが流出するといったニュースをよく聞きます。セキュリティ対策は徹底して行うべきだと改めて思います。
クリエーションラインではMongoDBの日本語テクニカルサポートを提供しております。
その中でも、暗号化についてのお問い合わせを頂くことが増えてきました。
そこで今回は、暗号化機能のメリットを分かりやすくまとめてみました!
参考:https://www.mongodb.com/products/capabilities/security/encryption
【目次】暗号化機能
転送時
- TLS (Transport Layer Security)
- ネットワーク上を移動する (アプリケーション⇔データーベースサーバのアクセス) 全データの暗号化をサポート
- ネットワーク上を移動するデータを保護することで、第三者からのデータの盗聴、改ざんリスクを軽減させる
- 信頼できる認証局によって署名された証明書が必要
※TLSの仕様で、証明書にSANが含まれていないとエラーになるようになっている (詳細)
【大まかな流れ】
① 認証局 (以下、CA) でクライアント証明書と、レプリカセットを構成する3台分 (プライマリ1台、セカンダリ2台) のサーバー証明書を作成
② クライアント情報をレプリカセットに登録
③ クライアントのみが暗号化通信を解読できる状態のため、盗聴され情報が盗まれても、暗号化を解読できない
※MongoDBにおけるTLS証明書の取扱いについては、以下のドキュメントをご覧ください
https://www.mongodb.com/docs/manual/tutorial/configure-ssl/
保存時
- ストレージエンジンの暗号化
- WiredTiger※1 ストレージエンジン※2 (簡単に言うとファイルを保存する所) に貯められる全てのデータファイルを暗号化
- 暗号化されていないデータはメモリ (後述するQueryable暗号で暗号化可) と、送信中 (TLSで対処可) のみのデータ
- ストレージエンジンごと暗号化するので、データベースはもちろんバックアップファイル※3 も含めてまるごと暗号化
- データベース、バックアップファイルを盗み見られることを防ぐので、データの漏洩リスクを軽減させる
※1 WiredTiger:MongoDBが2014年に買収したストレージエンジンで、MongoDBのストレージエンジンはこれがデフォルトで使われている
※2 ストレージエンジン:DBを操作する際にデータを処理する所
※3 バックアップファイル:バックアップしたデータが入っているファイル
監査ログも暗号化可能 ※EAでのみ使用可
(監査ログ:CRUD操作、レプリカセット&シャードクラスターなどの操作を記録する機能)
【大まかな流れ】
① データを暗号化してストレージエンジンに保存
② 暗号化したデータを復号化してデータを取得 (当事者以外はデータが見れない状況)
使用時
- Client-Side Field Level暗号
- クライアント側で機密データを、データベースに保存する前に暗号化する機能
※1 鍵データ:暗号化されているデータと紐づけのあるデータ(Amazon Web Service等のKey Management Service (KMS)という機能が使われている)
※2 MongoDBドライバー:データベースと繋げ、クエリをMongoDBサーバに送り、データを送受(様々なプログラミング言語に対応している)
【KMSの仕組み】
① クエリ文が、暗号化されているデータと関わっているかMongoDBドライバーが検証
② 関わっていると分かれば、MongoDBドライバーがKMSの暗号化キーにリクエストを投げる
③ ①のクエリ文を暗号化するためのキーをドライバーに返す
- Queryable暗号
- MongoDB 7.0から一般提供開始
- 暗号化されたままなのに、クエリ検索が可能(公式ドキュメントによると業界初らしい!!)
- ストレージエンジンの暗号化ではではカバーしきれなかった、メモリからデータを読み取られないようにする事が可能
【Client-Side Field Level暗号との違い】
- データの暗号化方法
- Client-Side Field Level暗号:特定のテキストとキーに対して常に同じ暗号文を生成
- Queryable暗号:常にランダムな暗号文を生成
- セキュリティ
- Client-Side Field Level暗号:カーディナリティ※1 が低い場合推論攻撃※2 を受ける可能性がある
- Queryable暗号:カーディナリティが低くても推論攻撃を受けない
※1 カーディナリティ:データベースに含まれるデータの種類の多さ (【例】性別の場合カーディナリが低くなる)
※2 推論攻撃:悪い人がデータベースに実際にアクセスすることなく、既に知っている情報から関連するデータを推論するというデータマイニング
最後に
暗号化機能について、腑に落ちるのが個人的に難しくて自分なりにまとめてみました...。暗号化ってなんかめっちゃムズカシイ。
因みにこの暗号化の機能はEAの機能で使うことができます! (EA版だと日本語サポートや監査ログの機能等もついてきます)
EAを使うことで、どのライフサイクル (使用中、バックアップ中、保存中、転送中) でも暗号化された状態になります。これは最強の技術制御と言えます!
ぜひセキュリティ対策にEA版をご検討ください!