Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / / / /

자동 암호화

이 페이지의 내용

  • 암호화된 쓰기 및 읽기 작동 방식
  • 암호화된 쓰기
  • 암호화된 읽기
  • 자동 클라이언트 측 필드 레벨 암호화 활성화
  • 서버측 필드 레벨 암호화 시행

MongoDB 는 클라이언트 측 필드 레벨 암호화 를 사용할 때 읽기 및 쓰기 (write) 작업에서 필드 자동 암호화를 지원합니다. mongosh 및 공식 MongoDB 드라이버를 사용하여 자동 암호화 를 수행할 수 있습니다. CSFLE를 지원 하는 공식 호환 드라이버의 전체 목록은 드라이버 호환성 클라이언트 측 필드 레벨 암호화 드라이버 호환성을 참조하세요.

다음 다이어그램은 클라이언트 애플리케이션 및 드라이버가 필드 수준의 암호화된 데이터를 쓰고 읽는 방법을 보여줍니다.

쓰기 작업의 경우 드라이버는 MongoDB 데이터베이스에 쓰기 전에 필드 값을 암호화합니다.

다음 다이어그램은 필드 수준의 암호화된 데이터 쓰기를 수행하기 위해 클라이언트 애플리케이션 및 드라이버가 수행하는 단계를 보여줍니다.

필드 수준 암호화 데이터 쓰기에 대한 데이터 흐름을 보여주는 다이어그램

읽기 작업의 경우 드라이버는 읽기 작업을 실행 하기 전에 쿼리의 필드 값을 암호화합니다.

암호화된 필드를 반환하는 읽기 작업의 경우, 드라이버가 해당 값을 암호화하는 데 사용된 고객 마스터 키(CMK) 및 데이터 암호화 키(DEK)에 대한 액세스 권한으로 구성된 경우에만 드라이버가 암호화된 값을 자동으로 복호화합니다.

다음 다이어그램은 클라이언트 애플리케이션과 드라이버가 필드 수준의 암호화된 데이터를 쿼리하고 해독하기 위해 수행하는 단계를 보여줍니다.

필드 수준 암호화된 데이터를 쿼리하고 읽기 위한 데이터 흐름을 보여 주는 다이어그램

자동 암호화를 활성화하려면 클라이언트의 MongoClient 인스턴스에서 자동 암호화 설정을 지정하세요.

다음 코드 스니펫은 mongosh 및 MongoDB 드라이버에서 자동 암호화가 활성화된 클라이언트를 만드는 방법을 보여줍니다.

var autoEncryptionOpts =
{
"keyVaultNamespace" : "<database>.<collection>",
"kmsProviders" : { ... },
"schemaMap" : { ... }
}
cluster = Mongo(
"<Your Connection String>",
autoEncryptionOpts
);

환경 변수

가능하면 kmsProviders에 제공된 자격 증명을 환경 변수로 정의한 다음 mongosh--eval 옵션을 사용하여 전달하는 것을 고려하세요. 이렇게 하면 자격 증명이 로그에 유출될 가능성을 최소화할 수 있습니다.

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, {
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 객체에 지정된 컬렉션에 대한 키가 포함되어 있지 않으면 클라이언트는 컬렉션에 대한 서버 측 원격 스키마를 다운로드하고 이를 사용하여 자동 필드 수준 암호화를 수행합니다.

    중요

    동작 고려 사항

    MongoDB는 스키마 유효성 검사를 사용하여 컬렉션의 특정 필드에 암호화를 시행하는 기능을 지원합니다. 클라이언트 사이드 스키마가 없으면 클라이언트는 컬렉션에 대한 서버 사이드 스키마를 다운로드하여 암호화할 필드를 결정합니다. 이 문제를 방지하려면 클라이언트 사이드 스키마 유효성 검사를 사용하세요.

    CSFLE 및 Queryable Encryption 은 스키마 스키마 스키마 되지 않았음을 신뢰한다는 의미입니다. 공격자가 서버 를 손상시키는 경우 이전에 암호화됨 필드 에 더 이상 암호화 레이블이 지정되지 않도록 스키마 를 수정할 수 있습니다. 이렇게 하면 클라이언트 가 해당 필드 에 대한 일반 텍스트 값을 전송합니다.

서버측 CSFLE 적용을 설정하는 방법을 알아보려면 CSFLE 서버 측 스키마 시행을 참조하세요.

돌아가기

Fundamentals