暗号化の設定
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
を指定します。
重要
Windows で KMIP サーバーを使用して暗号化を有効にすると、 --kmipClientCertificateFile
と KMIP サーバーにより TLS 1.2が強制されます。
Windows で KMIP を使用して保管時の暗号化を有効にするには、次の条件を満たす必要があります。
クライアント証明書を Windows 証明書ストアにインポートします。
--kmipClientCertificateSelector
オプションを使用します。
次の操作により、キー マネージャーに新しいマスター キーが作成されます。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
が存在する場合、mongod
は CN
との一致は試行しません。
KMIP サーバーのホスト名や IP アドレスが SAN
とも CN
とも一致しない場合、mongod
は起動しません。
キーの作成と使用が成功したことを確認するには、ログファイルを確認します。成功した場合、プロセスでは次のメッセージがログに記録されます。
[initandlisten] Created KMIP key with id: <UID> [initandlisten] Encryption key manager initialized using master key with id: <UID>
既存のキーを使用した暗号化
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
が存在する場合、mongod
は CN
との一致は試行しません。
KMIP サーバーのホスト名や IP アドレスが SAN
とも CN
とも一致しない場合、mongod
は起動しません。
ローカル キー管理
重要
キーファイル メソッドを使用することは、ほとんどの規制キー管理ガイドラインを満たしていないため、ユーザーは自分のキーを安全に管理する必要があります。
キーファイルの安全な管理は重要です。
キーファイルを使用して暗号化するには、16 文字または 32 文字の文字列を 1 つ含み base64 でエンコードされたキーファイルが必要です。キーファイルにアクセスできるのは、mongod
プロセスの所有者のみである必要があります。
16 文字または 32 文字の文字列で base64 でエンコードされたキーファイルを作成します。キーファイルを生成するには、任意の方法を使用できます。たとえば、
openssl rand -base64 32 > mongodb-keyfile ファイルのアクセス許可をアップデートします。
chmod 600 mongodb-keyfile キーファイルを使用するには、次のオプションで
mongod
を開始します。--enableEncryption
,--encryptionKeyFile <path to keyfile>
,
mongod --enableEncryption --encryptionKeyFile mongodb-keyfile 構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、
--bind_ip
を指定します。暗号化キー マネージャーがキーファイルを使用して正常に初期化されたかどうかを確認します。操作が成功した場合、成功した場合、プロセスでは次のメッセージがログに記録されます。
[initandlisten] Encryption key manager initialized with key file: <path to keyfile>
既存の保管中のデータの暗号化
MongoDB は既存のデータを暗号化できません。新しいキーで暗号化を有効にすると、MongoDB インスタンスに既存のデータを含めることはできません。
既存のデータを含むレプリカセットを使用している場合は、ローリングの最初の同期を使用してデータを暗号化します。
たとえば、3 つのノードを持つレプリカセットを考えてみましょう。レプリカセットは使用中で、暗号化したいデータを保持しています。保管中のデータを暗号化する手順は次のとおりです。
サーバーを準備します。
次の手順に従って、サーバーを準備します。
セカンダリ サーバーの 1 つを選択します。
セカンダリ サーバーで
mongod
を停止します。任意:
dbPath
のデータをバックアップします。完全なバックアップが必要ない場合は、問題が発生した場合に役立つ可能性のあるトラブルシューティング データを保存するために、diagnostic.data
ディレクトリのみをバックアップすることを検討してください。詳細については、「フルタイム診断データ取得」を参照してください。dbPath
。 内のファイルとディレクトリを削除します。
データを同期します。
プライマリからデータをインポートします。必要に応じてレプリケーション オプションを指定して、mongod プロセスを開始します。
mongod
最初の同期を実行し、同期アップ プロセス中にデータを暗号化します。
セカンダリでこのプロセスを繰り返します。
最初のセカンダリがデータのインポートと暗号化を完了したら、他のセカンダリ mongod
インスタンスでも同じプロセスを繰り返します。