
MongoDBDriverClientEncryption::createDataKey 메소드는 KeyVaultSecret를 지정하여 데이터 키를 생성합니다.
KeyVaultSecret를 직접 생성하는 방법은 MongoDB Atlas의 Key Vault를 사용하는 것입니다.
1. MongoDB Atlas로 로그인합니다.
2. Key Vault 탭으로 이동합니다.
3. 새 Secret를 생성합니다.
4. Secret 이름과 값(예: AES-256-CBC)을 입력합니다.
5. Secret를 생성합니다.
createDataKey 메소드의 두 번째 인자로 사용할 키 크기를 지정하는 방법은 키 크기를 지정하는 옵션을 사용하는 것입니다.
예를 들어, 256비트 키를 생성하고자 할 때는 키 크기를 32로 지정하면 됩니다.
createDataKey 메소드의 반환값은 데이터 키를 생성하고 반환하는 것입니다.
반환값은 KeyVaultSecret의 ID와 데이터 키를 포함하는 DataKey 객체입니다.
#hostingforum.kr
java
// KeyVaultSecret를 직접 생성하는 예제
MongoClientSettings settings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString.builder()
.addHost("mongodb+srv://username:password@cluster-name.mongodb.net/")
.build())
.build();
MongoClient mongoClient = MongoClients.create(settings);
// KeyVaultSecret를 생성하는 코드
MongoCredential credential = MongoCredential.createApiKeyCredential("username", "cluster-name.mongodb.net", "api-key");
MongoClientSettings keyVaultSettings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString.builder()
.addHost("mongodb+srv://username:password@cluster-name.mongodb.net/")
.build())
.credential(credential)
.build();
MongoClient keyVaultClient = MongoClients.create(keyVaultSettings);
MongoCollection keyVaultCollection = keyVaultClient.getDatabase("admin").getCollection("keyvault.keys");
Document secret = new Document("key", "AES-256-CBC")
.append("keyId", "secret-id")
.append("keyAltNames", Arrays.asList("secret-alt-name"));
keyVaultCollection.insertOne(secret);
// createDataKey 메소드의 사용 예제
MongoClientSettings encryptionSettings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString.builder()
.addHost("mongodb+srv://username:password@cluster-name.mongodb.net/")
.build())
.build();
MongoClient mongoClient = MongoClients.create(encryptionSettings);
MongoClientSettings encryptionSettingsWithClientEncryption = MongoClientSettings.builder(encryptionSettings)
.addEncryptionOptions(ClientEncryptionSettings.builder()
.keyVaultClient(mongoClient)
.keyVaultNamespace("admin.keyvault.keys")
.build())
.build();
MongoClient mongoClientWithEncryption = MongoClients.create(encryptionSettingsWithClientEncryption);
ClientEncryption clientEncryption = mongoClientWithEncryption.getDatabase("admin").getCollection("encryption").withCodecRegistry(CodecRegistries.fromProviders(Arrays.asList(new ClientEncryptionCodecProvider()))).getClientEncryption();
DataKey dataKey = clientEncryption.createDataKey("secret-id", 32);
System.out.println(dataKey.getKeyId());
System.out.println(dataKey.getKeyMaterial());
2025-07-19 16:31