Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

暗号化の設定

項目一覧

  • Overview
  • キー マネージャー
  • ローカル キー管理
  • 既存の保管中のデータの暗号化

このページでは、保管時の暗号化をサポートするためのサーバー構成について説明します。 MongoDB Atlas を使用する場合、データはすでに暗号化されています。MongoDB は MongoDB Atlas の暗号化をクラウドプロバイダーで管理しますが、独自のキー管理ソリューションを使用することもできます。詳細については、Atlas のキー管理のドキュメントを参照してください。

MongoDB Enterprise 3.2 では、WiredTiger ストレージ エンジンのネイティブ暗号化オプションが導入されています。Atlas 以外では、暗号化は WiredTiger ストレージ エンジンを使用するエンタープライズ インストールでのみ使用できます。

暗号化のキーを安全に管理することは、ストレージ暗号化にとって重要です。MongoDB は、MongoDB インストールにストアされていないマスター キーを使用します。 マスター キーのみが外部で管理され、他のキーは MongoDB インスタンスに保存できます。

MongoDB の暗号化ストレージ エンジンは、マスター キーの 2 つのキー管理オプションをサポートしています。

  • KMIP(Key Management Interoperability Protocol)を介してサードパーティのキーマネジメント機器と統合します。推奨

  • キーファイル経由でローカルキー管理の使用。

重要

MongoDB は既存のデータを暗号化できません。 新しいキーで暗号化を有効にすると、MongoDB インスタンスに既存のデータを含めることはできません。 MongoDB インストールにすでに既存のデータがある場合、追加の手順については、「 保管中の既存のデータの暗号化 」を参照してください。

MongoDB Enterprise は、互換性のあるキー管理アプライアンスを使用したキーの安全な転送をサポートします。キー マネージャーを使用すると、キーをキー マネージャーにストアできます。

MongoDB Enterprise は、Key Management Interoperability Protocol(KMIP)準拠のキー管理アプライアンスを使用したキーの安全な転送をサポートします。

MongoDB の認定パートナーの一覧については、パートナー リストを参照してください。

Tip

推奨

