HiveServer2의 LDAP 인증 제공자 사용자·그룹 필터

HiveServer2의 LDAP 인증 제공자 사용자·그룹 필터 (User and Group Filter Support with LDAP)

Hive 1.3.0부터 HiveServer2는 LDAP 그룹 필터, LDAP 사용자 필터, 커스텀 LDAP 쿼리를 지원해요. 이를 통해 HiveServer2에 접속할 수 있는 사용자 집합을 제한할 수 있어요.

출처: 문서

본문

LDAP과 함께하는 사용자·그룹 필터

Hive 1.3.0부터 HIVE-7193은 HiveServer2에 다음 지원을 추가합니다:

  • LDAP 그룹 필터
  • LDAP 사용자 필터
  • 커스텀 LDAP 쿼리 지원

필터는 LDAP 인증 제공자의 기능을 크게 향상시킵니다. Hive가 HiveServer2에 접속할 수 있는 사용자 집합을 제한할 수 있게 해줍니다.

HiveServer2 인증 구성에 대한 일반 정보는 Authentication/Security Configuration을 참고하세요. 아래에서 논의하는 개별 구성 매개변수는 Hive Configuration Properties – HiveServer2도 참고하세요.

그룹 멤버십

이를 통해 HiveServer2는 사용자에 대한 그룹 멤버십을 강제할 수 있습니다. 사용자가 Hive 구성 파일에 나열된 그룹 중 하나 이상에 속하면 인증 요청이 성공합니다. 사용자가 나열된 그룹 중 적어도 하나에 속하지 않으면 사용자 인증이 실패합니다.

그룹 멤버십 기반 인증을 지원하는 네 가지 구성 매개변수:

  • hive.server2.authentication.ldap.groupDNPattern
  • hive.server2.authentication.ldap.groupFilter
  • hive.server2.authentication.ldap.groupMembershipKey (버전 2.1.0, HIVE-13295 경유)
  • hive.server2.authentication.ldap.groupClassKey (버전 2.1.0, HIVE-13295 경유)

hive.server2.authentication.ldap.groupDNPattern

이 값은 디렉터리의 그룹에 대한 "distinguishedName"(DN) 패턴을 나타냅니다. LDAP 그룹 엔티티가 함께 위치하면 단일 DN일 수 있고, 그룹이 서로 다른 트리에 흩어져 있으면 모든 DN 패턴의 콜론(colon) 으로 구분된 목록일 수 있습니다.

각 DN 패턴은 그룹 검색 쿼리를 위해 제공자가 그룹 이름(그룹 필터에서)으로 대체할 "%s"를 포함할 수 있습니다.

예제 1 (단일 DN):

<property>
  <name>
    hive.server2.authentication.ldap.groupDNPattern
  </name>
  <value>CN=%s,OU=Groups,DC=apache,DC=org</value>
</property>

이것은 모든 LDAP 그룹 항목이 디렉터리 루트 "OU=Groups,DC=apache,DC=org" 아래에 있음을 나타냅니다.

LDAP 인증 제공자는 그룹 항목을 찾기 위해 LDAP 쿼리에서 %s를 그룹 이름으로 대체합니다. 예를 들어 "group1"이라는 그룹을 쿼리하면 " CN=group1,OU=Groups,DC=apache,DC=org" 를 사용합니다.

예제 2 (두 개의 DN):

<property>
  <name>
    hive.server2.authentication.ldap.groupDNPattern
  </name>
  <value>
      CN=%s,OU=Groups,DC=apache,DC=org:uid=%s,CN=Users,DC=apache,DC=org
  </value>
</property>

위 패턴은 LDAPAtnProvider에게 LDAP 그룹 엔티티가 디렉터리의 두 개의 분리된 트리에 존재할 수 있고 DN에 서로 다른 속성을 가질 수 있음을 알려줍니다. (콜론 구분자에 주목.)

hive.server2.authentication.ldap.groupFilter

이 값은 LDAPAtnProvider가 강제할 그룹 이름 필터를 나타냅니다. 모든 개별 그룹은 쉼표(comma) 로 구분된 목록으로 표현됩니다. 인증 요청이 성공하려면 사용자가 이 그룹 중 하나 이상에 속해야 합니다.

예제:

<property>
  <name>hive.server2.authentication.ldap.groupFilter</name>
  <value>group1,group2</value>
</property>

hive.server2.authentication.ldap.groupMembershipKey

이 값은 구성원을 나타내는 LDAP의 그룹 항목에 대한 LDAP 속성을 나타냅니다. (버전 2.1.0부터 사용 가능.)

이 속성은 구성원 각각에 대해 여러 항목이 있을 수 있습니다. 기본적으로 LDAP 인증 제공자는 사용자를 검색하기 위해 "member"를 가정합니다. 이 기본값을 바꾸려면 제공자가 그룹 구성원을 정확히 검색하도록 속성의 값/키를 설정합니다.

