クライアントサイドのフィールド レベル暗号化
項目一覧
MongoDB Enterpriseまたは MongoDB Atlas クラスターを使用する場合、 mongosh
を使用してクライアント側フィールドレベル暗号化を構成し、暗号化サポートに接続できます。 クライアント側のフィールドレベル暗号化は、フィールド値の暗号化と復号化をサポートするためにデータ暗号化キーを使用し、この暗号化キーマテリアルをKMS ( KMS )に保存します。
mongosh
は、クライアント側のフィールドレベル暗号化で使用する次の KMS プロバイダーをサポートします。
Amazon Web Services KMS
Azure Key Vault
Google Cloud Platform KMS
ローカルで管理されるキーファイル
データ暗号化キーの作成
次の手順では、 mongosh
を使用して、クライアント側のフィールドレベルの暗号化と復号化で使用するデータ暗号化キーを作成します。
以下のタブを使用して、配置に適した KMSを選択します。
mongosh
shell を起動します。
--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-2
Amazonリソース名(ARN) にAmazon Web Services カスタマー マスター キー(CMK)を入力します。
3 つ目のパラメータは、データ暗号化のキーの 1 つ以上の
keyAltNames
の配列にすることができます。 各キーの代替名は一意である必要があります。getKeyVault()
はkeyAltNames
に一意なインデックスを作成し、フィールドに一意性を強制します(未作成の場合)。 キーの代替名により、データ暗号化されたキーを見つけやすくなります。
成功した場合、 createKey()
は新しいデータ暗号化キーのUUIDを返します。 新しいデータ暗号化キー ドキュメントをキーヴォールトから検索するには、次のいずれかを実行します。
getKey()
を使用して、 UUIDで作成されたキーを取得するか、別名でキーを検索するには、
getKeyByAltName()
を使用します(指定されている場合)。
mongosh
shell を起動します。
--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 の DNS 名(例:
my-key-vault.vault.azure.net
)
3 つ目のパラメータは、データ暗号化のキーの 1 つ以上の
keyAltNames
の配列にすることができます。 各キーの代替名は一意である必要があります。getKeyVault()
はkeyAltNames
に一意なインデックスを作成し、フィールドに一意性を強制します(未作成の場合)。 キーの代替名により、データ暗号化されたキーを見つけやすくなります。
成功した場合、 createKey()
は新しいデータ暗号化キーのUUIDを返します。 新しいデータ暗号化キー ドキュメントをキーヴォールトから検索するには、次のいずれかを実行します。
getKey()
を使用して、 UUIDで作成されたキーを取得するか、別名でキーを検索するには、
getKeyByAltName()
を使用します(指定されている場合)。
mongosh
shell を起動します。
--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-project
locationname
は、KMS キーリングのロケーションです(例:global
keyringname
は、KMS キーリングの名前です(例:my-keyring
keyname
は、キーの名前です。
3 つ目のパラメータは、データ暗号化のキーの 1 つ以上の
keyAltNames
の配列にすることができます。 各キーの代替名は一意である必要があります。getKeyVault()
はkeyAltNames
に一意なインデックスを作成し、フィールドに一意性を強制します(未作成の場合)。 キーの代替名により、データ暗号化されたキーを見つけやすくなります。
成功した場合、 createKey()
は新しいデータ暗号化キーのUUIDを返します。 新しいデータ暗号化キー ドキュメントをキーヴォールトから検索するには、次のいずれかを実行します。
getKey()
を使用して、 UUIDで作成されたキーを取得するか、別名でキーを検索するには、
getKeyByAltName()
を使用します(指定されている場合)。
mongosh
shell を起動します。
--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()
を使用します(指定されている場合)。