hlab-books / kafka-the-definitive-guide

Kafka: The Definitive Guide ( 2nd Edition )
0 stars 4 forks source link

Chapter 11. 보안 #12

Open hubtwork opened 1 week ago

hubtwork commented 1 week ago

Chapter Ownership : @KangHun-Lee

KangHun-Lee commented 3 days ago

보안

안전한 카프카 클러스터 특징

  1. 클라이언트 진정성 (client authenticity)
  2. 서버 진정성 (server authenticity)
  3. 기밀성 (data privacy)
  4. 무결성 (data integrity)
  5. 접근 제어 (access control)
  6. 감사 가능성 (auditability)
  7. 가용성 (availability)

보안 프로토콜

전송계층 : PLAINTEXT, SSL

인증계층 : SSL, SASL

  1. PLAINTEXT
    • 인증이 존재하지 않음
    • 사설 네트워크 안에서 인증이나 암호화 없이 민감하지 않은 데이터를 처리 할 때 적합
  2. SSL
    • 선택적으로 클라이언트 SSL 인증을 수행할 수 있음
    • 암호화뿐만 아니라 클라이언트/서버 인증도 지원
  3. SASL_PLAINTEXT
    • 서버 인증 지원
    • 암호화는 지원하지 않음. 사설 네트워크 안에서만 적합
  4. SASL_SSL
    • 암호화 지원
    • 클라이언트/서버 인증 지원
    • 안전하지 않은 네트워크에서 적절

SSL, SASL 어떤 것이 더 좋냐?

둘의 목표가 다름

SSL 은 종단 간 교환 되는 메시지를 안전하게 보호하는 것이 목표

SASL 은 종단 간 사용할 인증 방식을 서로 합의할 수 있도록 해주는 프레임워크 (구체적인 인증작업은 GSSAPI, OAUTHBEARER 등 인증 프로토콜 구현)

Inter.broker.listener.name, security.inter.broker.protocol 설정을 사용하여 브로커간 통신시 사용되는 리스너 선택 가능

(자세한 설정은 p.300 참조)

인증

인증 키 생성 및 카프카 설정

p.301 ~ p.306 서버에서 키 생성하고 카프카 설정하는 것은 DevOps 형님들 몫이니 참고용

서버 쪽 키 저장소는 동적으로 갱신해 줄 수 있지만 kafka-configs.sh 사용(카프카 설치시 bin 디렉토리 내에 존재)

클라이언트는 재시작하는 것 외엔 방법이 없음

보안을 강화하기 위해 인증서의 유효기간 등을 동적으로 업데이트하는 기법을 사용한다면 이야기가 달라짐

리밸런싱이 발생함으로 작업이 지연 될 수도 있음

SASL

  1. GSSAPI
    • 케로베로스 인증 지원

TLS 가 사용되지 않는 경우 사전 공격, 무작위 암호 대입 공격을 위한 충분한 정보 획득 가능

파일 시스템 권한을 적절히 설정함으로써, 키탭 파일에 대한 접근 역시 제한해야함

누출이 발생했을 때 누구 소행인지 특정하기 어려움

  1. PLAIN

    • 사용자 이름/비밀번호 인증

    • 외부 비밀번호 저장소를 사용해서 비밀번호를 검증한느 서버측 커스텀 콜백과 함께 사용됨

안전한 전송 계층을 보장하기 위해 PLAIN 메커니즘 활성화시 SASL_SSL 암호화 설정 역시 켜줘야함

  1. SCRAM-SHA-256 and SCRAM-SHA-512

    • 사용자 이름/비밀번호 인증

    • 카프카를 설치하자마자 바로 사용 가능

반드시 SASL_SSL 보안 프로토콜과 함께 사용되야함

주키퍼 역시 SSL 기능을 켜야함

  1. OAUTHBEARER

    • OAuth bearer 토큰을 사용한 인증

    • OAuth 서버에서 부여된 토큰을 추출하고 검증하는 커스텀 콜백과 함께 사용

재인증

무중단 보안 업데이트

보안 프로토콜 업데이트 절차

