자동 암호화
MongoDB는 클라이언트 측 필드 레벨 암호화를 사용할 때 읽기 및 쓰기 작업에서 필드 자동 암호화를 지원합니다. mongosh
및 공식 MongoDB 드라이버를 사용하여 자동 암호화를 수행할 수 있습니다. CSFLE를 지원하는 공식 호환 드라이버의 전체 목록은 드라이버 호환성 CSFLE 호환성을 참조하세요.
암호화된 쓰기 및 읽기 작동 방식
다음 다이어그램은 클라이언트 애플리케이션 및 드라이버가 필드 수준의 암호화된 데이터를 쓰고 읽는 방법을 보여줍니다.
암호화된 쓰기
쓰기 작업의 경우 드라이버는 MongoDB 데이터베이스에 쓰기 전에 필드 값을 암호화합니다.
다음 다이어그램은 필드 수준의 암호화된 데이터 쓰기를 수행하기 위해 클라이언트 애플리케이션 및 드라이버가 수행하는 단계를 보여줍니다.
암호화된 읽기
읽기 작업의 경우 드라이버는 읽기 작업을 실행 하기 전에 쿼리의 필드 값을 암호화합니다.
암호화된 필드를 반환하는 읽기 작업의 경우, 드라이버가 해당 값을 암호화하는 데 사용된 고객 마스터 키(CMK) 및 데이터 암호화 키(DEK)에 대한 액세스 권한으로 구성된 경우에만 드라이버가 암호화된 값을 자동으로 복호화합니다.
다음 다이어그램은 클라이언트 애플리케이션과 드라이버가 필드 수준의 암호화된 데이터를 쿼리하고 해독하기 위해 수행하는 단계를 보여줍니다.
자동 클라이언트 측 필드 레벨 암호화 활성화
자동 암호화를 활성화하려면 클라이언트의 MongoClient
인스턴스에서 자동 암호화 설정을 지정하세요.
다음 코드 스니펫은 mongosh
및 MongoDB 드라이버에서 자동 암호화가 활성화된 클라이언트를 만드는 방법을 보여줍니다.
var autoEncryptionOpts = { "keyVaultNamespace" : "<database>.<collection>", "kmsProviders" : { ... }, "schemaMap" : { ... } } cluster = Mongo( "<Your Connection String>", autoEncryptionOpts );
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
에 지정된 컬렉션의 키가 포함되어 있지 않은 경우클라이언트는 자동 Queryable Encryption과 관련하여 서버에 유효한 스키마가 있음을 신뢰합니다.
클라이언트는 원격 스키마를 사용하여 자동 CSFLE만 수행합니다. 클라이언트는 스키마에 지정된 다른 유효성 검사 규칙을 적용하지 않습니다.
서버측 CSFLE 적용을 설정하는 방법을 알아보려면 CSFLE 서버 측 스키마 시행을 참조하세요.