Docs Menu
Docs Home
/ / /
Ruby MongoDB ドライバー
/ /

クライアント側の暗号化

項目一覧

  • インストール
  • 自動暗号化
  • 明示的な暗号化
  • マスターキーの作成
  • データキーの作成
  • 自動暗号化オプション

MongoDB 4.2 の新機能、クライアント側の暗号化により、管理者と開発者は MongoDB ドキュメントをデータベースに挿入する前にドキュメント内の特定のフィールドを暗号化できます。

クライアント側の暗号化を使用すると、開発者はサーバー側の設定やディレクティブなしで、クライアント側のフィールドを暗号化できます。 クライアント側の暗号化は、サーバー管理者を含む権限のないユーザーが暗号化されたデータを読み取れることをアプリケーションが保証する必要があるワークロードをサポートします。

警告

クライアント側の暗号化 を有効にすると、最大書込みバッチ サイズが縮小され、パフォーマンスに悪影響が及ぶ可能性があります。

クライアント側の暗号化には追加のパッケージをインストールする必要があります。

libmongocrypt は、クライアント側の暗号化のためにドライバーによって使用される C ライブラリです。 クライアント側の暗号化を使用するには、Ruby プログラムを実行しているマシンに libmongocrypt ライブラリをインストールする必要があります。

このライブラリをインストールする最も簡単な方法は、 libmongocrypt-helper をインストールすることです 以下はその例です。

gem install libmongocrypt-helper --pre

libmongocrypt ヘルパーのバージョン番号は、含まれているlibmongocrypt のバージョンとそれに続くリリース番号です。例: 1.3.2.r1 Ruby はバージョン番号内のすべての文字をリリース前バージョンを示すものと見なすため、 --preフラグが必要です。

ドライバーは自動的に libmongocrypt-helper をロードします。それ以上の設定は必要ありません。

注意

libmongocrypt ヘルパーは現在、Linux オペレーティング システムのみをサポートしています。

あるいは、次のように、libmongocrypt の事前に構築されたバイナリ ディストリビューションをダウンロードし、必要な共有オブジェクトをコンピューターに手動で配置することもできます。

  • すべての libmongocrypt バリエーションの tarball は ここ からダウンロードします 。

  • ダウンロードしたファイルを抽出します。 それぞれがオペレーティング システムに対応するディレクトリのリストが表示されます。 オペレーティング システムに一致するディレクトリを見つけて開きます。

  • そのフォルダー内の「nocrypto」というフォルダーを開きます。 OS に応じて、libmongocrypt.so またはlibmongocrypt.dylibまたはlibmongocrypt.dll ファイルが含まれます。

  • そのファイルをマシン上で保持したい任意の場所に移動します。 tarball に含まれる他のファイルは削除できます。

ソースからバイナリを構築するには、次の手順に従います。

マシンに libmongocrypt バイナリが作成されたら、 LIBMONGOCRYPT_PATH 環境変数を使用してバイナリへのパスを指定します。 この変数を rc ファイルに追加することをお勧めします。 例:

export LIBMONGOCRYPT_PATH=/path/to/your/libmongocrypt.so

注意

このセクションで参照されるバイナリは、本番環境には推奨されない、libmongocrypt のプレリリース バージョンである可能性があります。

自動暗号化共有ライブラリは、クライアント アプリケーションで自動暗号化を実行できるようにする動的ライブラリです。 これはエンタープライズのみの機能である自動暗号化にのみ必要です。 明示的な暗号化のみを使用する場合は、この手順をスキップできます。 自動暗号化共有ライブラリは mongocryptd と同じ機能(下記を参照)を提供しますが、自動暗号化を実行するために別のプロセスを生成する必要はありません。

インストール手順については、 MongoDB マニュアルを参照してください。

自動暗号化が有効になっている場合、libmongocrypt はシステム ライブラリ パス内の共有ライブラリを検索するか、クライアントの作成時に:crypt_shared_lib_pathオプションが指定されている場合は、特定の場所からライブラリをロードしようとします。 ライブラリをロードできる場合、ドライバーは mongocryptd デーモンの起動を試行しません。 共有ライブラリが見つからない場合でも、デーモンは引き続き起動します。

