본문 바로가기
Work/개발 노트

[LDAP] 개념 잡기

by ★용호★ 2020. 9. 4.
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

LDAP 인증 Flow

현재 Rundeck을 사용한 LDAP 인증을 구현하고 있는데 위 그림이 가장 근접한 듯 하여 첨부하였다. Rundeck LDAP 인증은 추후 별도 포스팅에서 다룰 예정이다.

LDAP의 디렉터리 구조

LDAP 서버에는 여러 디렉토리 정보(entry)가 계층적 트리 구조(hierarchical tree-like)로 구성되어 있다.

  • Entry 정보 참조는 RDN(Relative Distinguished Name)이나 DN(Distinguished Name)을 사용해서 정보를 얻어올 수 있다.
  • 각각의 엔트리는 다수의 속성을 갖는다.
  • 각 속성은 이름, 값+ 형태
    • 이름 하나에 한개 이상의 값이 바인딩 될 수 있음
  • 각 엔트리는 DN(Distinguished Name) 이라는 고유한 값으로 지칭
    • 이 값으로 어디에 속한 엔트리인지 파악할 수 있다.

도구

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 구성

참고

댓글