SCRAM-SHA-256 사용 절차

암호화

  1. 암호화 목적: 데이터의 기밀성과 무결성을 보장하기 위해 SSL, SASL_SSL을 사용하여 전송 계층의 보호 및 저장된 데이터를 안전하게 유지
  2. FIPS 준수: 데이터 암호화가 필요한 규제를 준수하기 위해 추가적인 보안 조치를 적용할 수 있음
  3. 디스크 암호화: 로그에 저장된 데이터를 암호화하여 물리적으로 접근할 수 없는 환경을 구축

종단 암호화 (End-to-End Encryption)

인가

AclAuthorizer 설정

인가 기능 커스터마이즈

감사

주키퍼 보안

플랫폼 보안

CHOICORE commented 3 days ago

카프카 책이지만 보안에 대한 고려 사항들이 나와서 오늘도 키워드 많이 줍줍했다. 실제 세팅할 때 다시 한번 봐야지

zinokim commented 3 days ago

소감

카프카 보안이지만, 결국 소프트웨어 보안 관점에서 바라봐도 괜찮은 내용이었다. 인증, 인가, 보안 범위 등 시스템 위험을 최소화 하기 위해 엔지니어가 어떤 것들을 고려해야 하는지 잘 설명해주고 있다고 생각했다.

결국 안전한 카프카 클러스터 특징 7가지를 얼마나 적절하게 설정할 수 있는지가 중요한 것 같다.

이 챕터를 읽기 전에는 카프카 보안을 구체적으로 생각해본적이 없는데, 어쩌면 당연하게 기본인 것들을 놓치고 있는지 다시 한 번 되돌아봐야겠다. (나란 바보샛기...)

iamzin commented 3 days ago

'안전한 카프카 클러스터' 특징이 완벽히 지켜질 수 있을지 궁금하다. 곧 직접 카프카를 이용한 새 프로젝트를 할텐데, 이번 챕터의 보안과 더불어 얼만큼 적절한 구조를 가져갈 수 있을지 궁금하다.

hubtwork commented 3 days ago

소감

현재 SASL_SSL + MSK 조합으로 사용 중이다. 최근에 SRE 측에서 변경해주었는데, 기존에 Confluent + PLAINTEXT 로 설정해서 사용하던 걸 보고 경악을 금치 못했던 기억이 있다. ( 네트워크 접근을 어차피 막으니까 상관없다고 생각한건가; ) 물론 SSL 인증 방식에서 zero-copy-transport 가 현재 지원되지 않으므로, CPU 오버헤드는 항상 존재할 수 있으나 이로 인해 얻는 보안적 이점 ( 클라이언트 - 서버 간 양방향 암호화 검증 ) 을 무마시킬 정도의 단점으로 절대 보이지 않는다. ( HTTPS 왜 쓰는데 그럼? ㅋ) 다만, 클라이언트 측면에서 STORE 기반의 인증서 관리가 매우 비효율적 일 수 있으므로 SASL 에게 온전히 책임을 전가시키는 방식이 존재하므로, 크게 고려하지 않아도 되는 사항이라고 생각된다.

재인증방식을 매번 연결시마다 인증해야하는 방식으로 바뀌는 것까지 갓-벽

역시나 보안 관련 기본 지식 외에 설정 관련해서는 "아하 그렇구나~" 하고 넘김 ㅋ

근데 우리 물리디스크랑 e2e 암호화는 안쓰고 있는 거로 알고있는데... 괜찮겠지ㅜ ㅋㅋ

kimsunhak commented 3 days ago

소감

과연 카프카 보안에만 신경을 써야 할까라는 생각이 들기도 했고.. 진짜 보안은 예전이나 지금이나 항상 재미가 없는 파트인거 같다는 생각이 들었다.. SASL은 보안할때 항상 언급이 되었던 내용이라 슥~~ 훑어봤습니다 :)

결론 : 사실 카프카에서도 보안을 언급하는거 보면, 우리가 만지는 소프트웨어도 보안에 대한 점검을 한번더 바라봐야할거 같다.