AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

GCP で自動 Queryable Encryption を使用する

このガイドでは、 MongoDB Queryable Encryption機能を実装し、ドキュメント フィールドを自動的に暗号化および復号化し、キー管理にGCP KMSを使用するアプリケーションを構築する方法について説明します。

このガイドの手順を完了すると、次のものが作成されます。

  • によって管理される CMKGoogle Cloud PlatformKMS

  • CMKを使用して暗号化されたフィールドを持つドキュメントを挿入する動作するクライアント アプリケーション

Tip

CMK(カスタマー マスター キー)

CMK の詳細については、暗号化のキーと Key Vaults のドキュメントをお読みください。

このガイドのコードを完了して実行するには、Queryable Encryption互換ドライバーと依存関係のインストールページに示されているように開発環境を設定する必要があります。

Tip

詳細: フルアプリケーション

このサンプル アプリケーションの完全なコードを確認するには、プログラミング言語に対応するタブを選択し、表示されたリンクに従ってください。 各サンプル アプリケーション リポジトリにはREADME.mdファイルが含まれており、環境を設定しアプリケーションを実行する方法を学習できます。

1

Google Cloud Platformでサービス アカウントを作成するには、Google の公式ドキュメントのサービス アカウントの作成ガイドを参照してください。

Google Cloud Platformでサービス アカウント キーを追加するには、Google の公式ドキュメントのサービス アカウント キーの管理ガイドに従ってください。

重要

サービス アカウント キーを作成すると、秘密キー情報の 1 回限りのダウンロードが行われます。 このチュートリアルの後半で使用するために、必ず PKCS12 または JSON 形式でこのファイルをダウンロードしてください。

2

Google の 公式ドキュメント にある キーの作成 ガイドに従って、キー リングと対称キーを作成します。

このキーは CMK( CMK )です。

このチュートリアルの後のステップで使用するために、 CMKの次の詳細を記録します。

フィールド
必須
説明

key_name

はい

CMKの識別子。

key_string

はい

キーが属するキーのグループの識別子。

key_version

No

名前付きキーのバージョン。

ロケーション

はい

キーに指定されたリージョン。

エンドポイント

No

Google Cloud Platform KMSのホストとオプション ポート。 デフォルト値はcloudkms.googleapis.comです。

1

このチュートリアルのコード サンプルでは、次の変数を使用して Queryable Encryption ワークフローを実行します。

  • kmsProviderName - CMK の保存に使用している KMS。 このチュートリアルでは、この変数を"gcp"に設定します。

  • uri - MongoDB 配置接続 URI。 MONGODB_URI環境変数で接続 URI を設定するか、値を直接置き換えます。

  • keyVaultDatabaseName - データ暗号化キー(DEK)が保存される MongoDB のデータベース。 この変数を"encryption"に設定します。

  • keyVaultCollectionName - DEK が保存される MongoDB のコレクション。 この変数を"__keyVault"に設定します。

  • keyVaultNamespace - DEK が保存される MongoDB の名前空間。 この変数に、ピリオドで区切られたkeyVaultDatabaseName変数とkeyVaultCollectionName変数の値を設定します。

  • encryptionDatabaseName -暗号化されたデータが保存される MongoDB のデータベース。 この変数を"medicalRecords"に設定します。

  • encryptedCollectionName - 暗号化されたデータが保存される MongoDB のコレクション。 この変数を"patients"に設定します。

次のコードを使用して、これらの変数を宣言できます。

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";

重要

キーヴォールトコレクションの名前空間権限

Key Vault コレクションはencryption.__keyVault名前空間にあります。 アプリケーションが MongoDB への接続に使用するデータベースユーザーが、この名前空間に対する 読み取り /書き込み権限を持っていることを確認します。

Tip

環境変数

このチュートリアルのサンプル コードは、設定する必要がある環境変数を参照します。 あるいは、コード内で値を直接置き換えることもできます。

これらの環境変数を設定する方法については、Github のサンプルアプリケーションに含まれる README.md ファイルを参照してください。

2

次の構造を持つGoogle Cloud Platform KMS認証情報を含む変数を作成します。

kmsProviderCredentials = {
gcp: {
email: process.env["GCP_EMAIL"], // Your GCP email
privateKey: process.env["GCP_PRIVATE_KEY"], // Your GCP private key
},
};

次の構造を持つ、CMK の認証情報を含む変数を作成します。 このチュートリアルの「 新しいカスタマー マスター キーの作成」の手順で記録した認証情報を使用します。

