정의
경량 디렉터리 액세스 프로토콜(영어: Lightweight Directory Access Protocol; LDAP)은 TCP/IP 위에서 디렉터리 서비스를 조회하고 수정하는 응용 프로토콜이다.
디렉터리는 논리, 계급 방식 속에서 조직화된, 비슷한 특성을 가진 객체들의 모임이다. 가장 일반적인 예로는 전화 번호부(telephone directory)가 있는데 가나다 순의 일련의 이름을 가지고 있고, 이름마다 전화 번호와 주소가 포함되어 있다. 이러한 기본 설계 때문에 LDAP는 인증을 위한 다른 서비스에 의해 자주 사용된다.
LDAP 디렉터리 트리는 선택된 모델에 따라 다양한 정치적, 지질학적, 조직적 경계를 반영하기도 한다. 오늘날 LDAP의 배치는 최상위 수준의 계급을 구조화하기 위해 도메인 이름 서비스의 이름을 사용하는 경향이 있다. 디렉터리 안에 들어가면 들어갈수록 사람들, 조직, 프린터, 문서, 그룹 등을 대표하는 항목들이 나타난다.
일반적으로 정기적으로 액세스되지만 거의 변경되지 않는 데이터가 포함되어 있다고 한다. 큰 데이터 세트의 경우에도 매우 빠른 읽기 성능을 제공하도록 설계 되었지만, Write 성능은 상당히 낮다고 하다. 일반적인 관계형 데이터베이스와 비교했을 때 데이터 구조와 용도에서 많은 차이가 있다.
이름에서 유추해볼 수 있듯이 DAP이라는 프로토콜이 있었으나 OSI 전 계층에서 사용되다 보니 운영 환경에서 제약이 많아 TCP/IP 계층에서 사용되게 끔 LDAP으로 발전되게 되었다.
LDAP과 Active Directory 는 때로 같은 의미로 사용되지만 동일한 것은 아니다. LDAP은 Active Directory에서 개체를 생성하거나 쿼리하는 데 사용되는 프로토콜 중 하나이다. 즉, LDAP은 디렉터리 서비스와 통신하는 프로토콜이고 Active Directory는 그러한 디렉터리 서비스 중 하나이다.
왜 사용하는가?
위의 설명을 보면 알겠지만 주로 중앙 인증 서버를 구축하는데 사용되고 네트워크 내에서 디렉터리 서비스를 유지하고 액세스하도록 설계된 표준 프로토콜 임을 알 수 있다.
주로 Active Directory와 통신하거나 AWS에 AD Connector를 구성해 Azure 또는 Window OS 환경과 연결하거나 할 때 사용 했던 것 같다.
주요 활용은 아래와 같다.
- 디렉터리 서비스에 액세스하여 해당 서비스를 관리할 수 있는 중앙 인증 서버를 제공하는 것
- LDAP를 사용하는 조직은 조직, 조직의 사용자, 자산(예: 사용자 이름, 암호)에 대한 정보를 저장, 관리, 보호할 수 있다.
- 일반적으로 AD에서 사용되지만, UNIX의 Red Hat Directory Server 및 Windows의 오픈소스 애플리케이션인 OpenLDAP을 비롯하여 다른 툴 및 클라이언트 환경에 대한 사용자 인증에도 사용할 수 있다.
LDAP 구조
- Information 모델
- 데이터의 형태와 데이터를 통해 디렉터리 구조로 정보를 저장하는 방식에 관한 것
- Naming 모델
- 각 Entry를 어떻게 식별하고 구성하는지에 대해 설명
- Functional 모델
- 8가지의 작업 명령을 보통 나누게 되고 작업 명령의 기능에 따라 3가지로 구분한다.
- 질문작업, 갱신작업, 인증 및 제어 작업
- Security 모델
- 디렉터리에 접근하는 사용자 인증과 데이터 접근 권한을 통해 서비스를 보호하는 방식에 대해 설명한다.
구조에 대한 자세한 설명은 링크를 통해 확인해보자. 이보다 더 정확히 설명할수 없을 것 같다!
LDAP 서버와 클라이언트
LDAP 디렉터리에 연결하려면 사용자의 장치에 LDAP 클라이언트가 설치되어 있어야 한다.
LDAP 클라이언트는 다수의 라이브러리가 존재한다.
- JNDI
- 자바2부터 기본적으로 내장된 라이브러리.
- 자바에서 활용할 수 있는 네이밍, 디렉터리 관련 서비스들에 활용할 수 있는 라이브러리로 LDAP 역시 디렉터리 서비스로 JNDI를 통해 활용할 수 있음
- Spring LDAP
- 다양한 프로젝트나 서비스에서 많이 고려되는 Spring 프레임워크를 기반으로 하는 LDAP 라이브러리
- 기존 자바 라이브러리인 JNDI와 비교해 더욱 간결하고 쉽게 활용할 수 있으며 예외 처리를 유연하게 제공
- UnboundID LDAP
- 다른 LDAP 라이브러리보다 빠르고 쉬우며 여러 기능을 가진 것을 강점으로 내세우고 있음
- 다양한 데이터 포맷, 암호화 등을 비롯한 관련 API들과 LDAP 기반의 In-Memory 테스트 환경을 제공
또한 디렉터리를 제공해주기 위한 LDAP 서버가 필요하다. 즉, LDAP 환경을 구축하고 활용하기 위해서 다양한 서버와 클라이언트 API가 필요하다.
LDAP 서버는 아래와 같다.
- OpenLDAP
- LDAP 디렉터리를 구축하고 관리할 수 있는 커맨드 라인 기반의 서버이다.
- LDAP 기능만을 제공하고 있어 확장성이 뛰어남
- Apache Directory Server
- LDAP을 기반으로 자바로 작성된 LDAP 서버이다.
- 이클립스와 같은 자바 기반의 응용 프로그램에 쉽게 임베드 할 수 있는 장점이 있다.
- Active Directory
- LDAP 뿐만 아니라 다양한 형태의 디렉터리 구조 및 여러 프로토콜을 제공하는 솔루션
- 기존 LDAP을 보다 확장해 다양한 기능을 제공할 뿐 아니라 서버 설정, 관리과 같은 전반적인 환경을 제어할 수 있는 GUI 서비스 및 툴들을 제공한다.
- 다른 OpenLDAP 서버들과 달리 윈도우 환경에서만 서비스가 가능
LDAP은 어떻게 작동하는가?
일반적인 LDAP 작업 흐름은 다음과 같다. 예시이니 참고만 하면 될듯하다.
- 클라이언트를 사용해 사용자는 LDAP 디렉터리와의 보안 연결을 설정한다.
- 특정 프린터에 대한 디렉터리에 "search" 쿼리를 보낸다.
- LDAP 디렉터리는 사용자를 인증한다.
- 검색 작업은 디렉터리 내에서 수행되며 요청한 프린터의 주소가 반환된다.
- LDAP 디렉터리에 대한 보안 연결이 닫힌다.
- 사용자가 프린터에 연결한다.
3줄 요약
- LDAP은 디렉터리 서비스를 제공하기 위한 프로토콜이다. 일반적으로 디렉터리 서비스에 액세스하여 해당 서비스를 관리할 수 있는 중앙 위치를 제공하는 사례가 있음
- LDAP를 사용하는 조직은 조직, 조직의 사용자, 자산(예: 사용자 이름, 암호)에 대한 정보를 저장, 관리, 보호할 수 있다.
- LDAP은 정보 계층 구조를 제공해 스토리지 액세스를 간소화하는 데 도움이 되고, 기업이 성장하면서 더 많은 사용자 데이터와 자산을 확보함에 따라 중요할 수 있다.
- LDAP 서버와 클라이언트 구조로 구성 돼 디렉터리 서비스를 제공한다.
내 생각
LDAP은 Active Directory에서 주로 많이 언급 되었던 프로토콜이기에 한번 쯤 정리 해보고 싶었다. Active Directory 와 동일시 되는 것은 아니고 사용자에 대한 정보 확인을 하는 용도로 사용되는 즉, 디렉터리에 액세스해 인증하기 위해 주로 사용되는 통신 프로토콜이라고 알게 되었다.
[참조] :
https://www.redhat.com/ko/topics/security/what-is-ldap-authentication
https://www.samsungsds.com/kr/insights/ldap.html
'CS 지식' 카테고리의 다른 글
SPA, MPA란? (Feat. SSR과 CSR의 차이) (0) | 2024.06.10 |
---|---|
Keep-alive란? (0) | 2024.05.20 |
Deadlock(교착 상태)란? (0) | 2024.02.13 |
KPI / SLI / SLO / SLA란? (1) | 2023.11.27 |
GitOps란? (2) | 2023.11.20 |