クライアントの作成時にcrypt_shared_lib_required: trueオプションを渡すことで、共有ライブラリの使用を要求することもできます。 この場合、共有ライブラリを読み込むことができない場合は、エラーが発生します。

注意

同じプロセス内のすべてのMongo::Clientオブジェクトは、同じ設定:crypt_shared_lib_pathを使用する必要があります。これは、1 つのオペレーティング システム プロセスで 1 つの crypt_shared ライブラリを同時に読み込むとエラーになるためです。

Mongocryptd は、自動暗号化共有ライブラリの代替手段です。 Mongocryptd は、特定の操作で暗号化するフィールドをドライバーに指示するデーモンです。 これはエンタープライズのみの機能である自動暗号化にのみ必要です。 明示的な暗号化のみを使用する場合は、この手順をスキップできます。

Mongocryptd は MongoDB サーバーのエンタープライズ ビルド(バージョン4.2以上)が事前にパッケージ化されています。 インストール手順については、 MongoDB マニュアルを参照してください。

mongocryptd を構成するには(リッスンするポートやデーモンの起動に使用されたパスなど)、自動暗号化を実行するMongo::Clientにさまざまなオプションを渡す必要があります。 詳細については、このチュートリアルの「 : extra_options 」セクションを参照してください。

自動暗号化は、データベース操作の実行中に特定のドキュメント フィールドを常に暗号化するようにMongo::Clientインスタンスを設定できる機能です。 Mongo::Clientが構成されると、暗号化が必要なフィールドがデータベースに書き込まれる前に自動的に暗号化され、それらのフィールドは読み取り時に自動的に復号化されます。

クライアント側の暗号化では、データキーを使用してデータを暗号化し、マスター キーを使用して暗号化する方法であるエンベロープ暗号化が実装されています。 したがって、MongoDB でクライアント側の暗号化を使用するには、次の 3 つの主要な手順が含まれます。

  1. マスターキーの作成

  2. データキーの作成(マスター キーを使用して暗号化)

  3. データキーを使用したデータの暗号化

以下の例は、自動暗号化を実行するためにローカル マスター キーを使用してこれらの手順に従う方法を示しています。

注意

自動暗号化は、コレクションに対する操作にのみ適用される Enterprise のみの機能です。 自動暗号化はデータベースまたはビューの操作ではサポートされておらず、バイパスされない操作ではエラーが発生します( 自動暗号化許可リスト を参照してください )。すべての操作の自動暗号化をバイパスするには、 auto_encryption_optionsbypass_auto_encryptionを true に設定します。

注意

自動暗号化には、認証されたユーザーが listCollections 特権アクションを持っている必要があります。

注意

自動暗号化を使用しており、かつ:auto_encryption_optionsで構成されているMongo::Clientインスタンスの接続プール サイズが制限されている場合(ゼロ以外の:max_pool_size 、デフォルト設定)、別の内部Mongo::Clientインスタンスが作成されます。次のいずれかに当てはまる場合は、次のようになります。

  • auto_encryption_options[:key_vault_client] は渡されません。

  • auto_encryption_options[:bypass_automatic_encryption] は渡されていないか、false ではありません。

内部Mongo::Clientインスタンスが作成される場合、このインスタンスは親クライアントと同じオプションで構成されます。ただし、 :min_pool_sizeが 0 に設定され、 :auto_encryption_optionsが省略されている場合を除きます。

