Docs Menu
Docs Home
/ / /
C++ 드라이버
/

클라이언트 사이드 필드 레벨 암호화

이 페이지의 내용

  • 클라이언트 사이드 필드 레벨 암호화
  • 설치
  • 예시

MongoDB 4.2 의 새로운 기능 클라이언트 측 필드 레벨 암호화 (CSFLE) 를 사용하면 관리자와 개발자가 다른 MongoDB 암호화 기능 외에도 특정 데이터 필드를 암호화할 수 있습니다.

개발자는 CSFLE를 사용하여 서버 사이드 구성이나 지시문 없이 클라이언트 사이드에서 필드를 암호화할 수 있습니다. 클라이언트 측 필드 레벨 암호화는 서버 관리자를 포함한 권한이 없는 당사자가 암호화된 데이터를 읽을 수 없도록 애플리케이션이 보장해야 하는 워크로드를 지원합니다.

CSFLE에 대한 개요는 매뉴얼의 공식 MongoDB 문서를 참조하세요.

클라이언트 측 필드 레벨 암호화 는 libmongocrypt 라는 C 라이브러리를 사용하여 어려운 암호화 작업을 수행합니다. 이 종속성은 C 운전자 에 의해 managed 됩니다. C 운전자 설치가 1.16.0 이상이고 클라이언트 측 필드 레벨 암호화 지원 으로 컴파일된 경우 이 종속성은 내부적으로 managed 해야 합니다. 자세한 내용은 C 드라이버의 클라이언트 측 필드 레벨 암호화 사용 을(를) 참조하세요.

자동 CSFLE는 드라이버가 작동하는 동안 데몬으로 실행되는 mongocryptd 라는 새 바이너리에 의존합니다. 이 바이너리는 MongoDB Enterprise에서만 사용할 수 있습니다.

mongocryptd 드라이버와 별도로 시작하거나 암호화를 사용할 때 자동으로 생성되도록 둘 수 있습니다.

mongocryptd를 별도로 실행하려면 mongocryptdBypassSpawn 플래그를 클라이언트의 자동 암호화 옵션에 전달합니다.

auto mongocryptd_options = make_document(kvp("mongocryptdBypassSpawn", true));
options::auto_encryption auto_encrypt_opts{};
auto_encrypt_opts.extra_options({mongocryptd_options.view()});

mongocryptd 바이너리가 현재 경로에 있는 경우 드라이버는 사용자 지정 플래그 없이 이를 생성할 수 있습니다. 그러나 mongocryptd 바이너리가 다른 경로에 있는 경우 mongocryptdSpawnPath 옵션을 사용하여 경로를 설정합니다.

auto mongocryptd_options = make_document(kvp("mongocryptdSpawnPath", "path/to/mongocryptd"));
options::auto_encryption auto_encrypt_opts{};
auto_encrypt_opts.extra_options({mongocryptd_options.view()});

자동 클라이언트 측 필드 레벨 암호화는 auto_encryption_opts 옵션이 mongocxx::options::auto_encryption 인스턴스로 설정된 mongocxx::client 를 생성하여 활성화됩니다. 다음 예제에서는 mongocxx::client_encryption 클래스를 사용하여 새 암호화 데이터 키를 생성하고 자동 클라이언트 사이드 필드 수준 암호화를 설정하는 방법을 보여 줍니다.

참고

자동 클라이언트 사이드 필드 수준 암호화에는 MongoDB 4.2 엔터프라이즈 또는 MongoDB 4.2 이 필요합니다. Atlas cluster. 서버의 커뮤니티 버전은 자동 암호 해독과 명시적 클라이언트 사이드 필드 수준 암호화를 지원합니다.

다음 예시 는 schema_map 옵션을 통해 자동 암호화 규칙을 지정하는 방법을 보여줍니다. 자동 암호화 규칙은 JSON schema 구문의 엄격한 하위 집합을 사용하여 표현됩니다.

