loading...

알아두면 쓸데있는 LDAP

알아두면 쓸데있는 LDAP

들어가며

LDAP(Lightweight Directory Access Protocol)는 디렉토리 서비스를 제공하기 위한 프로토콜입니다.
등장한 지 30년이 지났음에도 불구하고 그동안 IT 환경에 맞춰 변화를 거듭하면서 현재도 기업 시스템과 보안 서비스에서 사용자 관리 및 인증에 사용되는 등 여전히 중요한 기술로 자리 잡고 있습니다.

LDAP.com 로고

본 아티클에서는 LDAP 기술과 활용 방법을 소개하겠습니다.

LDAP 개요

LDAP(Lightweight Directory Access Protocol)이란 네트워크상에서 조직이나 개인, 파일, 디바이스 등을 찾아볼 수 있게 해주는 소프트웨어 프로토콜입니다. LDAP이 등장하기 전 디렉토리 서비스 표준인 X.500의 DAP(Directory Access Protocol)가 존재했지만 OSI 계층 전체의 프로토콜을 지원하고 통신 간에 네트워크 자원을 많이 소비하는 등 운영 환경에 제약이 많았습니다. LDAP은 OSI 계층 전체가 아닌 TCP/IP 위에서 운용되고 DAP의 스펙을 최대한 유지하면서도 경량화해 네트워크 부담을 줄이도록 설계되었습니다.

Client Side
  • LDAP ->(request) LDAP API ->BER(LDAP request) & TCP/IP
  • LDAP <-(response) LDAP API <-BER(LDAP result set)& TCP/IP
Server Side
  • BER(LDAP request) & TCP/IP -> LDAP Server <->(Data I/o) Backend
  • <-BER(LDAP request) & TCP/IP <- LDAP Server <->(Data I/o) Backend
  • BER(Basic Encoding Rules)
LDAP 개요

LDAP 구조

LDAP의 구성 요소를 4가지 모델로 나누어 설명하겠습니다.

1) Information 모델


데이터의 형태와 데이터를 통해 디렉토리 구조로 정보를 저장하는 방식에 관한 것입니다. LDAP 디렉토리에서 표현하는 정보 구조는 두 가지 요소로 이루어집니다.

· Entry: 디렉토리에서 정보를 표현하는 기본 단위이다. Entry는 다수의 attribute로 구성됩니다.
· Attribute: Entry의 각 타입을 저장하는 공간으로 1개의 Attribute에 하나, 또는 다수의 값을 담을 수 있습니다.

LDAP 디렉토리 구조는 Entry 데이터들을 트리 구조로 형성, 관리합니다. 이러한 트리 형태의 구조를 DIT(Directory information Tree)라고 합니다.

LDAP directory infirmation tree(DIT)
  • dc=plain ae,dc=org
  • ou=devices
  • ou=people
  • cn=gerald carter (cn:gerald carter, objectClass:person,sn:carter,telephoneNumber:555-1234)-attribute type and values
  • dn:RDN,ou=people,dc=plainae,dc=org
LDAP 디렉토리 구조

추가적으로 LDAP 디렉토리에서 데이터를 구성하는데 중요한 개념인 ObjectClass와 Schema에 대해 알아보겠습니다. ObjectClass는 엔트리에서 꼭 필요하거나 가질 수 있는 Attribute 타입을 정의합니다. Entry를 만들 때 ObjectClass를 통해 데이터에 필수적으로 들어가야 하는 정보를 담을 수 있게 정의할 수 있습니다. 또한 ObjectClass는 다른 ObjectClass를 상속해 구현하며 개념을 확장할 수 있습니다. Schema는 ObjectClass와 Attribute에 대해 정의하는 규칙으로 보면 됩니다. ObjectClass에 어떤 Attribute가 들어갈지, Attribute의 값에 대한 제약 및 조건 등 관련된 규칙들을 정의할 수 있습니다. 스키마 정의를 통해 여러 응용 프로그램에서 디렉토리 서비스를 읽고 사용할 때 상호운용성을 보호해주는 역할을 합니다.

2) Naming 모델


LDAP 디렉토리 구조에서 각 Entry를 어떻게 식별하고 구성하는지에 대해 설명합니다. Entry는 여러 자식 Entry들을 가지는 형태의 트리 구조로 나타나게 됩니다. 각 Entry 계층에서는 해당 계층을 나타내는 고유한 주소 Attribute를 지니는데 이를 RDN(Relative Distinguished Name)이라고 부릅니다. 앞 단락의 [LDAP 디렉토리 구조] 이미지에서 Entry 옆에 적힌 “OU=People”, “CN=Gerald Carter”와 같은 값은 해당 계층을 나타내는 고유한 주소 Attribute에 해당합니다. 이렇게 트리 구조에서 각 Entry마다 존재하는 RDN 값들을 통해 원하는 경로에 있는 Entry 정보를 찾을 수 있습니다. 또한 경로 내 RDN값들을 이어 붙여 생성된 고유한 문자를 DN(Distinguished Name)이라고 부릅니다. LDAP의 DIT 형태에서 가장 위에 존재하는 Entry는 DIT의 시작점, 데이터 트리의 루트로 보며 하나의 데이터셋으로 이해할 수 있습니다.

