fbpx

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版をご検討ください!

New call-to-action

New call-to-action

Author

MongoDB日本語サポート担当。ジムで筋トレするのが大好きです。

airu hashimotoの記事一覧

新規CTA