hive.server2.authentication.ldap.groupClassKey

이 값은 각 그룹이 LDAP에서 구현하는 LDAP objectClass를 나타냅니다. 기본적으로 LDAP 인증 제공자는 그룹 검색에서 "groupOfNames"를 사용합니다. (버전 2.1.0부터 사용 가능.)

위 속성들은 LDAP에서 사용자-그룹 연관을 올바르게 찾는 것을 돕습니다.

예제: LDAP 그룹 "testGroup"이 다음과 같은 속성을 가지면 Hive의 LDAP 인증 제공자는 그룹 구성원을 찾을 수 없습니다. 2개 속성을 설정하면 도움이 됩니다.

    dn:uid=testGroup,ou=Groups,dc=domain,dc=com  
    objectClass: group  
    objectClass: top  
    memberUid: uid=testUser1,ou=Users,dc=domain,dc=com  
    memberUid: uid=testUser2,ou=Users,dc=domain,dc=com  
    cn: HiveUserGroup
<property>
  <name>hive.server2.authentication.ldap.groupMembershipKey</name>
  <value>memberUid</value>
</property>
<property>
  <name>hive.server2.authentication.ldap.groupClassKey</name>
  <value>group</value>
</property>

사용자 검색 목록

이를 통해 HiveServer2는 지정된 사용자 목록에 대한 접근을 제한할 수 있습니다. 인증되는 사용자가 이 사용자 목록의 일부가 아니면 접근이 거부됩니다.

이 기능을 지원하는 두 가지 구성 매개변수:

  • hive.server2.authentication.ldap.userDNPattern
  • hive.server2.authentication.ldap.userFilter

hive.server2.authentication.ldap.userDNPattern

이 값은 디렉터리의 사용자에 대한 "distinguishedName"(DN) 패턴을 나타냅니다. LDAP 사용자 엔티티가 단일 루트 내에 함께 위치하면 단일 DN일 수 있고, 사용자가 디렉터리의 서로 다른 트리/포리스트에 흩어져 있으면 모든 DN 패턴의 콜론 으로 구분된 목록일 수 있습니다.

각 DN 패턴은 사용자 검색 쿼리를 위해 제공자가 사용자 이름(사용자 필터에서)으로 대체할 "%s"를 포함할 수 있습니다.

예제 1 (단일 DN):

<property>
  <name>
    hive.server2.authentication.ldap.userDNPattern
  </name>
  <value>
    CN=%s,CN=Users,DC=apache,DC=org
  </value>
</property>

위 예제에서 모든 사용자는 단일 루트 "CN=Users,DC=apache,DC=org" 아래에 함께 위치합니다. "foo" 사용자를 검색하기 위해 LDAPAtnProvider는 "CN=foo,CN=Users,DC=apache,DC=org" 같은 DN으로 사용자를 찾으려 시도합니다.

예제 2 (두 개의 DN):

<property>
  <name>
    hive.server2.authentication.ldap.userDNPattern
  </name>
  <value>
      CN=%s,OU=Users,DC=apache,DC=org:uid=%s,CN=UnixUsers,DC=apache,DC=org
  </value>
</property>

위 패턴은 LDAPAtnProvider에게 LDAP 사용자 엔티티가 디렉터리의 두 개의 분리된 트리에 존재할 수 있고 DN에 서로 다른 속성을 가질 수 있음을 알려줍니다. (콜론 구분자에 주목.)

hive.server2.authentication.ldap.userFilter

이것은 접근을 허용할 사용자 이름의 쉼표 로 구분된 목록입니다. 인증 제공자는 인증되는 사용자가 이 목록의 일부이면 접근을 허용하고, 그렇지 않으면 거부합니다.

예제:

<property>
  <name>
    hive.server2.authentication.ldap.userFilter
  </name>
  <value>
    hive-admin,hive,hivetest,hive-user
  </value>
</property>

커스텀 쿼리 문자열

상업적 사용 가능한 여러 LDAP 구현이 있으며, 각 구현 내 표준 속성 집합은 없습니다. 위 필터 중 어느 것이든 예상치 못한 이유로 요구 사항을 충족하지 못하면 HiveServer2는 LDAP 서버에 대해 실행할 사용자 지정 LDAP 쿼리 문자열을 사용할 수 있습니다. 이 구성된 쿼리는 개별 사용자를 나타내는 DN 집합을 반환할 것으로 기대됩니다(그룹 지원은 아래 참고). 반환된 결과는 인증하는 사용자에게 GRANT/DENY 결정을 내리는 데 사용됩니다. 이 구성을 지원하기 위해 새 구성 속성이 도입되었습니다.

hive.server2.authentication.ldap.customLDAPQuery

예제:

<property>
  <name>hive.server2.authentication.ldap.customLDAPQuery</name>
  <value><![CDATA[(&(objectClass=person)(|(memberOf=CN=Domain Admins,CN=Users,DC=apache,DC=org)(memberOf=CN=Administrators,CN=Builtin,DC=apache,DC=org)))]]>
  </value>
</property>

위 쿼리는 그룹(Domain Admins 또는 Administrators) 중 하나의 구성원인 모든 사용자를 반환합니다. 이는 Hive 사용자가 자신의 LDAP 구현에 대해 LDAP 구성을 사용자 지정할 수 있게 하는 훨씬 더 많은 유연성을 제공합니다.

커스텀 LDAP 쿼리에서 그룹 지원

Hive 2.1.1부터 사용 가능합니다(HIVE-14513 참고).

사용자를 반환하는 쿼리를 작성하는 것이 항상 간단하지는 않습니다. 예를 들어 "group1과 group2의 모든 사용자"를 인증하도록 허용하려면 LDAP 쿼리가 group1과 group2의 모든 구성원의 합집합을 반환해야 합니다.

하나의 일반적인 구성은 그룹이 사용자 목록을 포함하는 것입니다:

   "dn: uid=group1,ou=Groups,dc=example,dc=com",  
   "distinguishedName: uid=group1,ou=Groups,dc=example,dc=com",  
   "objectClass: top",  
   "objectClass: groupOfNames",  
   "objectClass: ExtensibleObject",  
   "cn: group1",  
   "ou: Groups",  
   "sn: group1",  
   "member: uid=user1,ou=People,dc=example,dc=com",

쿼리:

   (&(objectClass=groupOfNames)(|(cn=group1)(cn=group2)))

는 다음 항목을 반환합니다:

   uid=group1,ou=Groups,dc=example,dc=com  
   uid=group2,ou=Groups,dc=example,dc=com

하지만 "member" 속성의 값만 반환하는 쿼리를 만들 방법은 없습니다. (LDAP API는 결과 집합에서 속성 필터링을 허용합니다.)

그런 쿼리가 그룹 DN 자체 대신 그룹 구성원의 사용자 DN을 반환하도록 허용하기 위해, Hive 2.1.1 릴리스부터 LDAP 인증 제공자는 hive.server2.authentication.ldap.groupMembershipKey 구성 속성을 (재)사용합니다. 이 속성은 그룹 항목에서 사용자 DN을 나타내는 속성 이름을 나타냅니다. 위 예제에서 그 속성은 " member " 입니다.

이를 통해 Hive LDAP 인증 제공자는 아래와 같이 그룹과 개별 사용자를 반환하는 쿼리를 지정할 수 있습니다(group1의 모든 사용자 + 사용자 user4가 인증되도록 허용됨):

<property>  
  <name>hive.server2.authentication.ldap.customLDAPQuery</name>
  <value><![CDATA[(|(&(objectClass=groupOfNames)(cn=group1))(&(objectClass=person)(sn=user4)))]]>
  </value>
</property>

우선순위

그룹 멤버십 매개변수는 사용자 목록과 함께 사용해 더 엄격한 접근을 강제할 수 있습니다. LDAP Atn 제공자는 다음 기준에 따라 인증 결정을 판정합니다:

  1. hive-site.xml에 "hive.server2.authentication.ldap.customLDAPQuery" 가 포함되어 있으면, 이 쿼리의 결과**** 인증 결정을 판정하는 데 사용됩니다. 다른 모든 속성 값(*.groupDNPattern, *.groupFilter, *.userDNPattern, *.userFilter)은 전적으로 무시됩니다.
  2. .groupFilter와 .userFilter 매개변수가 구성 파일에 모두 지정되면, 인증되는 사용자가 두 조건을 모두 충족하는 경우에** 접근이 허용됩니다. 그렇지 않으면 거부됩니다. 따라서 사용자는 *.userFilter에 나열되어야 하고 그리고 *.groupFilter에 나열된 그룹 중 하나에도 속해야 합니다.
  3. 두 필터 중 하나(( *.userDNPattern + *.userFilter ) || ( *.groupDNPattern + *.groupFilter ))만 지정되면, 인증되는 사용자가 지정된 필터를 충족하는지에 따라 결정이 판정됩니다.
  4. 구성 파일에 *.groupFilter도 *.userFilter도 지정되지 않으면, 제공자는 baseDN 트리 내의 LDAP 디렉터리에서 사용자를 검색하려 시도합니다. 사용자가 발견되면 접근이 허용되고, 그렇지 않으면 거부됩니다. 중요: 이 구현은 이전 구현보다 다소 더 엄격합니다. 이전 구현에서는 baseDN이 제공되지 않으면 사용자로 LDAP에 바인딩할 수 있으면 인증이 허용되었습니다.

더 알아보기 (Learn more)

HiveServer2의 전반적인 인증·보안 구성은 Authentication/Security Configuration 문서를, LDAP 관련 개별 매개변수는 Hive Configuration Properties 문서를 참고하세요.