customerMasterKeyCredentials = {
projectId: process.env["GCP_PROJECT_ID"], // Your GCP Project ID
location: process.env["GCP_LOCATION"], // Your GCP Key Location
keyRing: process.env["GCP_KEY_RING"], // Your GCP Key Ring
keyName: process.env["GCP_KEY_NAME"], // Your GCP Key Name
};

次のオプションを含むautoEncryptionOptionsオブジェクトを作成します。

  • キーヴォールト コレクションの名前空間

  • Google Cloud Platform KMS認証情報を含む kmsProviderCredentials オブジェクト

const autoEncryptionOptions = {
keyVaultNamespace: keyVaultNamespace,
kmsProviders: kmsProviderCredentials,
};

注意

自動暗号化オプション

自動暗号化オプションは、暗号化共有ライブラリに構成情報を提供し、暗号化されたフィールドにアクセスするときにアプリケーションの動作を変更します。

自動暗号化共有ライブラリの詳細については、「 Queryable Encryption のための自動暗号化共有ライブラリ」ページを参照してください。

コレクション内のデータの暗号化と復号化に使用されるクライアントを作成するには、接続 URI と 自動暗号化オプションを使用して新しいMongoClientをインスタンス化します。

const encryptedClient = Mongo(uri, autoEncryptionOptions);

フィールドを暗号化するには、暗号化スキーマに追加します。 フィールドでクエリを有効にするには、「クエリ」プロパティを追加します。 暗号化スキーマは、次のように作成します。

const encryptedFieldsMap = {
encryptedFields: {
fields: [
{
path: "patientRecord.ssn",
bsonType: "string",
queries: { queryType: "equality" },
},
{
path: "patientRecord.billing",
bsonType: "object",
},
],
},
};

注意

前のコード例では、「ssn」フィールドと「 Billing 」フィールドの両方が暗号化されていますが、クエリは「ssn」フィールドのみです。

暗号化ヘルパー メソッドの API にアクセスするには、 ClientEncryptionをインスタンス化します。

const clientEncryption = encryptedClient.getClientEncryption()

ClientEncryptionクラスからアクセスされる暗号化ヘルパー メソッドを使用して、暗号化されたコレクションを作成します。 このメソッドは、暗号化されたフィールドのデータ暗号化キーを自動的に生成し、暗号化されたコレクションを作成します。

await clientEncryption.createEncryptedCollection(
encryptedDatabaseName,
encryptedCollectionName,
{
provider: kmsProviderName,
createCollectionOptions: encryptedFieldsMap,
masterKey: customerMasterKeyCredentials,
}
);
3

ユーザの個人情報を説明するサンプルドキュメントを作成します。 次の例に示すように、暗号化されたクライアントを使用して、 patientsコレクションに挿入します。

const patientDocument = {
patientName: "Jon Doe",
patientId: 12345678,
patientRecord: {
ssn: "987-65-4320",
billing: {
type: "Visa",
number: "4111111111111111",
},
},
};
const encryptedCollection = encryptedClient.getDB(encryptedDatabaseName).getCollection(encryptedCollectionName);
const insertResult = await encryptedCollection.insertOne(patientDocument);
4

次のコード サンプルでは、暗号化されたフィールドに対して検索クエリを実行し、復号化されたデータを出力します。

const findResult = await encryptedCollection.findOne({
"patientRecord.ssn": "987-65-4320",
});
console.log(findResult);

上記のコード サンプルの出力は、次のようになります。

{
"_id": {
"$oid": "648b384a722cb9b8392df76a"
},
"name": "Jon Doe",
"record": {
"ssn": "987-65-4320",
"billing": {
"type": "Visa",
"number": "4111111111111111"
}
},
"__safeContent__": [
{
"$binary": {
"base64": "L1NsYItk0Sg+oL66DBj6IYHbX7tveANQyrU2cvMzD9Y=",
"subType": "00"
}
}
]
}

警告

MongoDB_ENUS_JAJP フィールドを変更しないでください

__safeContent__フィールドは Queryable Encryption に必須です。 このフィールドの内容は変更しないでください。

Queryable Encryptionの仕組みについては、 Queryable Encryption の基礎 を参照してください。

このガイドで言及されているトピックについて詳しくは、次のリンクを参照してください。

  • Queryable Encryption コンポーネントの詳細については、リファレンスページを参照してください。

  • カスタマー マスター キーとデータ暗号化キーの仕組みについては、「暗号化キーとキーヴォールト」ページを参照してください。

  • KMS プロバイダーが Queryable Encryption キーを管理する方法については、 KMS プロバイダーのページで確認してください。