LDAP 간단소개
LDAP 간단소개

LDAP 간단소개

설명
LDAP에 대해 알아보자~
Last Updated
Last updated March 25, 2023
태그
Computer Science
CS
LDAP

배경

지금까지 프로젝트 진행하면서서 기반시스템(svn, jenkins, sonarqube, redmine, nexus...)은 개별 시스템 별로 유저를 관리하거나 admin 계정이나 다른 하나의 계정으로만 사용을 해왔었다.
몇명 안되는 개발자들 데리고 일할 때는 큰 문제가 되지 않았는데 2~3년전부터 점점 프로젝트 규모와 수행하는 인원도 커지다 보니 이게 매번 개별 시스템 별로 계정을 생성하거나 관리하는게 아주 귀찮은 일이 되버렸다.
단적으로 아래와 같이 몇가지 마음을 심란하게 만드는 괴랄한 상황들이 나타나기 시작했다.
  • 시스템 별로 아이디나 비밀번호를 달리하는 개발자... "아니 왜??"
  • 심지어 아이디나 비밀번호를 자꾸 까먹는 개발자... "아니 왜왜왜??"
  • 작년의 경우에는 개발자가 많을 땐 70명정도 되고 수시로 나갔다 들어왔다 중간에 하도급 바뀌고 개발자 교체 ㅜㅜ
  • 기타등등.. 수도 없다..
그래서 새로 시작하는 프로젝트에서는 그동안 바쁘고 귀찮다는 핑계로 미뤄왔던 LDAP을 기반으로 하는 중앙 계정관리를 위한 디렉토리 서비스를 구축해서 운영하고 있다.
진작에 좀 할걸! 올해 프로젝트 진행하면서 정말 크게 느낀점이다. 진작 해 놓을 걸 왜 또 찾아보기 귀찮고 그 동안의 습관이나 관례로 그냥 버텨왔던게 어리석을 따름이다

LDAP 이란?

  • Lightweight Directory Access Protocol
  • 네트워크 상에서 조직이나 개인정보 혹은 파일이나 디바이스 정보 등을 찾아보는 것을 가능하게 만든 소프트웨어 프로토콜이다.
  • 네트워크 상의 디렉토리 서비스 표준인 X.500의 DAP(Directory Access Protocol)를 기반으로한 경량화(Lightweight) 된 DAP 버전이다.
    • DAP는 OSI 전체 프로토콜 스택을 지원하며 운영에 매우 많은 컴퓨팅 자원을 필요로하는 아주 무거운 프로토콜
    • LDAP은 DAP의 복잡성을 줄이고 TCP/IP 레이어에서 더 적은 비용으로 DAP의 많은 기능적인 부분을 조작할 수 있도록 설계
  • 디렉터리 서비스는?
    • 이름을 기준으로 대상을 찾아 조회하거나 편집할 수 있는 서비스
    • DNS도 디렉터리 서비스의 일종
      • DNS는 도메인 이름으로 IP 주소를 조회
  • Lightweight 하다.
    • 이 의미는 사용하기 간편하다는 의미가 아니라 통신 네트워크 대역폭 상의 가벼움을 의미
    • 인터넷 프로토콜로 데이터를 조금만 주고 받아도 되게끔 설계되었다고 함
    • LDAP의 요청의 99%는 검색에 대한 요청
    • 디렉토리 안에는 연락처, 사용자, 파일, code 등 무엇이든 넣을 수 있고, insert, update 보다는 검색 요청에 특화되어 있다.
    • 검색에 특화되다보니 트랜잭션이나 롤백이 없고 복잡한 관계 등을 설정할 수 없다.
    • 신뢰성이나 가용성을 개선하기 위해 쉽게 복제될 수 있는 아키텍처로 이루어져 있다.
  • 기본적으로 바이너리 프로토콜이다.
    • ASN.1이라는 언어로 메시지를 표현
    • 메시지를 BER(Basic Encoding Rules)라는 포맷으로 인코딩하여 주고 받음
      • BER 인코딩이 바이너리라서 내용을 알아볼 순 없음
  • 비동기 프로토콜이다.
    • 세션을 하나만 열어서 여러 메시지 요청을 보낼 수 있고, 각각의 요청에 대한 응답이 다른 시점에 올 수도 있음
    • 응답마다 어떤 요청의 응답인지 식별할 수 있는 아이디가 부여됨
 