キー マネージャーの使用により HIPAA、PCI-DSS、FERPA などの規制キー管理ガイドラインに準拠し、これはローカル キー管理よりも推奨されます。

  • キー マネージャーは KMIP 通信プロトコルをサポートしている必要があります。

    デフォルトの KMIP プロトコル バージョンは1.2です。MongoDB サーバー構成ファイルで、KMIP バージョン1 . 0または1 . 1を使用するように MongoDB を構成できます。

  • KMIP を使用してサードパーティのマネジメント機器を統合する場合、次の KMIP 操作を許可する必要があります。

    • 作成(operation_create

    • 取得(operation_get

    • アクティブ化(operation_activate

  • MongoDB を KMIP サーバーに対して認証するには、キー管理アプライアンスによって発行された有効な証明書が必要です。

注意

Windows 上の MongoDB Enterprise では、保管時の暗号化のブロック暗号として AES256-GCM をサポートしなくなりました。この使用は、Linux でのみサポートされています。

キー マネージャーに接続するときに新しいキーを作成するには、次のオプションを使用して mongod を起動します。

バージョン 1.0 または 1.1 の KMIP サーバーに接続するには、--kmipUseLegacyProtocol オプションを使用します。

構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、 --bind_ipを指定します。

次の操作により、キー マネージャーに新しいマスター キーが作成されます。mongod はマスター キーを使用して、mongod が各データベースに対して生成するキーを暗号化します。

mongod --enableEncryption \
--kmipServerName <KMIP Server HostName> \
--kmipPort <KMIP server port> \
--kmipServerCAFile ca.pem \
--kmipClientCertificateFile client.pem

mongod では、起動時に KMIP サーバーへの接続を検証します。

--kmipServerName に指定するサーバー名は、KMIP サーバーで提示する証明書のサブジェクト代替名 SAN またはコモンネーム CN のいずれかと一致する必要があります。SAN はシステム名または IP アドレスにすることができます。

SAN が存在する場合、mongodCN との一致は試行しません。

KMIP サーバーのホスト名や IP アドレスが SAN とも CN とも一致しない場合、mongod は起動しません。

キーの作成と使用が成功したことを確認するには、ログファイルを確認します。成功した場合、プロセスでは次のメッセージがログに記録されます。

[initandlisten] Created KMIP key with id: <UID>
[initandlisten] Encryption key manager initialized using master key with id: <UID>

Tip

以下も参照してください。

KMIP サーバーがすでに管理している既存のマスター キーを使用できます。既存のキーを使用するには、mongod を起動して mongod をキー マネージャーに接続するときに、次のオプションを使用します。

バージョン 1.0 または 1.1 の KMIP サーバーに接続するには、--kmipUseLegacyProtocol オプションを使用します。

構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、 --bind_ipを指定します。

mongod --enableEncryption \
--kmipServerName <KMIP Server HostName> \
--kmipPort <KMIP server port> \
--kmipServerCAFile ca.pem \
--kmipClientCertificateFile client.pem \
--kmipKeyIdentifier <UID>

mongod では、起動時に KMIP サーバーへの接続を検証します。

--kmipServerName に指定するサーバー名は、KMIP サーバーで提示する証明書のサブジェクト代替名 SAN またはコモンネーム CN のいずれかと一致する必要があります。SAN はシステム名または IP アドレスにすることができます。

SAN が存在する場合、mongodCN との一致は試行しません。

KMIP サーバーのホスト名や IP アドレスが SAN とも CN とも一致しない場合、mongod は起動しません。

Tip

以下も参照してください。

重要

キーファイル メソッドを使用することは、ほとんどの規制キー管理ガイドラインを満たしていないため、ユーザーは自分のキーを安全に管理する必要があります。

キーファイルの安全な管理は重要です。

キーファイルを使用して暗号化するには、16 文字または 32 文字の文字列を 1 つ含み base64 でエンコードされたキーファイルが必要です。キーファイルにアクセスできるのは、mongod プロセスの所有者のみである必要があります。

  1. 16 文字または 32 文字の文字列で base64 でエンコードされたキーファイルを作成します。キーファイルを生成するには、任意の方法を使用できます。たとえば、

    openssl rand -base64 32 > mongodb-keyfile
  2. ファイルのアクセス許可をアップデートします。

    chmod 600 mongodb-keyfile
  3. キーファイルを使用するには、次のオプションで mongod を開始します。

    • --enableEncryption,

    • --encryptionKeyFile <path to keyfile>,

    mongod --enableEncryption --encryptionKeyFile mongodb-keyfile

    構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、 --bind_ipを指定します。

  4. 暗号化キー マネージャーがキーファイルを使用して正常に初期化されたかどうかを確認します。操作が成功した場合、成功した場合、プロセスでは次のメッセージがログに記録されます。

    [initandlisten] Encryption key manager initialized with key file: <path to keyfile>

Tip

以下も参照してください。

MongoDB は既存のデータを暗号化できません。新しいキーで暗号化を有効にすると、MongoDB インスタンスに既存のデータを含めることはできません。

既存のデータを含むレプリカセットを使用している場合は、ローリングの最初の同期を使用してデータを暗号化します。

たとえば、3 つのノードを持つレプリカセットを考えてみましょう。レプリカセットは使用中で、暗号化したいデータを保持しています。保管中のデータを暗号化する手順は次のとおりです。

1

次の手順に従って、サーバーを準備します。

  • セカンダリ サーバーの 1 つを選択します。

  • セカンダリ サーバーで mongod を停止します。

  • 任意: dbPath のデータをバックアップします。完全なバックアップが必要ない場合は、問題が発生した場合に役立つ可能性のあるトラブルシューティング データを保存するために、diagnostic.data ディレクトリのみをバックアップすることを検討してください。詳細については、「フルタイム診断データ取得」を参照してください。

  • dbPath 内のファイルとディレクトリを削除します。

2

暗号化を有効にしてセカンダリ サーバーを起動します。mongodインスタンスが新しいキーストアを作成します。

3

プライマリからデータをインポートします。必要に応じてレプリケーション オプションを指定して、mongod プロセスを開始します。

mongod 最初の同期を実行し、同期アップ プロセス中にデータを暗号化します。

4

最初のセカンダリがデータのインポートと暗号化を完了したら、他のセカンダリ mongod インスタンスでも同じプロセスを繰り返します。

5

すべてのセカンダリが暗号化されたら、プライマリを step down します。適格なセカンダリによって、新しいプライマリが選出されます。

古いプライマリはセカンダリになりました。手順を繰り返して暗号化されていないデータを削除し、最初の同期を実行します。

戻る

保管時の暗号化