Inflearn brand logo image

인프런 커뮤니티 질문&답변

김동선님의 프로필 이미지
김동선

작성한 질문수

카프카 완벽 가이드 - 커넥트(Connect) 편

CDC(Change Data Capture)의 이해

CDC Connect 통시에서의 암호화 관련 하여 문의 드립니다.

작성

·

59

0

안녕하세요.

외부 DB 에 connect 하여 CDC를 통해 데이터를 가져 오는 것을 하고 있습니다. 외부에서 가져오다 보니 데이터를 보호 하고 싶다는 생각이 들었습니다.

챗 GPT 에게 우선 물어 보니

properties 설정에 security.protocol=SSL

connection.url=jdbc:mysql://your.db.host:3306/yourdb?useSSL=true&requireSSL=true&verifyServerCertificate=true

connection.user=db_user

connection.password=db_pass


이런 설정을 하라는 답변이 왔는데,

kafka 설정과, JDBC 암호를 적용 해야 한다고 합니다.
제가 잘 몰라서, 이 답변이 신뢰 할수 있는 건지 알 수가 없습니다.

1.
kafka에서 암호화 하여 통신이 가능한 걸까요?

 

2. 암호하가 적용 된다면

kafka connect 에서 동작 원리에 도 상관없이 적용이 될까요?

 

  1. 외부에 kafka connect로 DB의 데이터를 가져 오는 경우가 실무 에서도 많이 있나요?
    그럴 경우 데이터 암호화는 어떻게 처리 하나요?

답변 2

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

저도 SSL 기반으로 외부 DB와 Connect를 연결해 보지는 않아서 100% 정확한 답변이 되기는 어렵지만.

먼저 암호화를 어떻게 구성하시고 싶으신건지, 시스템 아키텍처는 어떻게 되어 있는지 자세히 기술되어 있지 않아서, DB는 외부 망에 있고, Kafka Connect와 Kafka Broker는 내부에 있는 걸로 가정하겠습니다(Kafka Connect와 Kafka Broker는 같은 시스템내에 있는 것이 좋습니다)

이 경우 SSL을 통한 네트웍 구간 암호화를 외부 DB와 Connect간, 그리고 Connect와 Broker 간 두가지 영역으로 나눌 수 있습니다. 이 중에 외부 DB와 Connect 사이가 필요하신 것 같습니다만, Connect와 Broker사이도 내부망이지만 네트웍 구간 암호화를 적용하실 수 있습니다.

  1. 먼저 DB와 Connect 사이는 JDBC Connector를 사용할 경우와 Debezium Connector를 사용할 경우에 따라서 설정이 달라집니다. JDBC Connector 에서 SSL을 적용하신다면, 위에 적으신대로 jdbc 설정 부분을 변경해 주시면 됩니다.

connection.url=jdbc:mysql://your-db-host:3306/mydb?useSSL=true&requireSSL=true&verifyServerCertificate=true

만약에 verifyServerCertificate=true까지 하신다면 좀 더 복잡한 설정이 필요합니다. 아래 URL 참조하셔서 필요한 설정을 해주시면 됩니다.

https://medium.com/@jayden_95845/jdbc%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-mysql-ssl-%EC%97%B0%EA%B2%B0-1c5da86cc2c5

아마 아래와 같은 파라미터 설정이 추가로 필요하고, 이를 위한 MySQL 설정 작업도 필요합니다.

trustCertificateKeyStoreUrl=file:/etc/kafka/secrets/mysql-truststore.jks

trustCertificateKeyStorePassword=your-password

Debezium을 사용하신다면 아래와 같은 설정이 필요합니다. https://debezium.io/documentation/reference/stable/connectors/mysql.html 에서 해당 파라미터에 대한 내용들을 확인해 보시길 바랍니다.

"database.ssl.mode": "verify_ca",

"database.ssl.truststore": "/path/to/truststore.jks",

"database.ssl.truststore.password": "truststore-pass"

 

  1. Connect와 Kafka Broker 사이에는 내부망이라 암호화가 필요 없어 보이지만, 필요하다면 아래와 같은 설정을 connect-distributed.properties에 해줘야 합니다.

security.protocol=SSL

ssl.truststore.location=/etc/kafka/secrets/kafka-truststore.jks