용도

  • 사용자, 시스템, 네트워크, 서비스, 애플리케이션 등의 정보를 트리 구조로 저장하여 조회하거나 관리
  • 회사에서 구성원의 조직도나 팀별 이메일 주소 등도 LDAP 서비스로 관리
    • 특정 영역에서 이용자명과 패스워드를 확인하여 인증하는 용도로 쓰임
  • 인증이든 무엇이든 트리 구조로 검색하고 편집하기 좋은 데이터들은 LDAP을 많이 사용
  • LDAP은 서버에만 적용되는 프로토콜이 아니라 주소록 관리에 사용되거나 스마트폰 내에서도 LDAP 클라이언트가 포함되어 있음
  • 특정 데이터를 중앙에서 일괄 관리하는 일반적인 경우에 사용
    • 유저 권한 관리, 주소록, 조직도, 사용자 정보 관리, 어플리케이션/시스템 설정 정보, 공개 키 인프라스트럭쳐, DHCP나 DNS등의 저장소, 문서 관리, 이미지 저장소, Code 등

주요 용어

  • DN : Distinguish Name
  • RDN : Relative Distinguished Name
  • DIT : Directory Information Tree
  • LDIF : LDAP Data Interchange Format
  • UID : User ID
  • DC : Domain Component
  • OU : Organizational Unit
 

LDAP 인증 Flow

notion image
 

LDAP의 디렉토리 구조

LDAP 서버에는 여러 디렉토리 정보(entry)가 계층적 트리 구조(hierarchical tree-like)로 구성되어 있다.
notion image
  • Entry 정보 참조는 RDN(Relative Distinguished Name)이나 DN(Distinguished Name)을 사용해서 정보를 얻어올 수 있다.
  • 각각의 엔트리는 다수의 속성을 갖는다.
  • 각 속성은 이름, 값+ 형태
    • 이름 하나에 한개 이상의 값이 바인딩 될 수 있음
  • 각 엔트리는 DN(Distinguished Name) 이라는 고유한 값으로 지칭
    • 이 값으로 어디에 속한 엔트리인지 파악할 수 있다.
    •  
Entry Name
Full Name
Description
c
CountryName
국가명
st
StateProvinceName
주(도) 명

도구

LDAP 서버를 구축하기 위해 여러 옵션이 존재한다.
  • Windows 라이센스를 가지고 있다면 Active Directory가 적합
  • 오픈소스 : OpenLDAP, Apache DS, OpenDJ, 389 Directory Server 등
  • Mac의 디렉토리 유틸리티
    • 임의의 LDAP 서버에 붙어서 내용을 간편하게 확인할 수 있음
  • Apache Directory Studio
    • 이클립스 UI라서 개인적으로 사용하기 제일 편한 듯

AD (Active Directory)

  • AWS
    • Simple AD : 관리형 디렉토리 서비스
      • 사용자 계정, 그룹 멤버십, Amazon EC2 인스턴스들에 대한 도메인 조인 등
    • Microsoft AD : Windows Server 2012 R2 기반으로 운영되는 관리형 AD 서비스
      • SSO 지원
    • AD Connector
      • 온프레미스 AD 환경을 AWS 환경에서 사용할 수 있도록 해주는 Proxy 역할
  • Trust
    • 단방향 (One-way) : 보안이 중요한 온프레미스에서 AWS 환경으로만 접근을 허용하려는 경우 단방향 Trust를 구성
    • 양방향 : 양쪽 모두에서 데이터를 접근해야 하는 경우 양방향 Trust 구성

LDAP vs AD

LDAP과 AD는 모두 디렉터리 서비스를 이용할 수 있는 프로그램이며 중앙에서 리소스를 관리할 수 있다.
하지만 LDAP은 '프로토콜'이고 거의 모든 OS에 디렉터리 서비스를 지원하지만 검색에 특화되어 있고 DB처럼 쓰기 동작에는 적합하지 않다.
반면 AD는 디렉터리 서비스 공급자이며 LDAP을 포함한 여러 프로토콜을 지원한다. 검색뿐만 아니라 쓰기에도 적합하며 네트워크 규모에 관계없이 많이 사용되지만 Windows 환경만 지원한다.
 
LDAP
  • 서버의 정보를 조회하는데 사용되는 디렉터리 서비스 프로토콜
  • 저장된 정보의 업데이트가 잦지 않고 빠른 검색이 필수적일 때 적합
  • 거의 모든 OS 지원
AD
  • LDAP ver.2와 3, Kerberos 기반 인증, DNS 기반 서비스 등 다양한 프로토콜을 사용한 디렉터리 서비스
  • 정책 할당, SW 배포 및 업데이트 등에 적합
  • 규모에 가리지 않고 소규모 ~ 대규모의 네트워크에 모두 적합하나 Windows 환경에서만 작동
 

참고