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

自動暗号化

項目一覧

  • 暗号化された書込みと読み取りの仕組み
  • 暗号化された書込み
  • 暗号化された読み取り
  • クライアント側の自動フィールドレベル暗号化の有効化
  • サーバー側のフィールドレベル暗号化の強制

MongoDB は、 クライアント側のフィールドレベル暗号化 を使用する場合に、読み取りおよび書込み操作でフィールドを自動的に暗号化するのをサポートしています。 mongoshと公式の MongoDB ドライバーを使用して自動暗号化を実行できます。 CSFLE をサポートする公式の互換性ドライバーの完全なリストについては、「 ドライバーの互換性CSFLE の互換性 」を参照してください。

次の図は、クライアント アプリケーションとドライバーがフィールド レベルの暗号化データを書込み (write) と読み取りを行う方法を示しています。

書込み操作では、ドライバーは MongoDB database に書込むにフィールド値を暗号化します。

次の図は、クライアントアプリケーションとドライバーがフィールドレベルの暗号化データの書き込みを実行する手順を示しています。

フィールドレベルの暗号化されたデータの書込みに関するデータフローを示す図

読み取り操作では、ドライバーは読み取り操作を発行するにクエリ内のフィールド値を暗号化します。

暗号化されたフィールドを返す読み取り操作の場合、ドライバーは暗号化された値を自動的に復号化します。

次の図は、クライアント アプリケーションとドライバーがフィールド レベルの暗号化データをクエリおよび復号化する手順を示しています。

フィールドレベルの暗号化データのクエリと読み取りのためのデータフローを示す図

自動暗号化を有効にするには、クライアントのMongoClientインスタンスで自動暗号化設定を指定します。

次のコード スニペットは、 mongoshと MongoDB ドライバーで自動暗号化が有効になっているクライアントを作成する方法を示しています。

var autoEncryptionOpts =
{
"keyVaultNamespace" : "<database>.<collection>",
"kmsProviders" : { ... },
"schemaMap" : { ... }
}
cluster = Mongo(
"<Your Connection String>",
autoEncryptionOpts
);

Tip

環境変数

可能であれば、 で提供される認証情報を環境変数として定義し、 オプションを使用してkmsProviders mongosh--evalに渡すことを検討してください。これにより、認証情報がログに漏洩する可能性を最小限に抑えられます。

var clientSettings = MongoClientSettings.FromConnectionString(_connectionString);
var autoEncryptionOptions = new AutoEncryptionOptions(
keyVaultNamespace: keyVaultNamespace,
kmsProviders: kmsProviders,
schemaMap: schemaMap,
extraOptions: extraOptions);
clientSettings.AutoEncryptionOptions = autoEncryptionOptions;
var client = new MongoClient(clientSettings);
autoEncryptionOpts := options.AutoEncryption().
SetKmsProviders(provider.Credentials()).
SetKeyVaultNamespace(keyVaultNamespace).
SetSchemaMap(schemaMap).
SetExtraOptions(extraOptions)
client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri).SetAutoEncryptionOptions(autoEncryptionOpts))
MongoClientSettings clientSettings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString("mongodb://localhost:27017"))
.autoEncryptionSettings(AutoEncryptionSettings.builder()
.keyVaultNamespace(keyVaultNamespace)
.kmsProviders(kmsProviders)
.schemaMap(schemaMap)
.extraOptions(extraOptions)
.build())
.build();
MongoClient mongoClient = MongoClients.create(clientSettings);
const secureClient = new MongoClient(connectionString, {
useNewUrlParser: true,
useUnifiedTopology: true,
monitorCommands: true,
autoEncryption: {
keyVaultNamespace,
kmsProviders,
schemaMap: patientSchema,
extraOptions: extraOptions,
},
});
fle_opts = AutoEncryptionOpts(
kms_providers,
key_vault_namespace,
schema_map=patient_schema,
**extra_options
)
client = MongoClient(connection_string, auto_encryption_opts=fle_opts)

CSFLE 固有のMongoClient設定の詳細については、「 CSFLE 固有の MongoClient オプション 」を参照してください。

MongoDB は、コレクション内の特定のフィールドの暗号化を強制するために、スキーマ検証を使用することをサポートしています。 自動クライアント側フィールドレベル暗号化を実行するクライアントは、データベース接続構成に応じて特定の動作をします。

  • 接続のautoEncryptionOpts schemaMapオブジェクトに指定されたコレクションのキーが含まれている場合、クライアントはそのオブジェクトを使用して自動フィールドレベルの暗号化を実行し、リモート スキーマを無視します。 ローカル ルールは、少なくとも、リモート スキーマが暗号化が必要とマークするフィールドを暗号化する必要があります。

  • 接続のautoEncryptionOpts schemaMapオブジェクトに指定されたコレクションのキーが含まれていない場合、クライアントはコレクションのサーバー側リモート スキーマをダウンロードし、それを使用してフィールド レベルの暗号化を自動実行します。

    重要

    動作に関する考慮事項

    autoEncryptionOptsに指定されたコレクションのキーが含まれていない場合:

    • クライアントは、フィールドレベルの自動暗号化に関してサーバーが有効なスキーマを持っていることを信頼します。

    • クライアントはリモート スキーマを使用して自動 CSFLE のみを実行します。 クライアントは、スキーマで指定された他の検証ルールを強制しません。

サーバー側で CSFLE を設定する方法については、「 CSFLE サーバー側でのスキーマ強制 」を参照してください。

戻る

Fundamentals