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

暗号化の設定

バージョン 3.2 で追加

このページでは、保管時の暗号化をサポートするためのサーバー構成について説明します。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 は、KMIP(Key Management Interoperability Protocol)準拠のキー管理アプライアンスによるキーの安全な転送をサポートします。 KMIP をサポートするアプライアンス ベンダーは、互換性があることが予想されます。

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

Tip

推奨

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

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

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

    • 作成(operation_create

    • 取得(operation_get

    • アクティブ化(operation_activate

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

注意

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

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

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

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

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

KMIP サーバーに接続する際、 mongodは指定された--kmipServerNameがサブジェクト代替名SAN (またはSANが存在しない場合はコモンネームCN )と一致することを確認します。 KMIP サーバー [1] SANが存在する場合、 mongodCNと一致しません。 ホスト名がSAN (またはCN )と一致しない場合、 mongodは接続に失敗します。

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

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

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

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

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

KMIP サーバーに接続する際、 mongodは指定された--kmipServerNameがサブジェクト代替名SAN (またはSANが存在しない場合はコモンネームCN )と一致することを確認します。 KMIP サーバー [1] SANが存在する場合、 mongodCNと一致しません。 ホスト名がSAN (またはCN )と一致しない場合、 mongodは接続に失敗します。

[1]12 MongoDB 4.2 以降、SAN の比較を行なう際に、MongoDB は DNS 名または IP アドレスの比較をサポートします。 以前のバージョンでは MongoDB は DNS 名の比較のみをサポートしていました。

重要

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

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

キーファイルを使用して暗号化するには、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>

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

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

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

1

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

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

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

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

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

2

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

3

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

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

4

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

5

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

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

戻る

保管時の暗号化

項目一覧