User mapping

User mapping (사용자 매핑)

인증 방법의 사용자를 Trino 사용자로 매핑하는 규칙을 정의하는 방법이에요. Kerberos나 인증서 인증처럼 사용자 이름이 복잡한 경우 특히 중요해요.

출처: 문서

본문

사용자 매핑은 인증 방법의 사용자를 Trino 사용자로 매핑하는 규칙을 정의해요. 이 매핑은 alice@example이나 CN=Alice Smith,OU=Finance,O=Acme,C=US처럼 사용자 이름이 복잡한 Kerberos나 인증서 인증에서 특히 중요해요.

주어진 인증 제공자의 사용자 이름 형식을 Trino 사용자의 단순한 사용자 이름 형식으로 매핑하는 두 가지 방법이 있어요:

  • 단일 정규식(regex) 패턴 매핑 규칙 사용
  • JSON 형식의 regex 매핑 규칙 파일 사용

패턴 매핑 규칙 (Pattern mapping rule)

인증 방법의 모든 사용자 이름을 단일 정규식으로 매핑할 수 있다면 패턴 매핑 규칙을 사용하는 걸 고려해 보세요.

예를 들어 인증 방법이 모든 사용자 이름을 예외 없이 [email protected] 형태로 사용한다고 해보아요. 이 경우 들어오는 사용자 이름을 최소 두 개의 regex 캡처 그룹으로 나누는 정규식을 선택하세요. 첫 번째 캡처 그룹이 @ 기호 앞의 이름만 포함하도록요. 이 경우 단순한 정규식 (.*)(@.*)을 사용할 수 있어요.

Trino는 자동으로 첫 번째 캡처 그룹($1 그룹)을 regex 치환 후 내보낼 사용자 이름으로 사용해요. 정규식이 들어오는 사용자 이름과 일치하지 않으면 인증이 거부돼요.

코디네이터의 config.properties 파일에서 적절한 속성에 regex 패턴을 지정하세요. 아래 표의 *user-mapping.pattern 속성 중 구성된 인증 제공자의 인증 타입과 일치하는 것을 사용해요. 예를 들어 LDAP 인증 제공자의 경우:

http-server.authentication.password.user-mapping.pattern=(.*)(@.*)

인증 타입(authentication type)은 PASSWORD, OAUTH2, KERBEROS 같은 카테고리를 나타낸다는 점을 기억하세요. 둘 이상의 인증 방법이 같은 인증 타입을 가질 수 있어요. 예를 들어 Password file, LDAP, Salesforce 인증 방법은 모두 PASSWORD 인증 타입을 공유해요.

여러 인증 방법이 활성화되면 서로 다른 인증 타입에 대해 서로 다른 사용자 매핑 패턴을 지정할 수 있어요:

Authentication type Property
Password (file, LDAP, Salesforce) http-server.authentication.password.user-mapping.pattern
OAuth2 http-server.authentication.oauth2.user-mapping.pattern
Certificate http-server.authentication.certificate.user-mapping.pattern
Header http-server.authentication.header.user-mapping.pattern
JSON Web Token http-server.authentication.jwt.user-mapping.pattern
Kerberos http-server.authentication.krb5.user-mapping.pattern
Insecure http-server.authentication.insecure.user-mapping.pattern

파일 매핑 규칙 (File mapping rules)

인증 제공자가 사용자 이름을 단일 규칙으로 줄일 수 없는 방식으로 표현하거나, 특정 사용자 집합을 클러스터 접근에서 제외하고 싶다면 파일 매핑 규칙 방법을 사용하세요.

규칙은 구성 속성에서 식별되는 JSON 파일에서 로드돼요. 매핑은 위에서 아래로 처리되며 첫 번째로 일치하는 규칙을 기준으로 해요. 일치하는 규칙이 없으면 인증이 거부돼요. 각 규칙은 다음 필드로 구성돼요:

  • pattern (필수): 인증 방법의 사용자 이름과 대조할 정규식.
  • user (선택): pattern에 대체할 치환 문자열. 기본값은 $1.
  • allow (선택): 현재 일치에 대해 인증을 허용할지 여부를 나타내는 불리언.
  • case (선택): 다음 중 하나.
    • keep - 일치한 사용자 이름을 그대로 유지(기본 동작)
    • lower - 일치한 사용자 이름을 소문자로 변환. 따라서 AdminADMIN 모두 admin이 됨
    • upper - 일치한 사용자 이름을 대문자로 변환. 따라서 adminAdmin 모두 ADMIN이 됨

다음 예시는 [email protected] 형태의 모든 사용자 이름을 alice로 매핑하되, test 사용자는 예외로 인증이 거부되도록 해요. 또한 [email protected] 형태의 사용자를 bob_uk으로 매핑해요:

{
    "rules": [
        {
            "pattern": "test@example\\.com",
            "allow": false
        },
        {
            "pattern": "(.+)@example\\.com"
        },
        {
            "pattern": "(?<user>.+)@(?<region>.+)\\.example\\.com",
            "user": "${user}_${region}"
        },
        {
            "pattern": "(.*)@uppercase.com",
            "case": "upper"
        }
    ]
}

위 예시를 PASSWORD 인증 타입의 LDAP 인증 방법으로 사용하려면 코디네이터의 config.properties 파일에 다음 줄을 추가하세요:

http-server.authentication.password.user-mapping.file=etc/user-mapping.json

사용자 매핑 JSON 파일은 코디네이터의 어떤 로컬 파일 시스템 위치에도 놓을 수 있지만, 보통 etc 디렉토리에 두는 것이 일반적이에요. 파일이나 확장자에 대한 명명 표준은 없지만, 확장자를 .json으로 쓰는 것이 전통적이에요. 절대 경로나 Trino 설치 루트에 대한 상대 경로를 지정하세요.

여러 인증 방법이 활성화되면 서로 다른 인증 타입에 대해 서로 다른 사용자 매핑 파일을 지정할 수 있어요:

Authentication type Property
Password (file, LDAP, Salesforce) http-server.authentication.password.user-mapping.file
OAuth2 http-server.authentication.oauth2.user-mapping.file
Certificate http-server.authentication.certificate.user-mapping.file
Header http-server.authentication.header.user-mapping.pattern
JSON Web Token http-server.authentication.jwt.user-mapping.file
Kerberos http-server.authentication.krb5.user-mapping.file
Insecure http-server.authentication.insecure.user-mapping.file

더 알아보기 (Learn more)

사용자 이름을 그룹으로 묶어 접근 제어를 쉽게 하려면 Group mapping 문서를 함께 살펴보세요.