require 'mongo'
#####################################
# Step 1: Create a local master key #
#####################################
# A local master key is a 96-byte binary blob.
local_master_key = SecureRandom.random_bytes(96)
# => "\xB2\xBE\x8EN\xD4\x14\xC2\x13\xC3..."
#############################
# Step 2: Create a data key #
#############################
kms_providers = {
local: {
key: local_master_key
}
}
# The key vault client is a Mongo::Client instance connected to the collection
# that will store your data keys.
key_vault_client = Mongo::Client.new(['localhost:27017'])
# Use an instance of Mongo::ClientEncryption to create a new data key
client_encryption = Mongo::ClientEncryption.new(
key_vault_client,
key_vault_namespace: 'encryption.__keyVault',
kms_providers: kms_providers
)
data_key_id = client_encryption.create_data_key('local')
# => <BSON::Binary... type=ciphertext...>
#######################################################
# Step 3: Configure Mongo::Client for auto-encryption #
#######################################################
# Create a schema map, which tells the Mongo::Client which fields to encrypt
schema_map = {
'encryption_db.encryption_coll': {
properties: {
encrypted_field: {
encrypt: {
keyId: [data_key_id],
bsonType: "string",
algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
}
}
},
bsonType: "object"
}
}
# Configure the client for automatic encryption
client = Mongo::Client.new(
['localhost:27017'],
auto_encryption_options: {
key_vault_namespace: 'encryption.__keyVault',
kms_providers: kms_providers,
schema_map: schema_map
},
database: 'encryption_db',
)
collection = client['encryption_coll']
collection.drop # Make sure there is no data in the collection
# The string "sensitive data" will be encrypted and stored in the database
# as ciphertext
collection.insert_one(encrypted_field: 'sensitive data')
# The data is decrypted before being returned to the user
collection.find(encrypted_field: 'sensitive data').first['encrypted_field']
# => "sensitive data"
# A client with no auto_encryption_options is unable to decrypt the data
client_no_encryption = Mongo::Client.new(
['localhost:27017'],
database: 'encryption_db',
)
client_no_encryption['encryption_coll'].find.first['encrypted_field']
# => <BSON::Binary... type=ciphertext...>

上記の例では、ローカル マスター キーを使用した自動暗号化の使用が示されています。 他のキー管理サービスを使用してマスター キーを作成し、データ キーを作成する方法の詳細については、このチュートリアルの次のセクションを参照してください。

明示的な暗号化は、文字列、整数、記号などの個々のデータを暗号化および復号化できる機能です。 明示的な暗号化はコミュニティ機能であり、使用するために MongoDB サーバーのエンタープライズ ビルドは必要ありません。 すべての明示的な暗号化と復号化操作を実行するには、ClientEncryption クラスのインスタンスを使用します。

クライアント側の暗号化では、データキーを使用してデータを暗号化し、マスター キーを使用して暗号化する方法であるエンベロープ暗号化が実装されています。 したがって、MongoDB でクライアント側の暗号化を使用するには、次の 3 つの主要な手順が含まれます。

  1. マスターキーの作成

  2. データキーの作成(マスター キーを使用して暗号化)

  3. データキーを使用したデータの暗号化

以下の例は、明示的な暗号化を実行するためにローカル マスター キーを使用してこれらの手順に従う方法を示しています。

require 'mongo'
#####################################
# Step 1: Create a local master key #
#####################################
# A local master key is a 96-byte binary blob.
local_master_key = SecureRandom.random_bytes(96)
# => "\xB2\xBE\x8EN\xD4\x14\xC2\x13\xC3..."
#############################
# Step 2: Create a data key #
#############################
kms_providers = {
local: {
key: local_master_key
}
}
# The key vault client is a Mongo::Client instance connected to the collection
# that will store your data keys.
key_vault_client = Mongo::Client.new(['localhost:27017'])
# Use an instance of Mongo::ClientEncryption to create a new data key
client_encryption = Mongo::ClientEncryption.new(
key_vault_client,
key_vault_namespace: 'encryption.__keyVault',
kms_providers: kms_providers
)
data_key_id = client_encryption.create_data_key('local')
# => <BSON::Binary... type=ciphertext...>
#####################################################
# Step 3: Encrypt a string with explicit encryption #
#####################################################
# The value to encrypt
value = 'sensitive data'
# Encrypt the value
encrypted_value = client_encryption.encrypt(
'sensitive data',
{
key_id: data_key_id,
algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
}
)
# Create the client you will use to read and write the data to MongoDB
client = Mongo::Client.new(
['localhost:27017'],
database: 'encryption_db',
)
collection = client['encryption_coll']
collection.drop # Make sure there is no data in the collection
# Insert the encrypted value into the collection
collection.insert_one(encrypted_field: encrypted_value)
# Use the client to read the encrypted value from the database, then
# use the ClientEncryption object to decrypt it
find_result = collection.find(encrypted_field: encrypted_value).first['encrypted_field']
# => <BSON::Binary...> (the find result is encrypted)
unencrypted_result = client_encryption.decrypt(find_result)
# => "sensitive data"

