Docs Menu
Docs Home
/
MongoDB Shell

クライアントサイドのフィールド レベル暗号化

項目一覧

  • データ暗号化キーの作成

MongoDB Enterpriseまたは MongoDB Atlas クラスターを使用する場合、 mongoshを使用してクライアント側フィールドレベル暗号化を構成し、暗号化サポートに接続できます。 クライアント側のフィールドレベル暗号化は、フィールド値の暗号化と復号化をサポートするためにデータ暗号化キーを使用し、この暗号化キーマテリアルをKMS ( KMS )に保存します。

mongosh は、クライアント側のフィールドレベル暗号化で使用する次の KMS プロバイダーをサポートします。

  • Amazon Web Services KMS

  • Azure Key Vault

  • Google Cloud Platform KMS

  • ローカルで管理されるキーファイル

次の手順では、 mongoshを使用して、クライアント側のフィールドレベルの暗号化と復号化で使用するデータ暗号化キーを作成します。

以下のタブを使用して、配置に適した KMSを選択します。

1

--nodbオプションを使用して、実行中のデータベースに接続せずにmongoshセッションを作成します。

mongosh --nodb
2

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_IDYOUR_AWS_SECRET_ACCESS_KEYの値を入力します。

3

mongoshでは、 Mongo()コンストラクターを使用してターゲット クラスターへのデータベース接続を確立します。 AutoEncryptionOptsドキュメントをMongo()コンストラクターの 2 番目のパラメーターとして指定して、クライアント側のフィールドレベル暗号化の接続を構成します。

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
autoEncryptionOpts
)

replaceMe.example.net URIを、ターゲット クラスターの接続stringに置き換えます。

4

getKeyVault() shell メソッドを使用してkeyVaultオブジェクトを作成します。

keyVault = csfleDatabaseConnection.getKeyVault();
5

createKey() shell メソッドを使用してデータ暗号化キーを作成します。

keyVault.createKey(
"aws",
{ region: "regionname", key: "awsarn" },
[ "keyAlternateName" ]
)

以下の条件に一致するもの。

成功した場合、 createKey()は新しいデータ暗号化キーのUUIDを返します。 新しいデータ暗号化キー ドキュメントをキーヴォールトから検索するには、次のいずれかを実行します。

  • getKey()を使用して、 UUIDで作成されたキーを取得するか、

  • 別名でキーを検索するには、 getKeyByAltName()を使用します(指定されている場合)。

1

--nodbオプションを使用して、実行中のデータベースに接続せずにmongoshセッションを作成します。

mongosh --nodb
2

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_IDYOUR_CLIENT_IDYOUR_CLIENT_SECRETの値を入力します。

3

mongoshでは、 Mongo()コンストラクターを使用してターゲット クラスターへのデータベース接続を確立します。 AutoEncryptionOptsドキュメントをMongo()コンストラクターの 2 番目のパラメーターとして指定して、クライアント側のフィールドレベル暗号化の接続を構成します。

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
autoEncryptionOpts
)

replaceMe.example.net URIを、ターゲット クラスターの接続stringに置き換えます。

4

getKeyVault() shell メソッドを使用してkeyVaultオブジェクトを作成します。

keyVault = csfleDatabaseConnection.getKeyVault();
5

createKey() shell メソッドを使用してデータ暗号化キーを作成します。

keyVault.createKey(
"azure",
{ keyName: "keyvaultname", keyVaultEndpoint: "endpointname" },
[ "keyAlternateName" ]
)

以下の条件に一致するもの。

  • 構成された Azure Key Vault を指定するには、最初のパラメータが"azure"である必要があります。

  • 2 番目のパラメーターは、次の要素を含むドキュメントである必要があります。

  • 3 つ目のパラメータは、データ暗号化のキーの 1 つ以上のkeyAltNamesの配列にすることができます。 各キーの代替名は一意である必要があります。 getKeyVault()keyAltNames一意なインデックスを作成し、フィールドに一意性を強制します(未作成の場合)。 キーの代替名により、データ暗号化されたキーを見つけやすくなります。

成功した場合、 createKey()は新しいデータ暗号化キーのUUIDを返します。 新しいデータ暗号化キー ドキュメントをキーヴォールトから検索するには、次のいずれかを実行します。

  • getKey()を使用して、 UUIDで作成されたキーを取得するか、

  • 別名でキーを検索するには、 getKeyByAltName()を使用します(指定されている場合)。

1

--nodbオプションを使用して、実行中のデータベースに接続せずにmongoshセッションを作成します。

mongosh --nodb
2

GCP KMS のクライアント側フィールドレベル暗号化を構成するには、GCP メールとそれに関連付けられた秘密キーが必要です。

mongoshでは、次の認証情報を含むクライアント側のフィールドレベル暗号化構成を保存するための新しいAutoEncryptionOpts変数が作成されます。

