MongoDB EnterpriseまたはMongoDB Atlasクラスターを使用する場合は、mongosh を使用してQueryable Encryptionクライアント側フィールドレベル暗号化を構成し、暗号化サポートに接続できます。 Queryable Encryptionと CSFLE はどちらも、フィールド値の暗号化と復号化をサポートするためにデータ暗号化キーを使用し、この暗号化のキーマテリアルを KMS(Key Management Service)に保存します。
mongosh は、 Queryable Encryptionと CSFLE で使用する次の KMS プロバイダーをサポートしています。
Amazon Web Services KMS
Azure Key Vault
Google Cloud Platform KMS
ローカルで管理されるキーファイル
データ暗号化キーの作成
次の手順では、mongosh を使用して、フィールドレベル暗号化のデータ暗号化のキーを作成します。
以下のタブを使用して、配置に適した KMSを選択します。
mongoshshell を起動します。
--nodbオプションを使用して、実行中のデータベースに接続せずにmongoshセッションを作成します。
mongosh --nodb
暗号化構成を作成します。
Amazon Web Services KMSのクライアント側フィールドレベル暗号化を構成するには、 Amazon Web ServicesアクセスキーIDとそれに関連付けられたシークレットアクセスキーが必要です。 Amazon Web Servicesアクセス キーは、 KMSサービスに対するすべての リスト および 読み取り 権限を持つ IAM ユーザーに対応する必要があります。
mongoshでは、次の認証情報を含むクライアント側のフィールドレベル暗号化構成を保存するための新しいAutoEncryptionOpts変数が作成されます。
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "aws" : { "accessKeyId" : "YOUR_AWS_ACCESS_KEY_ID", "secretAccessKey" : "YOUR_AWS_SECRET_ACCESS_KEY" } } }
必要に応じて、 YOUR_AWS_ACCESS_KEY_IDとYOUR_AWS_SECRET_ACCESS_KEYの値を入力します。
暗号化サポートで接続します。
mongoshでは、 Mongo()コンストラクターを使用してターゲット クラスターへのデータベース接続を確立します。 AutoEncryptionOptsドキュメントをMongo()コンストラクターの 2 番目のパラメーターとして指定して、クライアント側のフィールドレベル暗号化の接続を構成します。
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", autoEncryptionOpts )
replaceMe.example.net URIを、ターゲット クラスターの接続stringに置き換えます。
キーヴォールト オブジェクトを作成します。
getKeyVault() shell メソッドを使用してkeyVaultオブジェクトを作成します。
keyVault = csfleDatabaseConnection.getKeyVault();
暗号化キーを作成します。
createKey() shell メソッドを使用してデータ暗号化キーを作成します。
keyVault.createKey( "aws", { region: "regionname", key: "awsarn" }, [ "keyAlternateName" ] )
以下の条件に一致するもの。
構成された Amazon Web Services KMS を指定するには、最初のパラメータが
"aws"である必要があります。2 番目のパラメーターは、次の内容を含むドキュメントである必要があります。
接続しているAmazon Web Servicesのリージョン(例:
us-west-2Amazonリソース名(ARN) をAmazon Web Servicesカスタマーマスター キー(CMK)に設定します。
3 つ目のパラメータは、データ暗号化のキーの 1 つ以上の
keyAltNamesの配列にすることができます。 各キーの代替名は一意である必要があります。getKeyVault()はkeyAltNamesに一意なインデックスを作成し、フィールドに一意性を強制します(未作成の場合)。 キーの代替名により、データ暗号化されたキーを見つけやすくなります。
成功した場合、 createKey()は新しいデータ暗号化キーのUUIDを返します。 新しいデータ暗号化キー ドキュメントをキーヴォールトから検索するには、次のいずれかを実行します。
getKey()を使用して、 UUIDで作成されたキーを取得するか、別名でキーを検索するには、
getKeyByAltName()を使用します(指定されている場合)。
mongoshshell を起動します。
--nodbオプションを使用して、実行中のデータベースに接続せずにmongoshセッションを作成します。
mongosh --nodb
暗号化構成を作成します。
Azure Key Vault のクライアント側フィールド レベル暗号化を構成するには、有効なテナント ID、クライアント ID、およびクライアント シークレットが必要です。
mongoshでは、次の認証情報を含むクライアント側のフィールドレベル暗号化構成を保存するための新しいAutoEncryptionOpts変数が作成されます。
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "azure" : { "tenantId" : "YOUR_TENANT_ID", "clientId" : "YOUR_CLIENT_ID", "clientSecret" : "YOUR_CLIENT_SECRET" } } }
必要に応じて、 YOUR_TENANT_ID 、 YOUR_CLIENT_ID 、 YOUR_CLIENT_SECRETの値を入力します。
暗号化サポートで接続します。
mongoshでは、 Mongo()コンストラクターを使用してターゲット クラスターへのデータベース接続を確立します。 AutoEncryptionOptsドキュメントをMongo()コンストラクターの 2 番目のパラメーターとして指定して、クライアント側のフィールドレベル暗号化の接続を構成します。
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", autoEncryptionOpts )
replaceMe.example.net URIを、ターゲット クラスターの接続stringに置き換えます。
キーヴォールト オブジェクトを作成します。
getKeyVault() shell メソッドを使用してkeyVaultオブジェクトを作成します。
keyVault = csfleDatabaseConnection.getKeyVault();
暗号化キーを作成します。
createKey() shell メソッドを使用してデータ暗号化キーを作成します。
keyVault.createKey( "azure", { keyName: "keyvaultname", keyVaultEndpoint: "endpointname" }, [ "keyAlternateName" ] )
以下の条件に一致するもの。
構成された Azure Key Vault を指定するには、最初のパラメータが
"azure"である必要があります。2 番目のパラメーターは、次の要素を含むドキュメントである必要があります。
Azure Key Vault の名前
使用する Azure Key Vault の DNS 名(例:
my-key-vault.vault.azure.net)
3 つ目のパラメータは、データ暗号化のキーの 1 つ以上の
keyAltNamesの配列にすることができます。 各キーの代替名は一意である必要があります。getKeyVault()はkeyAltNamesに一意なインデックスを作成し、フィールドに一意性を強制します(未作成の場合)。 キーの代替名により、データ暗号化されたキーを見つけやすくなります。
成功した場合、 createKey()は新しいデータ暗号化キーのUUIDを返します。 新しいデータ暗号化キー ドキュメントをキーヴォールトから検索するには、次のいずれかを実行します。
getKey()を使用して、 UUIDで作成されたキーを取得するか、別名でキーを検索するには、
getKeyByAltName()を使用します(指定されている場合)。
mongoshshell を起動します。
--nodbオプションを使用して、実行中のデータベースに接続せずにmongoshセッションを作成します。
mongosh --nodb
暗号化構成を作成します。
GCP KMS のクライアント側フィールドレベル暗号化を構成するには、GCP メールとそれに関連付けられた秘密キーが必要です。
mongoshでは、次の認証情報を含むクライアント側のフィールドレベル暗号化構成を保存するための新しいAutoEncryptionOpts変数が作成されます。
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "gcp" : { "email" : "YOUR_GCP_EMAIL", "privateKey" : "YOUR_GCP_PRIVATEKEY" } } }
必要に応じて、 YOUR_GCP_EMAILとYOUR_GCP_PRIVATEKEYの値を入力します。
暗号化サポートで接続します。
mongoshでは、 Mongo()コンストラクターを使用してターゲット クラスターへのデータベース接続を確立します。 AutoEncryptionOptsドキュメントをMongo()コンストラクターの 2 番目のパラメーターとして指定して、クライアント側のフィールドレベル暗号化の接続を構成します。
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", autoEncryptionOpts )
replaceMe.example.net URIを、ターゲット クラスターの接続stringに置き換えます。
キーヴォールト オブジェクトを作成します。
getKeyVault() shell メソッドを使用してkeyVaultオブジェクトを作成します。
keyVault = csfleDatabaseConnection.getKeyVault();
暗号化キーを作成します。
createKey() shell メソッドを使用してデータ暗号化キーを作成します。
keyVault.createKey( "gcp", { projectId: "projectid", location: "locationname", keyRing: "keyringname", keyName: "keyname" }, [ "keyAlternateName" ] )
以下の条件に一致するもの。
構成された を指定するには、最初のパラメータは である 必要
"gcp"Google Cloud PlatformKMS があります。2 つ目のパラメーターは、次を含むドキュメントである必要があります:
projectidは、GCP プロジェクトの名前です(例:my-projectlocationnameは、KMS キーリングのロケーションです(例:globalkeyringnameは、KMS キーリングの名前です(例:my-keyringkeynameは、キーの名前です。
3 つ目のパラメータは、データ暗号化のキーの 1 つ以上の
keyAltNamesの配列にすることができます。 各キーの代替名は一意である必要があります。getKeyVault()はkeyAltNamesに一意なインデックスを作成し、フィールドに一意性を強制します(未作成の場合)。 キーの代替名により、データ暗号化されたキーを見つけやすくなります。
成功した場合、 createKey()は新しいデータ暗号化キーのUUIDを返します。 新しいデータ暗号化キー ドキュメントをキーヴォールトから検索するには、次のいずれかを実行します。
getKey()を使用して、 UUIDで作成されたキーを取得するか、別名でキーを検索するには、
getKeyByAltName()を使用します(指定されている場合)。
mongoshshell を起動します。
--nodbオプションを使用して、実行中のデータベースに接続せずにmongoshセッションを作成します。
mongosh --nodb
暗号化構成を作成します。
mongoshでは、クライアント側のフィールドレベル暗号化構成を保存するための新しいAutoEncryptionOpts変数が作成され、 MY_LOCAL_KEYがステップ1で生成されたキーに置き換えられます。
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, "MY_LOCAL_KEY") } } }
暗号化サポートで接続します。
mongoshでは、 Mongo()コンストラクターを使用してターゲット クラスターへのデータベース接続を確立します。 AutoEncryptionOptsドキュメントをMongo()コンストラクターの 2 番目のパラメーターとして指定して、クライアント側のフィールドレベル暗号化の接続を構成します。
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", autoEncryptionOpts )
キーヴォールト オブジェクトを作成します。
getKeyVault() shell メソッドを使用してkeyVaultオブジェクトを作成します。
keyVault = csfleDatabaseConnection.getKeyVault();
暗号化キーを作成します。
createKey() shell メソッドを使用してデータ暗号化キーを作成します。
keyVault.createKey( "local", [ "keyAlternateName" ] )
以下の条件に一致するもの。
構成されたローカル マネージド キーを指定するには、最初のパラメータが
localである必要があります。2 番目のパラメータは、データ暗号化のキーの 1 つ以上の
keyAltNamesの配列にすることができます。 各キーの代替名は一意である必要があります。getKeyVault()はkeyAltNamesに一意なインデックスを作成し、フィールドに一意性を強制します(未作成の場合)。 キーの代替名により、データ暗号化されたキーを見つけやすくなります。
成功した場合、 createKey()は新しいデータ暗号化キーのUUIDを返します。 新しいデータ暗号化キー ドキュメントをキーヴォールトから検索するには、次のいずれかを実行します。
getKey()を使用して、 UUIDで作成されたキーを取得するか、別名でキーを検索するには、
getKeyByAltName()を使用します(指定されている場合)。