Pulsar 인증·권한 부여 확장하기

Pulsar 인증·권한 부여 확장하기 (Extend Authentication and Authorization)

Pulsar는 커스텀 인증 및 권한 부여 메커니즘을 사용할 수 있는 방법을 제공해요. 기본 제공 플러그인 외에 자신만의 인증 방식을 붙이고 싶을 때 필요한 내용을 다뤄볼게요.

출처: 문서

본문

인증 (Authentication)

두 개의 플러그인 형태로 구현을 제공하면 커스텀 인증 메커니즘을 사용할 수 있어요.

  • 클라이언트 인증 플러그인 org.apache.pulsar.client.api.AuthenticationDataProvider는 브로커/프록시에 인증 데이터를 제공해요.
  • 브로커/프록시 인증 플러그인 org.apache.pulsar.broker.authentication.AuthenticationProvider는 클라이언트의 인증 데이터를 인증해요.

클라이언트 인증 플러그인 (Client authentication plugin)

클라이언트 라이브러리에서는 org.apache.pulsar.client.api.Authentication을 구현해야 해요. 아래 명령을 입력하면 Pulsar 클라이언트를 만들 때 이 클래스를 전달할 수 있어요.

PulsarClient client = PulsarClient.builder()
    .serviceUrl("pulsar://localhost:6650")
    .authentication(new MyAuthentication())
    .build();

클라이언트 측에서 두 인터페이스를 구현할 수 있어요.

이를 위해서는 org.apache.pulsar.client.api.AuthenticationDataProvider 형태로 클라이언트 자격 증명을 제공해야 하고, 연결 유형에 따라 다른 종류의 인증 토큰을 반환하거나 TLS에 사용할 인증서 체인을 전달할 기회도 남겨둬요.

다양한 클라이언트 인증 플러그인의 예시를 찾을 수 있어요.

브로커/프록시 인증 플러그인 (Broker/Proxy authentication plugin)

브로커/프록시 측에서는 클라이언트가 보내는 자격 증명을 검증하도록 해당 플러그인을 구성해야 해요. 프록시와 브로커는 동시에 여러 인증 제공자를 지원할 수 있어요.

conf/broker.conf에서 유효한 제공자 목록을 지정할 수 있어요.

# Authentication provider name list, which is comma separated list of class names
authenticationProviders=

tip Pulsar는 동일한 인증 메서드 이름을 가진 여러 인증 제공자를 포함하는 인증 제공자 체인을 지원해요. 예를 들어 Pulsar 클러스터가 JWT 인증(인증 메서드 이름 token)을 사용하다가, 같은 인증 이름으로 OAuth2.0 인증으로 업그레이드하고 싶다고 가정해요. 이 경우 자신만의 인증 제공자 AuthenticationProviderOAuth2를 구현하고 authenticationProviders를 다음과 같이 구성하면 돼요.

authenticationProviders=org.apache.pulsar.broker.authentication.AuthenticationProviderToken,org.apache.pulsar.broker.authentication.AuthenticationProviderOAuth2

그 결과, 브로커는 token 인증 메서드(JWT 및 OAuth2.0 인증)를 사용하려는 요청을 받으면 그 인증 메서드를 가진 인증 제공자를 조회해요. 클라이언트가 JWT 인증으로 인증되지 않으면 OAuth2.0 인증이 사용돼요.

org.apache.pulsar.broker.authentication.AuthenticationProvider 인터페이스의 구현은 코드를 참고해요.

다양한 브로커 인증 플러그인의 예시를 찾을 수 있어요.

권한 부여 (Authorization)

권한 부여는 특정 "역할(role)" 또는 "주체(principal)"가 특정 작업을 수행할 권한이 있는지 확인하는 작업이에요.

기본적으로 Pulsar가 제공하는 내장 권한 부여 제공자를 사용할 수 있어요. 플러그인을 통해 다른 권한 부여 제공자를 구성할 수도 있어요. 참고로 Authentication 플러그인은 프록시와 브로커 모두에서 사용하도록 설계됐지만, Authorization 플러그인은 브로커에서만 사용하도록 설계됐어요.

브로커 권한 부여 플러그인 (Broker authorization plugin)

커스텀 권한 부여 제공자를 제공하려면 org.apache.pulsar.broker.authorization.AuthorizationProvider 인터페이스를 구현하고, 이 클래스를 Pulsar 브로커 클래스패스에 넣은 뒤 conf/broker.conf에서 클래스를 구성해야 해요.

# Authorization provider fully qualified class-name
authorizationProvider=org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider

org.apache.pulsar.broker.authorization.AuthorizationProvider 인터페이스의 구현은 코드를 참고해요.

더 알아보기 (Learn more)