var autoEncryptionOpts = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"gcp" : {
"email" : "YOUR_GCP_EMAIL",
"privateKey" : "YOUR_GCP_PRIVATEKEY"
}
}
}

必要に応じて、 YOUR_GCP_EMAILYOUR_GCP_PRIVATEKEYの値を入力します。

3

mongoshでは、 Mongo()コンストラクターを使用してターゲット クラスターへのデータベース接続を確立します。 AutoEncryptionOptsドキュメントをMongo()コンストラクターの 2 番目のパラメーターとして指定して、クライアント側のフィールドレベル暗号化の接続を構成します。

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
autoEncryptionOpts
)

replaceMe.example.net URIを、ターゲット クラスターの接続stringに置き換えます。

4

getKeyVault() shell メソッドを使用してkeyVaultオブジェクトを作成します。

keyVault = csfleDatabaseConnection.getKeyVault();
5

createKey() shell メソッドを使用してデータ暗号化キーを作成します。

keyVault.createKey(
"gcp",
{ projectId: "projectid",
location: "locationname",
keyRing: "keyringname",
keyName: "keyname"
},
[ "keyAlternateName" ]
)

以下の条件に一致するもの。

  • 構成された を指定するには、最初のパラメータは である 必要"gcp"Google Cloud PlatformKMS があります。

  • 2 つ目のパラメーターは、次を含むドキュメントである必要があります:

    • projectid は、GCP プロジェクトの名前です(例: my-project

    • locationname は、KMS キーリングのロケーションです(例: global

    • keyringname は、KMS キーリングの名前です(例: my-keyring

    • keyname は、キーの名前です。

  • 3 つ目のパラメータは、データ暗号化のキーの 1 つ以上のkeyAltNamesの配列にすることができます。 各キーの代替名は一意である必要があります。 getKeyVault()keyAltNames一意なインデックスを作成し、フィールドに一意性を強制します(未作成の場合)。 キーの代替名により、データ暗号化されたキーを見つけやすくなります。

成功した場合、 createKey()は新しいデータ暗号化キーのUUIDを返します。 新しいデータ暗号化キー ドキュメントをキーヴォールトから検索するには、次のいずれかを実行します。

  • getKey()を使用して、 UUIDで作成されたキーを取得するか、

  • 別名でキーを検索するには、 getKeyByAltName()を使用します(指定されている場合)。

1

--nodbオプションを使用して、実行中のデータベースに接続せずにmongoshセッションを作成します。

mongosh --nodb
2

ローカルで管理されているキーに対してクライアント側のフィールドレベル暗号化を構成するには、基本的に64でエンコードされた96バイトの string を指定する必要があります。 これらの要件に一致するキーを生成するには、 mongoshで次のコマンドを実行します。

crypto.randomBytes(96).toString('base64')

このキーは次のステップで必要になります。

3

mongoshでは、クライアント側のフィールドレベル暗号化構成を保存するための新しいAutoEncryptionOpts変数が作成され、 MY_LOCAL_KEYがステップ1で生成されたキーに置き換えられます。

var autoEncryptionOpts = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"local" : {
"key" : BinData(0, "MY_LOCAL_KEY")
}
}
}
4

mongoshでは、 Mongo()コンストラクターを使用してターゲット クラスターへのデータベース接続を確立します。 AutoEncryptionOptsドキュメントをMongo()コンストラクターの 2 番目のパラメーターとして指定して、クライアント側のフィールドレベル暗号化の接続を構成します。

csfleDatabaseConnection = Mongo(
"mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster",
autoEncryptionOpts
)
5

getKeyVault() shell メソッドを使用してkeyVaultオブジェクトを作成します。

keyVault = csfleDatabaseConnection.getKeyVault();
6

createKey() shell メソッドを使用してデータ暗号化キーを作成します。

keyVault.createKey(
"local",
[ "keyAlternateName" ]
)

以下の条件に一致するもの。

  • 構成されたローカル マネージド キーを指定するには、最初のパラメータがlocalである必要があります。

  • 2 番目のパラメータは、データ暗号化のキーの 1 つ以上のkeyAltNamesの配列にすることができます。 各キーの代替名は一意である必要があります。 getKeyVault()keyAltNamesに一意なインデックスを作成し、フィールドに一意性を強制します(未作成の場合)。 キーの代替名により、データ暗号化されたキーを見つけやすくなります。

成功した場合、 createKey()は新しいデータ暗号化キーのUUIDを返します。 新しいデータ暗号化キー ドキュメントをキーヴォールトから検索するには、次のいずれかを実行します。

  • getKey()を使用して、 UUIDで作成されたキーを取得するか、

  • 別名でキーを検索するには、 getKeyByAltName()を使用します(指定されている場合)。

Tip

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

戻る

集計パイプラインを実行する