Pulsar 보안 개요

Pulsar 보안 개요 (Security overview)

note Apache Pulsar의 보안 권고 및 보안 정책(Security advisories and Security policy)은 별도 페이지에 있어요.

기업의 중앙 메시지 버스로서 Apache Pulsar는 미션 크리티컬 데이터를 저장하는 데 자주 사용돼요. 그래서 Pulsar에서 보안 기능을 활성화하는 것은 매우 중요해요. 이 장에서는 Pulsar가 데이터를 보호하기 위해 사용하는 주요 보안 통제(security controls)를 설명해요. 오늘은 Pulsar 보안의 핵심 축인 암호화, 인증, 권한 부여를 하나씩 살펴볼게요.

출처: 문서

본문

Pulsar 보안은 다음 핵심 축(pillar)에 기반해요.

기본적으로 Pulsar는 암호화, 인증, 권한 부여를 구성하지 않아요. 어떤 클라이언트든 평문 텍스트 서비스 URL로 Pulsar와 통신할 수 있어요. 따라서 이런 평문 서비스 URL로 접근하는 것이 신뢰할 수 있는 클라이언트로만 제한되도록 해야 해요. 이런 경우 네트워크 분할(segmentation)과/또는 권한 부여 ACL로 신뢰할 수 있는 IP로 접근을 제한할 수 있어요. 둘 다 사용하지 않으면 클러스터는 완전히 열린 상태가 되어 누구나 클러스터에 접근할 수 있어요.

Apache Pulsar는 인증 제공자(Authentication Provider)인증 제공자 체인(Authentication Provider Chain)으로 클라이언트의 신원을 확인하고, 그 클라이언트에 역할 토큰(role token)(admin이나 app1 같은 문자열)을 할당해요. 이 역할 토큰은 단일 클라이언트나 여러 클라이언트를 나타낼 수 있으며 권한 부여(Authorization)에 사용되어 클라이언트가 무엇을 할 수 있는지 결정해요. 역할을 사용해 특정 토픽에서 클라이언트의 생성·소비 권한, 테넌트 구성 관리 권한 등을 제어할 수 있어요.

암호화 (Encryption)

암호화는 공격자가 데이터에 접근해도 암호화 키에 접근하지 않는 한 데이터를 읽을 수 없도록 보장해요. 암호화는 전송 중(in-transit) 데이터를 보호하는 중요한 메커니즘을 제공해, 암호화 알고리즘과 키 관리에 대한 보안 요구 사항을 충족시켜요.

다음 단계

인증 (Authentication)

인증은 클라이언트의 신원을 검증하는 과정이에요. Pulsar에서 인증 제공자는 클라이언트를 올바르게 식별하고 역할 토큰과 연결하는 역할을 해요. 참고로 인증만 활성화한 경우, 인증된 역할 토큰은 클러스터의 모든 리소스에 접근할 수 있어요.

Pulsar에서 인증이 동작하는 방식 (How authentication works in Pulsar)

Pulsar는 플러그형 인증 프레임워크를 제공하고, Pulsar 브로커/프록시가 이 메커니즘으로 클라이언트를 인증해요.

각 클라이언트가 인증 데이터를 브로커에 전달하는 방식은 사용하는 프로토콜에 따라 달라져요. 브로커는 연결이 설정될 때 인증 자격 증명을 검증하고 인증 데이터가 만료됐는지 확인해요.

  • 클러스터 관리를 위해 HTTP/HTTPS 프로토콜을 사용할 때, 각 클라이언트는 HTTP/HTTPS 요청 헤더에 기반해 인증 데이터를 전달하고 브로커는 요청 시점에 데이터를 검사해요.

  • Pulsar 프로토콜로 생성·소비를 할 때, 각 클라이언트는 브로커에 연결할 때 CommandConnect 명령을 보내 인증 데이터를 전달해요. 브로커는 데이터를 캐시하고 주기적으로 데이터가 만료됐는지, 클라이언트가 인증 갱신을 지원하는지 확인해요. 기본적으로 authenticationRefreshCheckSeconds는 60초로 설정돼요.

    • 클라이언트가 인증 갱신을 지원하고 자격 증명이 만료되면, 브로커는 CommandAuthChallenge 명령을 보내 클라이언트와 인증 데이터를 교환해요. 다음 검사에서 이전 인증 교환이 반환되지 않았음을 발견하면 브로커는 클라이언트 연결을 끊어요.
    • 클라이언트가 인증 갱신을 지원하지 않고 자격 증명이 만료되면, 브로커는 클라이언트 연결을 끊어요.

프록시에서의 인증 데이터 제한 (Authentication data limitations on the proxies)

클라이언트와 브로커 사이에 프록시를 사용하면 두 가지 인증 데이터가 있어요.

  • 브로커가 기본적으로 인증하는 프록시의 인증 데이터 - **자체 인증(self-authentication)**이라고 해요.
  • 프록시가 인증을 위해 브로커로 전달하는 클라이언트의 인증 데이터 - **원본 인증(original authentication)**이라고 해요.

중요: 인증 데이터에 만료 시간이 포함되거나, 권한 부여 제공자가 인증 데이터에 의존한다면 다음을 해야 해요.

  1. 브로커가 이 인증 데이터의 갱신을 지원하지 않으므로 프록시 인증 데이터에 만료 시간이 없도록 해요.
  2. conf/proxy.conf 파일에서 forwardAuthorizationCredentialstrue로 설정해요.
  3. conf/broker.conf 파일에서 authenticateOriginalAuthDatatrue로 설정해요. 이렇게 하면 브로커가 클라이언트 인증을 다시 검사해요.

다음 단계

note 2.11.0부터 위 인증 제공자 중 하나와 함께 TLS encryption을 구성할 수 있어요.

권한 부여 (Authorization)

권한 부여(Authorization)는 클라이언트에게 권한을 부여하고 클라이언트가 무엇을 할 수 있는지 결정하는 과정이에요.

가장 많은 권한을 가진 역할 토큰은 수퍼유저(superuser)예요. 수퍼유저는 테넌트를 생성·삭제하고 모든 테넌트 리소스에 완전히 접근할 수 있어요. 수퍼유저가 테넌트를 만들면 그 테넌트에 admin 역할 토큰이 할당돼요. admin 역할 토큰을 가진 클라이언트는 네임스페이스를 생성·수정·삭제하고, 그 네임스페이스에 대해 다른 역할 토큰에 권한을 부여·회수할 수 있어요.

더 알아보기 (Learn more)