schema_map 를 제공하면 서버에서 가져온 JSON Schema에 의존하는 것보다 더 강력한 보안이 제공됩니다. 악의적인 서버가 잘못된 JSON schema 를 광고하여 클라이언트를 속여 암호화되어야 하는 암호화되지 않은 데이터를 보내도록 할 수 있습니다.

schema_map 에 제공된 JSON Schemas는 자동 클라이언트 사이드 필드 수준 암호화를 구성하는 데에만 적용됩니다. JSON schema의 다른 유효성 검사 규칙은 드라이버에서 적용되지 않으므로 오류가 발생합니다.

//
// The schema map has the following form:
//
// {
// "test.coll" : {
// "bsonType" : "object",
// "properties" : {
// "encryptedFieldName" : {
// "encrypt" : {
// "keyId" : [ <datakey as UUID> ],
// "bsonType" : "string",
// "algorithm" : <algorithm>
// }
// }
// }
// }
// }
//

예제/mongocxx/automatic_client_side_field_level_encryption.cpp 를 참조하세요. 자동 암호화 를 위해 를 설정하다 하는 방법에 대한 전체 예시 를 확인하세요.JSON schema

MongoDB 4.2 서버는 스키마 유효성 검사를 사용하여 컬렉션의 특정 필드에 암호화를 적용하는 기능을 지원합니다. 이 스키마 유효성 검사는 애플리케이션이 "encrypt" JSON schema 키워드로 표시된 필드에 암호화되지 않은 값을 삽입하는 것을 방지합니다.

mongocxx::client_encryption 를 사용하여 자동 클라이언트 사이드 필드 수준 암호화 를 설정하다 하여 새 암호화 데이터 키를 만들고 자동 암호화 JSON schema 구문으로 컬렉션 을 만들 수 있습니다.

// Please see the linked example below for full json_schema construction.
bsoncxx::document::value json_schema{};
// Create the collection with the encryption JSON Schema.
auto cmd = document{} << "create"
<< "coll"
<< "validator" << open_document
<< "$jsonSchema" << json_schema.view()
<< close_document << finalize;
db.run_command(cmd.view());

예제/mongocxx/server_side_field_level_encryption_enforcement.cpp 를 참조하세요. 서버 에서 암호화 시행을 설정하는 전체 예시 를 확인하세요.

명시적 암호화는 MongoDB Community 기능이며 mongocryptd 프로세스를 사용하지 않습니다. 명시적 암호화는 mongocxx::client_encryption 클래스에서 제공합니다.

// Explicitly encrypt a BSON value.
auto to_encrypt = bsoncxx::types::bson_value::make_value("secret message");
auto encrypted_message = client_encryption.encrypt(to_encrypt, encrypt_opts);
// Explicitly decrypt a BSON value.
auto decrypted_message = client_encryption.decrypt(encrypted_message);

예제/mongocxx/explicit_encryption.cpp 를 참조하세요. 명시적 암호화 및 암호 해독을 사용하는 전체 예시 를 확인하세요.

자동 암호화에는 MongoDB 4.2 엔터프라이즈 또는 MongoDB 4.2 이 필요합니다. Atlas cluster에서는 모든 사용자에 대해 자동 암호 해독이 지원됩니다. 자동 암호화 없이 자동 암호 해독을 구성하려면 options::auto_encryption 클래스에서 bypass_auto_encryption=True 를 설정합니다.

options::auto_encryption auto_encrypt_opts{};
auto_encrypt_opts.bypass_auto_encryption(true);
// Please see full example for complete options construction.
// Create a client with automatic decryption enabled, but automatic encryption bypassed.
options::client client_opts{};
client_opts.auto_encryption_opts(std::move(auto_encrypt_opts));
class client client_encrypted {uri{}, std::move(client_opts)};

예제/mongocxx/explicit_encryption_auto_decryption.cpp 를 참조하세요. 자동 암호 해독과 함께 명시적 암호화 를 사용하는 예시 를 들 수 있습니다.

돌아가기

사용 중 암호화