ssl.truststore.password=your-password

ssl.keystore.location=/etc/kafka/secrets/kafka-keystore.jks

ssl.keystore.password=your-password

ssl.key.password=your-password

 

그리고 아래는 요청하신 답변입니다.

1.
kafka에서 암호화 하여 통신이 가능한 걸까요?

 => 네, SSL 기반으로 네트웍 구간 암호화가 가능합니다.

2. 암호하가 적용 된다면

kafka connect 에서 동작 원리에 도 상관없이 적용이 될까요?

=> 네, 상관없이 적용됩니다.

  1. 외부에 kafka connect로 DB의 데이터를 가져 오는 경우가 실무 에서도 많이 있나요?
    그럴 경우 데이터 암호화는 어떻게 처리 하나요?

=> DB 자체가 내부망이 아니라 Public 망에 있는 경우는 드뭅니다. 제가 Connect를 사용하는 많은 사이트를 조사해본건 아니지만, 내부망이 아니라 외부망/Public 망에 있는 DB를 연결하는 경우는 많지 않을 것 같습니다. 원하시는 데이터 암호화가 어떤 유형인지 잘 모르지만, 앞에서 말씀드린 SSL 기반으로 JDBC 연결 구간 암호화가 일반적으로 사용됩니다.

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 김동선님.

외부 데이터베이스와의 연결에서 데이터 보호는 매우 중요한 요소입니다. Kafka Connect를 사용하여 CDC(Change Data Capture)를 구현할 때의 데이터 암호화 및 보안 설정에 대해 설명드리겠습니다.

1. Kafka에서 암호화 하여 통신이 가능한 것인가요?

네, 가능합니다. Kafka는 기본적으로 SSL/TLS를 통한 암호화된 통신을 지원합니다. 이를 통해 각 구성 요소 간의 데이터 전송에서 발생할 수 있는 보안 문제를 해결할 수 있습니다.

Kafka에서의 암호화는 일반적으로 다음 두 가지를 포함합니다:
- 브로커와 클라이언트 간의 암호화: Kafka 브로커와 프로듀서, 컨슈머, 커넥트와 같은 클라이언트 간의 통신을 암호화합니다.
- 브로커 간의 암호화: 여러 Kafka 브로커들 간의 데이터를 전송할 때도 암호화를 적용할 수 있습니다.

이 설정은 server.properties 등의 Kafka 설정 파일에서 security.protocol=SSL과 같은 옵션으로 지정할 수 있습니다.

2. 암호화가 적용된다면 Kafka Connect의 동작 원리에 상관없이 적용될까요?

Kafka Connect에서 외부 데이터베이스와의 연결에서 SSL/TLS를 사용하여 통신을 암호화할 수 있습니다. 이 설정은 Connect 구성에서 connection.url의 JDBC URL에 useSSL=true와 같은 파라미터를 추가하여 이루어집니다.

즉, 기본적으로 제공되는 JDBC 드라이버가 SSL/TLS 암호화 통신을 지원하여야 하며, 이는 Connect에 대한 설정과는 별개입니다. 따라서 DB 드라이버와의 호환성 여부를 확인해야 합니다.

3. 외부에 Kafka Connect로 DB의 데이터를 가져오는 경우가 실무에서도 많이 있나요?

예, 이는 일반적인 실무 사용 사례입니다. 외부 데이터베이스에서 실시간 데이터 변화를 반영하여 스트리밍 분석, 모니터링, 통합 애플리케이션 개발 등 여러 사용 사례에 적용됩니다.

데이터 암호화는 네트워크 계층에서 SSL/TLS를 통해 처리하며, 응용 프로그램 계층에서는 데이터 자체를 암호화할 수도 있습니다. 예를 들어, 민감한 데이터를 전송하기 전에 별도로 암호화한다면 데이터베이스에서 데이터가 암호화된 상태로 저장됩니다.

추가적으로 도움이 될 만한 유사한 질문과 답변들이 있습니다:

이 정보를 통해 데이터 암호화에 대한 전반적인 이해와 Kafka Connect에서의 적용에 대해 도움이 되셨길 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김동선님의 프로필 이미지
김동선

작성한 질문수

질문하기