3) Functional 모델


LDAP 디렉토리에서 작업하는 명령을 다룹니다. 8가지의 작업 명령을 보통 나누게 되고 작업 명령의 기능에 따라 3가지로 구분합니다.

질문 작업
· Search: 주어진 조건에 맞는 Entry 도출
· Compare: 특정 Entry의 Attribute 값 비교

갱신 작업
· Add: 디렉토리에 신규 Entry 추가
· Delete: 디렉토리에 기존 Entry 삭제
· Modify: 디렉토리에 기존 Entry 수정 및 Entry DN값 변경

인증 및 제어 작업
· Bind: 디렉토리 서버 연결 시 사용자 인증
· Unbind: 디렉토리 서버와의 연결 해제
· Abandon: 이전 요청 명령을 취소

4) Security 모델


디렉토리에 접근하는 사용자 인증과 데이터 접근 권한을 통해 서비스를 보호하는 방식에 대해 설명합니다. SSL/TLS 인증 방식을 통해 서버-클라이언트 간 연결을 구성할 수 있으며 데이터 전송 시 바이너리 암호화를 적용해 정보를 보호합니다. LDAP v3 버전에서는 기존의 보안 방식뿐만 아니라 외부의 인증 방법을 제공할 수 있는 SASL 방식도 제공합니다.

LDAP와 관계형 데이터베이스

LDAP을 이용한 디렉토리 서버도 데이터를 저장하는 데이터베이스의 유형 중 하나입니다. 우리가 흔히 사용하는 MySQL, Oracle DB 같은 관계형 데이터베이스(RDB)와 비교했을 때 데이터 구조와 용도에서 많은 차이가 있습니다.

관계형 데이터베이스는 행과 열의 형태로 구성된 테이블에 데이터를 저장하고 서로 다른 테이블들과의 관계를 통해 결과를 도출합니다. 반면 LDAP의 경우 데이터가 트리 구조로 이루어진 계층형 데이터베이스입니다. 각 Entry는 Attribute로 이루어진 데이터들과 함께 하위에 여러 자식 Entry를 가지는 그룹 형태를 반복해 트리와 같은 계층 형태의 데이터로 표현할 수 있습니다. LDAP이 가진 계층 구조는 검색과 읽기 작업에 더 큰 강점을 보여줍니다. 데이터가 위치한 계층에 접근해 필요한 데이터를 바로 꺼내 올 수 있고 해당 계층의 같은 성격을 가진 데이터의 속성과 스키마 설정을 통해 보다 상세히 비교할 수 있습니다. 이런 특징 때문에 검색 및 읽기 작업에서 관계형 데이터베이스보다 유리합니다.

검색 및 읽기 처리 방식에도 차이가 있습니다. LDAP은 저장된 데이터를 신속하게 조회하기 위해 단순 쿼리 위주로 작업을 처리합니다. 하지만 관계형 데이터베이스는 여러 데이터, 테이블들의 관계를 통해 필요한 데이터를 종합적으로 가져오는 복합적 쿼리를 처리하는 작업에 중점을 둡니다. 읽기와 달리 추가, 삭제와 같은 쓰기 작업에서는 관계형 데이터베이스보다 안정성이 떨어집니다. 관계형 데이터베이스와 다르게 트랜잭션과 같은 유효성 검사가 제한적이기에 쓰기보다 읽기 작업이 많은 데이터 서비스에 주로 활용합니다.

LDAP 서버와 클라이언트

LDAP을 통한 디렉토리 서비스가 다양하게 활용되는 만큼 LDAP와 관련된 다양한 서버들과 기업 솔루션이 존재합니다. 또한 LDAP 서버를 관리하기 위한 다양한 클라이언트 API와 GUI 툴들이 등장하면서 선택의 폭이 넓어졌습니다. LDAP 환경을 구축하고 활용하기 위한 다양한 서버와 클라이언트 API 중 몇 가지를 소개하겠습니다.

1) LDAP 서버

디렉토리 서비스를 위한 LDAP 서버로 윈도우 서버 라이선스에 적용되는 Active Directory와 같은 상용 제품군부터 LDAP을 기반으로 한 오픈소스까지 다양하게 존재합니다. 이들 중 많이 활용하는 서버 3종류는 다음과 같습니다.