上記の例では、ローカル マスター キーで明示的な暗号化を使用する方法が示されています。 他のキー管理サービスを使用してマスター キーを作成し、データ キーを作成する方法の詳細については、このチュートリアルの次のセクションを参照してください。

自動暗号化と明示的な暗号化の両方に暗号化マスター キーが必要です。 このマスターキーはデータキーを暗号化するために使用され、ユーザーデータを暗号化するために使用されます。 マスターキーは、ローカルキーを作成する方法と、 KMSでキーを作成することのいずれかの方法で生成できます。 Rubyドライバーは現在、 Amazon Web Services KMS ( KMS )、 Azure Key Vault 、 Google Cloud Platformキー管理( GCP KMS )をサポートしています。

ローカル マスターキーは、96 バイトの バイナリstringです。 これは、環境変数またはテキスト ファイルとしてマシン上に保持する必要があります。

警告

ローカル マスターキーの使用は安全でなく、本番環境でクライアント側の暗号化を使用する場合は推奨されません。

Ruby を使用してローカル マスター キーを生成するには、次のコードを実行します。

local_master_key = SecureRandom.random_bytes(96)
# => "\xB2\xBE\x8EN\xD4\x14\xC2\x13\xC3..." (a binary blob)

マスターキーを作成して保存するには、リモートKMSを使用することをお勧めします。 これを行うには、MongoDB クライアント側暗号化ドキュメントの「リモート マスター キーを設定する」の手順に従います。

マスターキーの作成の詳細については、MongoDB マニュアルの「 マスターキーの作成」セクションを参照してください。

マスターキーを作成したら、 Mongo::ClientEncryptionクラスのインスタンスで#create_data_keyメソッドを呼び出してデータキーを作成します。 このメソッドは新しいデータキーを生成し、データキーを保存するために選択した MongoDB コレクションである キーヴォールト コレクションに挿入します。 #create_data_keyメソッドは、新しく作成されたデータキーの ID を BSON::Binary オブジェクトの形式で返します。

ローカル マスター キーを作成した場合は、それを使用して次のコード スニペットで新しいデータ キーを生成できます。

警告

ローカル マスターキーの使用は安全でなく、本番環境でクライアント側の暗号化を使用する場合は推奨されません。

# A Mongo::Client instance that will be used to connect to the key vault
# collection. Replace the server address with the address of the MongoDB
# server where you would like to store your key vault collection.
key_vault_client = Mongo::Client.new(['localhost:27017'])
client_encryption = Mongo::ClientEncryption.new(
key_vault_client,
# Replace with the database and collection names for your key vault collection
key_vault_namespace: 'encryption.__keyVault',
kms_providers: {
local: {
key: local_master_key
}
}
)
data_key_id = client_encryption.create_data_key('local')
# => <BSON::Binary... type=ciphertext...>

新しいローカル マスター キーの生成の詳細については、「ローカル マスター キー」セクションを参照してください。

Amazon Web Services KMSマスターキーを作成した場合は、キーを使用する権限を持つ IAM ユーザーのアクセスキーIDとシークレットアクセスキーをメモします。 さらに、 Amazon Web ServicesのリージョンとマスターキーのAmazonリソース番号(ARN) に注意してください。 その情報を使用してデータキーを生成します。

Azure マスターキーを作成した場合は、テナント ID、クライアント ID、およびキーを使用する権限を持つアプリケーションのクライアントシークレットを書き留めておきます。 さらに、マスター キーのキー名、キー バージョン(存在する場合)、キーヴォールト エンドポイントを書き留めておきます。 その情報を使用してデータキーを生成します。

GCP KMS マスターキーを作成した場合は、メールと秘密キー、およびキーを使用する権限を持つアプリケーションのクライアントシークレットを書き留めておきます。 さらに、マスターキーのプロジェクト ID、ロケーション、キー リング、キー名、キー バージョン(存在する場合)をメモします。 その情報を使用してデータキーを生成します。

GCP 秘密キーはさまざまな形式になる可能性があることに注意してください。 Rubyドライバーは、デフォルトでエンコードされた RSA 秘密キーを base64 でエンコードされたstringとしてサポートします。 Ruby の場合、ドライバーは PEM でエンコードされた RSA 秘密キーを追加でサポートします。

