1장. Apache Kafka 프록시용 스트림 개요
Apache Kafka 프록시용 스트림은 Kafka 기반 시스템을 개선하도록 설계된 Apache Kafka 프로토콜 인식 프록시입니다. 필터 메커니즘을 통해 애플리케이션 또는 Kafka 클러스터 자체를 변경할 필요 없이 Kafka 기반 시스템에 추가 동작을 도입할 수 있습니다.
중개자인 Apache Kafka Proxy용 Streams는 Kafka 클러스터와 해당 클라이언트 간의 통신을 중계합니다. 메시지를 수신, 필터링 및 전달할 책임이 있습니다.
1.1. 레코드 암호화 필터 링크 복사링크가 클립보드에 복사되었습니다!
Apache Kafka 프록시의 레코드 암호화 필터용 스트림은 Kafka 메시지의 보안을 강화합니다. 이 필터는 업계 표준 암호화 기술을 사용하여 Kafka 메시지에 암호화를 적용하여 Kafka 클러스터에 저장된 데이터의 기밀성을 보장합니다. Apache Kafka Proxy의 스트림은 주제 수준 암호화를 중앙 집중화하여 Kafka 클러스터 전체에서 암호화를 간소화합니다.
필터는 대칭 암호화 키를 사용하여 레코드를 암호화합니다.
- 암호화
- 정보 암호화는 대량의 데이터를 효율적으로 암호화하는 데 적합한 업계 표준 기술입니다. 데이터는 데이터 암호화 키(DEK)로 암호화됩니다. DEK는 KEK(Key Encryption Key)를 사용하여 암호화됩니다. KEK는 키 관리 시스템(KMS)에 안전하게 저장됩니다.
- 대칭 암호화 키
- AES(GCM) 256비트 암호화 대칭 암호화 키는 레코드 데이터를 암호화하고 해독하는 데 사용됩니다.
프로세스는 다음과 같습니다.
- 필터 인터셉터는 애플리케이션을 생성하지 못하도록 요청을 생성하고 레코드를 암호화합니다.
- 생성 요청이 브로커로 전달됩니다.
- 필터는 애플리케이션 사용에서 응답을 가져오고 레코드를 해독합니다.
- 가져오기 응답은 consuming 애플리케이션으로 전달됩니다.
필터는 레코드 값만 암호화합니다. 레코드 키, 헤더 및 타임스탬프는 암호화되지 않습니다.
전체 프로세스는 Kafka 클라이언트 및 Kafka 브로커의 관점에서 투명합니다. 레코드가 암호화되고 있거나 암호화 키에 대한 액세스 권한이 있거나 레코드를 보호하기 위해 암호화 프로세스에 영향을 미치지도 않습니다.
이 필터는 주요 자료의 안전한 저장에 대한 궁극적인 책임이 있는 KMS(Key Management Service)와 통합됩니다. 현재 이 필터는 지원되는 KMS 통합이 계획되어 있지만 HashiCorp Vault와 KMS와 통합됩니다.
1.1.1. 필터에서 레코드를 암호화하는 방법 링크 복사링크가 클립보드에 복사되었습니다!
이 필터는 다음과 같이 요청 생성의 레코드를 암호화합니다.
- 필터는 적용할 KEK를 선택합니다.
- KEK에 대한 DEK를 생성하도록 KMS를 요청합니다.
- 암호화된 DEK(KEK로 암호화됨)를 사용하여 레코드를 암호화합니다.
- 원래 레코드를 암호화 레코드(암호화된 레코드, 암호화된 DEK 및 메타데이터)로 교체합니다.
필터는 DEK 재사용 전략을 사용합니다. 암호화된 레코드는 시간 초과 또는 암호화 제한에 도달할 때까지 동일한 DEK를 사용하여 동일한 주제로 전송됩니다.
1.1.2. 필터에서 레코드의 암호를 해독하는 방법 링크 복사링크가 클립보드에 복사되었습니다!
필터는 다음과 같이 가져오기 응답에서 레코드를 해독합니다.
- 필터는 Kafka 브로커에서 암호화 레코드를 수신합니다.
- 암호화 레코드를 생성한 프로세스를 역전합니다.
- KMS를 사용하여 DEK의 암호를 해독합니다.
- 암호 해독된 DEK를 사용하여 암호화된 레코드의 암호를 해독합니다.
- 암호 레코드를 암호 해독된 레코드로 바꿉니다.
이 필터는 암호 해독된 레코드에 LRU(최근 사용) 전략을 사용합니다. 암호 해독된 DEK는 KMS와의 상호 작용을 줄이기 위해 메모리에 유지됩니다.
1.1.3. 필터에서 KMS 사용 방법 링크 복사링크가 클립보드에 복사되었습니다!
필터를 지원하기 위해 KMS는 다음을 제공합니다.
- KEK(Key Encryption Keys)를 저장하기 위한 보안 리포지토리
- 데이터 암호화 키(DEK)를 생성하고 암호 해독하는 서비스
KEK는 KMS 내에 남아 있습니다. KMS는 지정된 KEK에 대해 DEK(보안 생성된 임의의 데이터)를 생성한 다음 DEK 및 암호화된 DEK를 반환합니다. 암호화된 DEK에는 동일한 데이터가 있지만 KEK로 암호화됩니다. KMS는 DEK를 저장하지 않으며 브로커에 암호화 레코드의 일부로 저장됩니다.
KMS는 런타임 중에 사용할 수 있어야 합니다. KMS를 사용할 수 없는 경우 KMS 서비스가 복원될 때까지 필터를 통한 프로덕션 및 소비가 불가능합니다. HA(고가용성) 구성에서 KMS를 사용하는 것이 좋습니다.
1.1.4. 기록의 어떤 부분이 암호화됩니까? 링크 복사링크가 클립보드에 복사되었습니다!
레코드 암호화 필터는 레코드의 값만 암호화하여 레코드 키, 헤더 및 타임스탬프를 그대로 둡니다. 압축된 주제로 삭제를 나타낼 수 있는 null 레코드 값은 암호화되지 않은 브로커로 전송됩니다. 이 방법을 사용하면 압축된 주제가 올바르게 작동합니다.
1.1.5. 암호화되지 않은 주제 링크 복사링크가 클립보드에 복사되었습니다!
일부 주제는 암호화되고 기타 항목이 암호화되지 않도록 시스템을 구성할 수 있습니다. 이는 기밀 정보가 포함된 주제를 암호화하고 민감하지 않은 Kafka 주제를 암호화되지 않은 상태로 둘 수 있는 시나리오를 지원합니다.