·OpenLDAP
LDAP 디렉토리를 구축하고 관리할 수 있는 커맨드 라인 기반의 서버입니다. LDAP이 개발되고 이를 활용하는 최초의 오픈소스 LDAP 서버로 지금까지 꾸준히 활용되고 있습니다. LDAP 기능만을 제공하고 있어 확장성이 뛰어납니다.

·Apache Directory Server
LDAP을 기반으로 자바로 작성된 LDAP 서버입니다. 이클립스와 같은 자바 기반의 응용 프로그램에 쉽게 임베드 할 수 있는 장점이 있습니다. LDAP뿐만 아니라 DNS, Kerberos와 같은 다른 프로토콜들도 지원합니다.

·Active Directory
LDAP뿐만 아니라 다양한 형태의 디렉토리 구조 및 여러 프로토콜을 제공하는 솔루션입니다. 기존 LDAP을 보다 확장해 다양한 기능을 제공할 뿐 아니라 서버 설정, 관리와 같은 전반적인 환경을 제어할 수 있는 GUI 서비스 및 툴들을 제공합니다. 다만 다른 OpenLDAP 서버들과 달리 윈도우 환경에서만 서비스가 가능합니다.

2) LDAP 클라이언트


구축된 LDAP 서버에 접근해 여러 상호작용을 위해선 클라이언트 서비스가 존재해야 합니다. LDAP 클라이언트 API는 다양한 종류의 개발 언어들과 기능이 제공되는 다수의 라이브러리가 존재합니다. 클라이언트 API에도 여러 가지가 있지만 JAVA 기반으로 쉽게 사용할 수 있고 지속적으로 관리되는 API는 다음과 같습니다.

·JNDI
자바2부터 기본적으로 내장된 라이브러리입니다. 자바에서 활용할 수 있는 네이밍, 디렉토리 관련 서비스들에 활용할 수 있는 라이브러리로 LDAP 역시 디렉토리 서비스로 JNDI를 통해 활용할 수 있습니다. LDAP이 가진 모든 기능(Controls, Extension 등)을 제공합니다.

·Spring LDAP
다양한 프로젝트나 서비스에서 많이 고려되는 Spring 프레임워크를 기반으로 하는 LDAP 라이브러리입니다. 기존 자바 라이브러리인 JDNI와 비교해 더욱 간결하고 쉽게 활용할 수 있으며 예외 처리를 유연하게 제공합니다.

·UnboundID LDAP
Ping Identity사에서 제공하고 있는 자바 기반의 LDAP 라이브러리입니다. 다른 LDAP 라이브러리보다 빠르고 쉬우며 여러 기능을 가진 것을 강점으로 내세우고 있습니다. UnboundID LDAP은 다양한 데이터 포맷, 암호화 등을 비롯한 관련 API들과 LDAP 기반의 In-Memory 테스트 환경을 제공합니다.

마치며

클라우드 인프라가 대세로 자리잡으면서 기업 IT 환경에 많은 변화가 나타나고 있습니다. 디렉토리 서비스 역시 이전보다 사용하는 경우가 적어져 LDAP의 영향력이 줄어드는 추세라고 하지만 여전히 중요한 역할을 담당하고 있으며 다양한 프로토콜과 함께 활용되면서 자리를 지키고 있습니다. 특히 Azure AD, AWS Directory Server 등과 같은 클라우드 기반의 서비스를 선보이고 있어 LDAP은 앞으로도 명맥을 꾸준히 이어갈 것이라 기대합니다.



References
[1] https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol
[2] https://datatracker.ietf.org/doc/html/rfc4511
[3] https://ldap.or.kr/ldap-이란/
[4] https://ldap.com/why-choose-ldap/
[5] https://ldap.com/client-apis/
[6] https://jumpcloud.com/blog/what-is-ldap
[7] https://jumpcloud.com/blog/overview-of-cloud-ldap
[8] https://stackoverflow.com/questions/6880804/when-to-use-ldap-over-a-database




▶   해당 콘텐츠는 저작권법에 의하여 보호받는 저작물로 기고자에게 저작권이 있습니다.
▶   해당 콘텐츠는 사전 동의 없이 2차 가공 및 영리적인 이용을 금하고 있습니다.


이 글이 좋으셨다면 구독&좋아요

여러분의 “구독”과 “좋아요”는
저자에게 큰 힘이 됩니다.

subscribe

구독하기

subscribe

장영준
장영준

에스코어㈜ 소프트웨어사업부 Knox기술그룹

에스코어 CDC 솔루션 8Sync®의 기술 서비스 개발을 담당하고 있습니다.

공유하기