LDAP는 1990년대 초반 X.500 디렉터리 액세스 프로토콜(DAP)보다 더 가벼운 대안으로 개발된 이래, 신원 관리 분야의 기초가 되는 프로토콜로 자리매김해 왔습니다. 오늘날에도 대부분의 기업 환경에 여전히 적용되어 있으며, 조직들이 클라우드 신원 관리 솔루션을 도입하고 있음에도 불구하고 여전히 인증 및 디렉터리 서비스의 기반을 이루고 있습니다.
LDAP는 클라이언트-서버 모델로 작동하며, 이 모델에서 LDAP 클라이언트는 중앙 집중식 디렉토리에 정보를 저장하고 반환하는 디렉토리 서버에 요청을 전송합니다. 통신은 TCP/IP를 통해 이루어지며, 일반적으로 표준 연결의 경우 포트 389를, LDAPS(SSL/TLS를 통한 LDAP)의 경우 포트 636을 사용합니다.
대략적으로 보면, LDAP 교환은 다음 네 단계로 이루어집니다:
- 연결:클라이언트는 LDAP 서버와 TCP 세션을 개설합니다.
- 제본: 클라이언트는 익명으로 또는 자격 증명을 사용하여 서버에 인증합니다.
- 요청:클라이언트는 디렉터리에 대해 검색이나 수정 요청과 같은 작업을 수행합니다.
- 답변:서버는 요청된 데이터나 상태 코드를 반환하며, 클라이언트는 결국 세션을 종료하기 위해 ‘unbind’ 명령을 실행합니다.
서버는 데이터를 계층적 트리 구조로 구성하며, 바인드(bind), 검색(search), 비교(compare), 추가(add), 수정(modify), 삭제(delete), 언바인드(unbind) 등 정의된 일련의 작업에 응답합니다. 이러한 공유형 실시간 액세스 모델 덕분에 LDAP는 다수의 애플리케이션이 동일한 신뢰할 수 있는 신원 정보 소스에 쿼리를 보내야 하는 환경에 특히 적합합니다.
LDAP 디렉터리 구조
LDAP 디렉토리는 디렉토리 정보 트리(DIT)라고 하는 계층적 트리 구조에 정보를 저장합니다. 트리 내의 각 항목은 객체(예: 사용자, 그룹 또는 장치)를 나타내며, 계층 구조 내의 위치를 설명하는 고유한 식별명(DN)으로 식별됩니다.
DN은 가장 구체적인 것부터 가장 일반적인 순서로 읽히는 일련의 구성 요소들로 이루어져 있습니다:
- cn(통용명), 예를 들어 사람의 전체 이름
- ou(조직 단위), 예를 들어 부서
- dc(도메인 구성 요소), 예를 들어 도메인 이름의 일부 등
예를 들어, DN cn=John Smith,ou=Engineering,dc=example,dc=com은 example.com 도메인 내의 Engineering 조직 단위에서 John Smith라는 사용자를 식별합니다.
LDAP 작업
LDAP는 인증부터 읽기, 쓰기, 세션 종료에 이르기까지 클라이언트와 디렉토리 간의 상호작용 전체 수명 주기를 포괄하는 소수의 표준화된 작업을 정의합니다.
- 바인드: 디렉터리 서버에 클라이언트를 인증하고 인증된 세션을 설정합니다. 바인드 작업은 LDAP를 인증 메커니즘으로 사용할 수 있게 해주는 핵심 요소입니다. 바인드가 성공하면 제출된 자격 증명이 유효한 디렉터리 항목과 일치한다는 것이 확인되기 때문입니다.
- 검색: 필터 구문을 사용하여 반환할 속성과 값을 정의함으로써, 특정 기준에 부합하는 항목을 디렉토리에서 조회합니다. 검색은 가장 빈번하게 사용되는 LDAP 연산으로, 사용자 조회, 그룹 구성원 확인, 디렉토리 탐색과 같은 사용 사례를 주도합니다.
- 비교하기: 주어진 속성 값이 항목에 저장된 값과 일치하는지 확인하며, 저장된 값 자체를 노출하지 않고 true 또는 false를 반환합니다. Compare는 전체 검색이 필요하지 않은 간단한 검증 작업에 자주 사용됩니다.
- 추가: 디렉토리 내 트리 구조의 지정된 위치에 새로운 항목을 생성합니다. 추가 작업은 일반적으로 사용자 프로비저닝 과정에서, 즉 디렉토리에 새로운 계정, 그룹 또는 장치를 등록해야 할 때 사용됩니다.
- 수정: 기존 항목의 속성을 업데이트하여, 비밀번호 재설정, 그룹 소속 변경 또는 프로필 수정과 같은 변경을 수행할 수 있습니다. ‘수정(Modify)’ 기능은 항목 내의 개별 속성 값을 추가, 교체 또는 삭제하는 것을 지원합니다.
- DN 수정: 항목의 이름을 변경하거나 디렉터리 트리 내의 다른 위치로 이동합니다. ‘DN 수정’ 기능은 사용자가 부서를 이동하거나 조직 단위가 재편되는 등 조직 구조가 변경될 때 사용됩니다.
- 삭제: 디렉터리에서 항목을 삭제합니다. ‘삭제’ 기능은 일반적으로 계정이나 리소스가 폐기되고 해당 디렉터리 기록을 정리해야 하는 프로비저닝 해제 과정에서 사용됩니다.
- 연결 해제: 클라이언트 세션을 종료하고 서버와의 연결을 끊습니다. 이름만 보면 바인드(bind)를 취소하는 것처럼 보이지만, 실제로는 클라이언트가 작업을 마쳤음을 알리고 관련 서버 리소스를 해제합니다.
- 운영 기간 연장: 이는 공급업체와 표준 기구가 핵심 기능 세트 이외의 추가 작업을 정의할 수 있도록 하는 프레임워크입니다. 표준 LDAP 연결을 암호화된 연결로 업그레이드하는 StartTLS는 가장 널리 사용되는 확장 작업 중 하나입니다.
LDAP는 기업 환경 전반에서 신원 정보를 중앙 집중화하고, 여러 애플리케이션과 서비스에서 해당 정보에 일관되게 접근할 수 있도록 하는 데 사용됩니다. 일반적인 사용 사례는 다음과 같습니다:
- 중앙 집중식 인증: 단일 디렉토리에서 다양한 애플리케이션의 사용자 자격 증명을 검증함으로써, 비밀번호의 무분별한 확산을 줄이고 관리 부담을 경감합니다.
- 사용자 및 그룹 관리: 직원, 계약자 및 시스템 계정에 대한 기록을 저장하고 정리하며, 이와 관련된 그룹 및 권한을 관리하는 것
- 주소록 및 연락처 검색: 이메일 클라이언트 및 협업 도구가 기업 디렉토리에서 연락처 정보를 조회할 수 있도록 허용
- 장치 및 리소스 관리: 프린터, 서버, 공유 스토리지와 같은 네트워크 리소스 추적
- 단일 로그인(SSO)의 기초: SSO 시스템이 사용자를 인증하고 프로필 속성을 조회하는 데 사용하는 기본 신원 정보 소스 역할을 합니다.
LDAP 인증이란 애플리케이션이 사용자가 제출한 인증 정보를 사용하여 LDAP 디렉터리에 바인딩함으로써 사용자의 신원을 확인하는 과정을 말합니다. 디렉터리가 해당 인증 정보가 유효한 항목과 일치함을 확인하면, 사용자는 인증을 통과하게 되며 요청한 애플리케이션에 대한 접근 권한을 부여받습니다.
일반적인 LDAP 인증 절차는 다음과 같이 진행됩니다:
- 사용자는 애플리케이션에 인증 정보(일반적으로 사용자 이름과 비밀번호)를 입력합니다.
- 이 애플리케이션은 해당 인증 정보를 포함하는 LDAP 바인드 요청을 디렉터리 서버로 전송합니다.
- LDAP 서버는 전송된 식별자를 사용하여 디렉터리 트리 내에서 사용자의 항목을 찾습니다.
- 서버는 제출된 비밀번호를 해당 항목에 저장된 인증 정보와 비교합니다.
- 서버는 애플리케이션에 성공 또는 실패 응답을 반환합니다.
- 성공 시, 애플리케이션은 사용자에게 요청된 리소스에 대한 액세스 권한을 부여합니다.
Simple Bind 대 SASL Bind
LDAP는 두 가지 주요 바인드 메커니즘을 지원하며, 이 중 어느 것을 선택하느냐에 따라 인증 과정에서 자격 증명이 전송되고 검증되는 방식에 있어 보안상 중요한 영향을 미칩니다.
A 간단한 바인딩 사용자 이름과 비밀번호를 서버로 직접 전송하며, TLS(LDAPS나 StartTLS와 같이)로 연결이 보호되지 않는 한 서버는 자격 증명을 평문으로 전송합니다.
A SASL 바인딩 (Simple Authentication and Security Layer)는 Kerberos, 클라이언트 인증서 및 기타 플러그인 방식 등 보다 강력한 인증 메커니즘을 지원하며, 자격 증명의 노출이 우려되는 환경에서 선호됩니다.
LDAP과 Active Directory는 종종 혼동되곤 하지만, 서로 경쟁 관계에 있는 기술은 아닙니다. LDAP은 디렉터리 정보에 접근하기 위한 개방형 프로토콜인 반면, Active Directory는 LDAP을 지원되는 접근 방식 중 하나로 사용하는 Microsoft 디렉터리 서비스 제품입니다.
간단히 말해, Active Directory는 LDAP를 사용하지만, LDAP가 Active Directory는 아닙니다. OpenLDAP, 389 Directory Server, Oracle Internet Directory를 비롯한 많은 비-Microsoft 디렉터리 서비스 역시 LDAP 프로토콜을 구현하고 있습니다.
LDAP, SAML 및 OAuth는 서로 관련이 있지만 별개의 프로토콜로, 광범위한 신원 및 접근 관리 영역 내에서 각기 다른 문제를 해결합니다.
- LDAP주로 온프레미스 리소스 및 내부 애플리케이션에 대한 디렉터리 액세스 및 인증을 처리합니다. 이는 디렉터리를 조회하고 수정하기 위한 프로토콜이며, 바인드(bind) 작업을 통해 인증을 수행할 수 있습니다.
- SAML (보안 어설션 마크업 언어, Security Assertion Markup Language)는 웹 기반 단일 로그인(SSO)을 위한 연합 인증을 가능하게 하며, 신원 제공자와 서비스 제공자 간에 인증 및 권한 부여 어설션을 교환합니다. 이 기술은 일반적으로 사용자가 클라우드 및 SaaS 애플리케이션에 로그인하는 데 사용됩니다.
- OAuth 이는 제3자 애플리케이션이 인증 정보를 노출하지 않고도 사용자의 리소스에 대한 제한적인 접근 권한을 얻을 수 있도록 하는 인증 프로토콜입니다. 이 프로토콜은 사용자가 누구인지가 아니라, 애플리케이션이 사용자를 대신하여 어떤 작업을 수행할 수 있는지를 규정합니다.
많은 현대적인 환경에서는 사용자 데이터의 기반 디렉토리인 LDAP, 클라우드 애플리케이션에 대한 연합 SSO를 위한 SAML, 그리고 위임된 API 액세스를 위한 OAuth 이 세 가지를 모두 활용합니다. 인증 계층과 거버넌스 계층이 어떻게 상호 작용하는지에 대한 자세한 내용은 RSA의 다음 기사를 참조하십시오. 신원 거버넌스 및 IAM .
조직들이 클라우드 ID 제공업체와 SaaS 애플리케이션을 도입하고 있음에도 불구하고, LDAP는 여전히 널리 사용되고 있으며 전면적으로 대체되지는 않고 있습니다. 대부분의 기업 환경은 사용자 데이터의 공식적인 출처로 기존 LDAP 디렉터리를 계속 사용하고 있으며, 최신 IAM 플랫폼은 일반적으로 이러한 디렉터리를 대체하기보다는 통합되도록 설계되어 있습니다.
현재 주된 추세는 LDAP 디렉터리가 클라우드 ID 제공업체, SSO 플랫폼 및 다단계 인증 계층과 공존하는 하이브리드 아키텍처로 향하고 있습니다. 조직들은 단순한 바인드(bind)를 수행하고 접근 권한을 부여하는 대신, 다단계 인증, 비밀번호 없는 인증, 적응형 인증, 위험 기반 접근 결정, 지속적인 검증 등 추가적인 제어 수단을 LDAP 인증에 적용하는 경우가 점점 더 늘고 있습니다. 이러한 계층적 접근 방식은 기존 디렉터리 투자를 유지하면서, 단순한 LDAP 바인드만으로는 완화할 수 없는 자격 증명 기반 위험을 해결해 줍니다.
RSA의 신원 및 접근 관리 솔루션 기존 LDAP 디렉토리와 연동하여 레거시 인프라 위에 최신 인증 및 접근 제어 기능을 추가합니다. RSA는 LDAP 기반 인증에 다단계 인증(MFA), 비밀번호 없는 인증 옵션, 위험 기반 접근 제어 기능을 확장함으로써, 조직이 현재 사용하고 있는 디렉토리 서비스를 교체하지 않고도 신원 보안을 강화할 수 있도록 지원합니다.
LDAP 자체는 기본적으로 트래픽을 암호화하지 않으며, 표준 LDAP 연결에서는 바인드 자격 증명을 평문으로 전송합니다. LDAP는 LDAPS 또는 StartTLS를 사용하여 연결을 암호화하고, SASL과 같은 강력한 인증 메커니즘 및 다중 요소 인증과 같은 추가 제어 수단을 결합하여 배포할 때 비로소 안전해집니다. 이러한 보호 조치가 없으면 LDAP는 인증 정보 가로채기 및 주입 공격에 취약합니다.
LDAP는 표준 비암호화 연결에 TCP 포트 389를 사용하고, SSL/TLS를 통해 통신을 암호화하는 LDAPS에는 TCP 포트 636을 사용합니다. StartTLS는 포트 389에서 시작하여 연결을 암호화 세션으로 업그레이드하는 대안입니다. Active Directory의 글로벌 카탈로그 서비스는 암호화된 연결을 위해 포트 3268과 3269를 사용합니다.
LDAP는 389번 포트의 암호화되지 않은 TCP 연결을 통해 데이터를 전송하므로, 인증 정보와 디렉터리 쿼리가 도청될 위험에 노출됩니다. LDAPS는 동일한 LDAP 프로토콜을 636번 포트의 SSL/TLS 암호화 채널로 감싸, 연결이 도청되거나 변조되는 것을 방지합니다. LDAPS는 일반적으로 민감한 디렉터리 데이터나 인증 트래픽이 신뢰할 수 없는 네트워크를 통과하는 환경에서 필수적으로 사용됩니다.
네, LDAP는 여전히 기업 환경에서 널리 사용되고 있습니다. LDAP는 Active Directory, OpenLDAP 및 기타 디렉터리 서비스의 기반 디렉터리 프로토콜로 계속해서 활용되고 있으며, 온프레미스 및 하이브리드 아키텍처 전반에 걸쳐 인증, 사용자 프로비저닝, 디렉터리 조회 등에 여전히 널리 사용되고 있습니다. 클라우드 ID 플랫폼은 일반적으로 LDAP를 대체하기보다는 LDAP와 연동됩니다.
LDAP 쿼리란 특정 조건에 부합하는 항목을 검색하기 위해 LDAP 클라이언트가 디렉터리 서버로 전송하는 검색 요청을 말합니다. 쿼리는 (&(objectClass=user)(department=Engineering))과 같이 정의된 필터 구문을 사용하여 반환해야 할 속성과 값을 지정합니다. 애플리케이션은 LDAP 쿼리를 사용하여 사용자, 그룹 및 기타 디렉터리 객체를 대규모로 조회합니다.
네, LDAP는 디렉터리 동기화, LDAP-as-a-service 서비스, 또는 인증을 온프레미스 LDAP 디렉터리로 연동하는 클라우드 ID 제공업체와의 통합을 통해 클라우드 애플리케이션을 지원할 수 있습니다. 많은 조직에서 LDAP와 함께 SAML이나 SCIM을 사용하여 온프레미스 디렉터리와 SaaS 애플리케이션을 연결하며, LDAP를 신뢰할 수 있는 신원 정보 소스로 유지하고 있습니다.