KMIP(Key Management Interoperability Protocol)互換キー管理サーバーを使用してマスターキーを作成した場合は、サーバーのホストとポート、およびキー ID をメモします。 その情報を使用してデータキーを生成します。 KMIP サーバーで認証するには、認証局証明書、クライアント証明書、秘密キーが必要になる場合もあります。

# A Mongo::Client instance that will be used to connect to the key vault
# collection. Replace the server address with the address of the MongoDB
# server where you would like to store your key vault collection.
key_vault_client = Mongo::Client.new(['localhost:27017'])
client_encryption = Mongo::ClientEncryption.new(
key_vault_client,
# Replace with the database and collection names for your key vault collection
key_vault_namespace: 'encryption.__keyVault',
kms_providers: {
aws: {
access_key_id: 'IAM-ACCESS-KEY-ID',
secret_access_key: 'IAM-SECRET-ACCESS-KEY'
},
azure: {
tenant_id: 'AZURE-TENANT-ID',
client_id: 'AZURE-CLIENT-ID',
client_secret: 'AZURE-CLIENT-SECRET'
},
gcp: {
email: 'GCP-EMAIL',
# :private_key value should be GCP private key as base64 encoded
# DER RSA private key, or PEM RSA private key, if you are using MRI Ruby.
private_key: 'GCP-PRIVATE-KEY',
},
kmip: {
# KMIP server endpoint may include port.
endpoint: 'KMIP-SERVER-HOST'
},
# TLS options to connect to KMIP server.
kms_tls_options: {
kmip: {
ssl_ca_cert: 'PATH-TO-CA-FILE',
ssl_cert: 'PATH-TO-CLIENT-CERT-FILE',
ssl_key: 'PATH-TO-CLIENT-KEY-FILE'
}
}
}
)
aws_data_key_id = client_encryption.create_data_key(
'aws',
{
master_key: {
region: 'REGION-OF-YOUR-MASTER-KEY',
key: 'ARN-OF-YOUR-MASTER-KEY'
}
}
)
# => <BSON::Binary... type=ciphertext...>
azure_data_key_id = client_encryption.create_data_key(
'azure',
{
master_key: {
key_vault_endpoint: 'AZURE-KEY-VAULT-ENDPOINT',
key_name: 'AZURE-KEY-NAME'
}
}
)
# => <BSON::Binary... type=ciphertext...>
gcp_data_key_id = client_encryption.create_data_key(
'gcp',
{
master_key: {
project_id: 'GCP-PROJECT-ID',
location: 'GCP-LOCATION',
key_ring: 'GCP-KEY-RING',
key_name: 'GCP-KEY-NAME',
}
}
)
# => <BSON::Binary... type=ciphertext...>

新しいリモート マスター キーの生成と、データ キーの作成に必要な情報の詳細については、このチュートリアルの「リモート マスター キー」セクションを参照してください。

データキーの作成の詳細については、MongoDB マニュアルの 「データ暗号化キーの作成」セクション を参照してください。

使用可能な KMS TLS オプションのリストについては、クライアントのリファレンス作成 を参照してください。 Mongo::ClientEncryptionコンストラクターは、 Mongo::Clientと同じssl_ オプションを受け入れます。

自動暗号化は、 auto_encryption_optionsオプションHashを使用して、 Mongo::Clientで構成できます。 このセクションでは、 auto_encryption_options内のフィールドの概要と、その値を選択する方法について説明します。

キーヴォールト クライアントは、暗号化データキーを含む MongoDB コレクションに接続するために使用されるMongo::Clientインスタンスです。 たとえば、キーヴォールトが MongoDB インスタンスのlocalhost:30000でホストされていた場合、次のようになります。

