'2024/04/17'에 해당되는 글 1건

  1. 2024.04.17 mongoDB 필드 암호화

 

mongoDB의 CSFLE라고 불리는 필드암호화는 mongoDB 4.2이상에서 지원된다.

(단, mongoDB enterprise에서만 지원된다)

 

스텝별로 살펴보면 다음과 같다.

 

1. KMS 서비스를 통해 key 생성. (아래는 AWS KMS이용 예제이지만,  azure의 keyVault나 Google Cloud KMS도 가능)

 

AWS Management Console에 로그인하여 KMS 서비스로 이동합니다.
새로운 키 생성을 선택하고, 키 유형으로 "대칭"을 선택합니다.
키에 이름을 부여하고, 필요한 권한을 설정합니다.
IAM 정책 설정:

키 사용 권한을 가진 IAM 사용자 또는 역할을 생성합니다.
생성된 KMS 키에 대한 액세스 권한을 해당 IAM 사용자 또는 역할에 부여합니다.

 

2. MongoDB 설정에 ClientEncryptions  설정.

@Bean
public MongoClient mongoClient() {
    Map<String, Object> awsKmsProvider = Map.of(
        "accessKeyId", "<AWS_ACCESS_KEY_ID>",
        "secretAccessKey", "<AWS_SECRET_ACCESS_KEY>"
    );

    Map<String, Map<String, Object>> kmsProviders = Map.of("aws", awsKmsProvider);

    AutoEncryptionSettings autoEncryptionSettings = AutoEncryptionSettings.builder()
            .keyVaultNamespace("admin.dataKeys")
            .kmsProviders(kmsProviders)
            .build();

    MongoClientSettings settings = MongoClientSettings.builder()
            .applyConnectionString(new ConnectionString(uri))
            .autoEncryptionSettings(autoEncryptionSettings)
            .build();
    return MongoClients.create(settings);
}

@Bean
public MongoTemplate mongoTemplate() throws Exception {
    return new MongoTemplate(mongoClient(), dbName);
}

 

3. entity class의 필드에 @Encrypted 적용 

 

@Document
public class User {
    @Encrypted
    private String sensitiveData;
    
    private String generalData;
}
Posted by yongary
,