JWT authentication

JWT authentication (JWT 인증)

JSON 웹 토큰(JWT)을 사용해 Trino에 대한 클라이언트 접근을 인증하도록 구성하는 방법이에요. SSO나 프록시 시스템을 직접 만들 때 많이 쓰여요.

출처: 문서

본문

Trino는 JSON 웹 토큰을 사용해 클라이언트 접근을 인증하도록 구성할 수 있어요. JWT는 인증서와 비슷한 암호화 정보를 담는 작고 웹 안전한 JSON 파일로, 다음을 포함해요:

  • Subject(주체)
  • 유효 시간 기간
  • 서명(Signature)

JWT는 다음과 같은 워크플로에서 이전 인증의 증거로 서버 사이에 전달되도록 설계됐어요:

  1. 최종 사용자가 클라이언트 애플리케이션에 로그인하고 서버에 대한 접근을 요청해요.
  2. 서버가 사용자의 자격 증명을 별도의 인증 서비스에 보내는데, 그 서비스는:
    • 사용자를 검증하고
    • 검증 증거로 JWT를 생성하며
    • JWT를 요청한 서버에 반환해요
  3. 같은 JWT는 추가 자격 증명 없이 사용자의 검증을 유지하기 위해 다른 서비스에 전달될 수 있어요.

Important

OAuth2나 OIDC를 구성하려고 한다면 Trino에 전용 시스템이 있어요. OAuth 2.0 authentication에 설명돼 있어요. OAuth2 인증을 사용하면 JWT는 OAuth2 코드가 자동 처리하므로 JWT 인증을 구성할 필요가 없어요.

JWT 인증의 대표적인 용도는 대규모 사이트의 관리자가 사용자와 Trino 코디네이터 사이에 서서 사용자를 대신해 쿼리를 제출하는 자체 SSO나 프록시 시스템을 만들 때예요.

JWT 인증에는 TLS 사용과 구성된 공유 시크릿(shared secret)이 필요해요.

JWT 인증 사용 (Using JWT authentication)

Trino는 Base64 인코딩된 JWT를 지원하지만, 암호화된 JWT는 지원하지 않아요.

JWT 서명을 검증하는 데 필요한 암호화 키를 얻는 두 가지 방법이 있어요:

  • JSON web key set(JWKS) 엔드포인트 서비스에서 키를 로드(일반적인 경우)
  • Trino 코디네이터의 로컬 파일 시스템에서 키를 로드

JWKS 엔드포인트는 JWK 형식의 공개 키 정보를 담는 읽기 전용 서비스예요. 이 공개 키는 JSON 웹 토큰에 서명하는 개인 키의 짝이에요.

JWT 인증 구성 (JWT authentication configuration)

etc/config.properties에서 JWT 인증 타입을 설정하고 키 파일의 URL이나 경로를 지정해 JWT 인증을 활성화하세요:

http-server.authentication.type=JWT
http-server.authentication.jwt.key-file=https://cluster.example.net/.well-known/jwks.json

JWT 인증은 보통 다른 인증 방법과 함께 사용돼요:

http-server.authentication.type=PASSWORD,JWT
http-server.authentication.jwt.key-file=https://cluster.example.net/.well-known/jwks.json

다음 구성 속성을 사용할 수 있어요:

JWT 인증용 구성 속성 (Configuration properties for JWT authentication)

Property Description
http-server.authentication.jwt.key-file 필수. JWKS 서비스의 URL 또는 PEM·HMAC 파일 경로를 지정해요(이 표 아래에 설명).
http-server.authentication.jwt.required-issuer JWT를 유효하다고 간주하려면 JWT의 issuer(iss) 필드 값과 일치해야 하는 문자열을 지정해요. JWT의 iss 필드는 JWT를 발급한 주체를 식별해요.
http-server.authentication.jwt.required-audience JWT를 유효하다고 간주하려면 JWT의 Audience(aud) 필드 값과 일치해야 하는 문자열을 지정해요. JWT의 aud 필드는 JWT가 의도한 수신자를 식별해요.
http-server.authentication.jwt.principal-field JWT의 주체(subject)를 식별하는 필드를 나타내는 문자열. 기본값은 sub. 이 필드는 Trino 주체를 만드는 데 사용돼요.
http-server.authentication.jwt.user-mapping.pattern 이 인증 시스템의 모든 사용자 이름을 Trino 서버가 기대하는 형식으로 매핑하는 정규식 패턴.
http-server.authentication.jwt.user-mapping.file 이 인증 시스템에 대한 사용자 매핑 규칙 집합을 담은 JSON 파일 경로.

http-server.authentication.jwt.key-file 속성으로 다음 중 하나를 지정하세요:

  • https://로 시작하는 JWKS 엔드포인트 서비스의 URL. JWKS 서비스는 코디네이터에서 접근 가능해야 해요. 코디네이터가 보안·방화벽 네트워크에서 실행 중이라면 관리자가 JWKS 서버 호스트에 대한 접근을 열어야 할 수 있어요.

    Caution

    Trino 서버는 http://로 시작하는 JWKS URL도 받아주지만, 이 프로토콜을 사용하면 심각한 보안 위험이 생겨요. 이 프로토콜은 클러스터 개발 중 단기 테스트에만 사용하세요.

  • 단일 키를 담은 PEM 또는 HMAC 형식의 로컬 파일 경로. 파일 경로에 ${KID}가 있으면 Trino는 이 키를 로드하기 전에 JWT 헤더의 kid를 파일 경로에 대체해요. 이렇게 하면 여러 키가 있는 설정을 지원할 수 있어요.

클라이언트와 JWT 사용 (Using JWTs with clients)

Trino CLI를 사용할 때는 JWT authentication 문서에 설명된 대로 JWT를 지정하세요.

Trino JDBC 드라이버를 사용할 때는 accessToken 파라미터로 JWT를 지정하세요.

리소스 (Resources)

JWT와 JWK 작업에 유용한 리소스예요:

더 알아보기 (Learn more)

OAuth2를 사용한다면 OAuth 2.0 authentication 문서를 함께 살펴보세요.