key_vault_client = Mongo::Client.new(['localhost:30000'])
Mongo::Client.new(['localhost:27017],
auto_encryption_options: {
key_vault_client: key_vault_client,
# ... (Fill in other options here)
}
)

暗号化されたデータを保存するのと同じ MongoDB インスタンスにデータキーが保存されている場合は、このオプションを空白のままにできます。また、最上位クライアントがデータキーの挿入と取得に使用されます。

キーヴォールトの名前空間は、String 形式の"database_name.collection_name" です。database_namecollection_name は、データキーを保存するデータベースとコレクションの名前です。たとえば、データキーが__keyVaultコレクション内のencryptionデータベースに保存されている場合、次のようになります。

Mongo::Client.new(['localhost:27017],
auto_encryption_options: {
key_vault_namespace: 'encryption.__keyVault',
# ... (Fill in other options here)
}
)

デフォルトのキーヴォールト名前空間はなく、このオプションを指定する必要があります。

KMS プロバイダー名をキーとして、プロバイダー オプションを値として含む ハッシュ。

Mongo::Client.new(['localhost:27017],
auto_encryption_options: {
key_vault_namespace: 'encryption.__keyVault',
kms_providers: {
aws: {
access_key_id: 'IAM-ACCESS-KEY-ID',
secret_access_key: 'IAM-SECRET-ACCESS-KEY'
},
azure: {
tenant_id: 'AZURE-TENANT-ID',
client_id: 'AZURE-CLIENT-ID',
client_secret: 'AZURE-CLIENT-SECRET'
},
gcp: {
email: 'GCP-EMAIL',
# :private_key value should be GCP private key as base64 encoded
# DER RSA private key, or PEM RSA private key, if you are using MRI Ruby.
private_key: 'GCP-PRIVATE-KEY',
},
kmip: {
# KMIP server endpoint may include port.
endpoint: 'KMIP-SERVER-HOST'
},
# TLS options to connect to KMIP server.
kms_tls_options: {
kmip: {
ssl_ca_cert: 'PATH-TO-CA-FILE',
ssl_cert: 'PATH-TO-CLIENT-CERT-FILE',
ssl_key: 'PATH-TO-CLIENT-KEY-FILE'
}
}
}
}
)

クライアントは、Amazon Web Services 環境、またはEC2 または ECS メタデータ エンドポイントから の認証情報を検索できます。To retrieve credentials automatically, specify an empty Hash as KMS provider options for AWS:

Mongo::Client.new(['localhost:27017'],
auto_encryption_options: {
key_vault_namespace: 'encryption.__keyVault',
kms_providers: {
aws: {}
}
}
)

認証情報取得の詳細については、 「認証情報の自動取得」を参照してください。

クライアントは、Google Compute Engine メタデータ エンドポイントから GCP 認証情報を検索できます。 認証情報を自動的に検索するには、GCP の KMS プロバイダー オプションとして空のハッシュを指定します。

Mongo::Client.new(['localhost:27017'],
auto_encryption_options: {
key_vault_namespace: 'encryption.__keyVault',
kms_providers: {
gcp: {}
}
}
)

対応するプロバイダーに接続するための KMP プロバイダー名をキーとして含む ハッシュと、TLS オプションを含む ハッシュ。

Mongo::Client.new(['localhost:27017],
auto_encryption_options: {
key_vault_namespace: 'encryption.__keyVault',
kms_providers: {
kmip: {
endpoint: 'KMIP-SERVER-HOST'
}
},
kms_tls_options: {
kmip: {
ssl_ca_cert: 'PATH-TO-CA-FILE',
ssl_cert: 'PATH-TO-CLIENT-CERT-FILE',
ssl_key: 'PATH-TO-CLIENT-KEY-FILE'
}
}
}
)

スキーマ マップは、自動的に暗号化および復号化するフィールドに関する情報を含むハッシュです。

このチュートリアルの上部にあるコード スニペットは、Ruby Hashを使用してスキーマ マップを作成する方法を示しています。 これは機能しますが、スキーマ マップはかなり大きくなる可能性があり、それを Ruby コードに含めるのは望ましくない可能性があります。 代わりに、それらを別の JSON(JavaScript Object Notation)ファイルに保存することをお勧めします。

JSON ファイルを作成する前に、データキーの UUID をBase64 でエンコードします。

Base64.encode64(data_key_id.data)
# => "sr6OTtQUwhPD..." (a base64-encoded string)

次に、JSON schema ドラフト4標準構文で定義されている形式で、スキーマ マップを含む新しい JSON ファイルを作成します。 スキーマ マップの形式の詳細については、MongoDB マニュアルの「自動暗号化ルール 」セクションを参照してください。

{
"encryption_db.encryption_coll": {
"properties": {
"encrypted_field": {
"encrypt": {
"keyId": [{
"$binary": {
"base64": "YOUR-BASE64-ENCODED-DATA-KEY-ID",
"subType": "04"
}
}],
"bsonType": "string",
"algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
}
}
},
"bsonType": "object"
}
}

スキーマ マップを使用する場合は、 bson Ruby gem のBSON::ExtJSONモジュールを使用して Ruby Hashに変換します。

schema_map = BSON::ExtJSON.parse(File.read('/path/to/your/file.json'))
# => { 'encryption_db.encryption_coll' => { ... } }
Mongo::Client.new(['localhost:27017],
auto_encryption_options: {
schema_map: schema_map,
# ... (Fill in other options here)
}
)

注意

MongoDB コレクションのバリデーターとしてスキーマ マップを提供することもできます。 これは「リモート スキーマ マップ」と呼ばれ、 Mongo::Clientのオプションとしてスキーマ マップを提供する方法は「ローカル スキーマ マップ」と呼ばれます。

ローカル スキーマ マップを提供すると、サーバーから取得した JSON スキーマに依存する場合よりもセキュリティが高くなります。 これにより、クライアントが暗号化されている必要がある暗号化されていないデータを送信するよう、誤った JSON schema を広告する悪意のあるサーバーから保護されます。

スキーマ マップを使用してコレクションに JSON schema 検証を作成する方法の詳細については、MongoDB マニュアルの「サーバーサイド フィールド レベル暗号化の強制」を参照してください。

Tip

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

JSON schema自動暗号化ルールを使用した暗号化フィールドの指定

ファイルからスキーマ マップを読み込むこともできます。 上記のようにスキーマ マップを準備し、それを ファイルに保存し、 :schema_map_pathオプションを使用してファイルへのパスを渡します。

Mongo::Client.new(['localhost:27017],
auto_encryption_options: {
schema_map_path: '/path/to/your/file.json',
# ... (Fill in other options here)
}
)

:bypass_auto_encryptionオプションは、 Mongo::Clientがデータベースに書き込むときに暗号化をスキップするかどうかを指定するBooleanです。 :bypass_auto_encryptiontrueの場合、クライアントは以前に暗号化されたデータの自動復号化を引き続き実行します。

Mongo::Client.new(['localhost:27017],
auto_encryption_options: {
bypass_auto_encryption: true,
# ... (Fill in other options here)
}
)

:extra_options は、mongocryptd の起動に関連するオプションのHashです。 このHashのすべてのオプションにはデフォルト値があるため、デフォルトを上書きするオプションのみを指定する必要があります。

  • :mongocryptd_spawn_args - これは mongocryptd を生成するための引数を含むArray<String>です。 Ruby ドライバーは、デーモンの起動時にこれらの引数を mongocryptd に渡します。 可能な引数は次のとおりです。

    • "--idleShutdownTimeoutSecs" - mongocryptd がアイドル状態を維持する前にシャットダウンする前にアイドル状態を維持する必要がある秒数。 デフォルト値は 60 です。

    • "--port" - mongocryptd が接続をリッスンするポート。 デフォルトは 27020 です。

  • :mongocryptd_uri - ドライバーが mongocryptd に接続するために使用する URI 。 デフォルトでは、これは"mongodb://localhost:27020"です。

  • :mongocryptd_spawn_path - mongocryptd 実行可能ファイルへのパス。 デフォルトは"mongocryptd"です。

  • :mongocryptd_bypass_spawn - ドライバーが mongocryptd の生成をスキップするかどうかを示すBoolean

たとえば、ポート 30000 で mongocryptd を実行する場合は、次のようにextra_optionsを指定します。

Mongo::Client.new(['localhost:27017],
auto_encryption_options: {
extra_options: {
mongocryptd_spawn_args: ['--port=30000'],
mongocryptd_uri: 'mongodb://localhost:30000',
}
# ... (Fill in other options here)
}
)

警告

:extra_optionsの内容は、クライアント側暗号化 API の将来のバージョンで変更される可能性があります。

戻る

Queryable Encryption