LDAP 싱글 사인온¶
LDAP(Lightweight Directory Access Protocol)은 다양한 디렉터리 서비스를 처리하기 위한 애플리케이션 프로토콜입니다. Microsoft Entra ID는 Microsoft Entra 도메인 서비스(AD DS)를 통해 이 방식을 지원합니다.
Guance배포 플랜은 LDAP 서비스를 보유한 사용자가 이 프로토콜을 통해 원클릭으로 로그인할 수 있도록 지원합니다. 다음은 필요한 구성 필드입니다:
| 필드 | 설명 |
|---|---|
host |
LDAP 서버 도메인 이름, 지원 형식: |
port |
서비스 포트, host 의 포트가 이 매개변수를 기본적으로 덮어씁니다. |
baseDN |
기본 디렉터리 위치. [필드 개념 설명] 참조 |
bindDN |
LDAP 서비스와 연결을 설정할 때 인증에 사용되는 사용자 이름 정보(DN 인터페이스). |
searchAttribute |
다른 계정을 검색할 때 계정을 필터링하는 데 사용되는 항목 이름입니다. 이 항목 이름은 사용자가 입력한 사용자 이름과 함께 DIT 항목 정보를 구성합니다. (이 값은 사용자 이름을 기준으로 고유 사용자를 확인할 수 있습니다.) |
bindPassword |
LDAP 서비스와 연결을 설정할 때 인증에 사용되는 비밀번호 정보. |
mapping |
계정 속성에서 Guance로 매핑해야 하는 속성 필드 매핑 정보입니다. LDAP에서 제공하는 계정 속성에 해당하는 속성 값은 일반적으로 목록입니다. Guance에서 속성 값이 배열/목록 구조인 경우 기본적으로 첫 번째 요소를 값으로 사용하여 처리합니다. [필드 개념 설명 > 2. 계정 속성 필드] 참조 |
필드 개념 설명
-
디렉터리 정보 트리(DIT): DIT는 파일 시스템과 유사한 계층 구조입니다. 항목을 식별하려면 DIT에서 항목을 나타내는 리프부터 트리 상단까지의 경로를 지정해야 합니다. 이 경로를 항목의 고유 이름(DN)이라고 합니다.
- 항목의 고유 이름(DN): 항목의 이름과 값의 키-값 쌍(쉼표로 구분)으로 구성되며, 리프에서 트리 상단까지의 경로를 구성합니다. 항목의 DN은 전체 DIT에서 고유하며, 항목이 DIT 내의 다른 컨테이너로 이동된 경우에만 변경됩니다.
-
계정 속성 필드:
| Guance의 계정 속성 | Guance측 필드 설명 | LDAP 서비스 측에서 제공하는 계정 속성, ldap3 변환 후의 속성(기본 필드) |
|---|---|---|
username |
인증 서비스에서 로그인 계정의 이메일 필드 이름, 필수 | mail |
email |
인증 서비스에서 로그인 계정의 사용자 이름 필드 이름, 필수, 값이 없는 경우 email 사용 |
uid |
mobile |
인증 서비스에서 로그인 계정의 전화번호 필드 이름, 선택 사항 | mobile |
exterId |
인증 서비스에서 로그인 계정의 고유 식별자 필드 이름, 필수 | uid |
구성 상세¶
Guance Launcher 네임스페이스: forethought-core > core 에 다음 구성을 추가하고, 구성 변수 값을 조정해야 합니다:
# LDAP 클라이언트 구성(구성 본체 참조: https://ldap3.readthedocs.io/en/latest/server.html)
LDAPClientSet:
# LDAP 활성화 여부, 기본적으로 비활성화
enable: false
# server 매개변수 형식은 https://ldap3.readthedocs.io/en/latest/server.html 따름
server:
# LDAP 서버 도메인 이름, 도메인 이름 또는 ldap://xxx 또는 ldaps://xxx 가능
host: "ipa.demo1.freeipa.org"
# 연결 타임아웃 시간
connect_timeout: 6
# SSL 활성화 여부 제어
use_ssl: false
# 서버 스키마 및 서버 특정 정보를 반드시 읽어야 하는지 지정 (기본값: SCHEMA). 선택적 값 설명: https://ldap3.readthedocs.io/en/latest/server.html#server-object
get_info: "SCHEMA"
tls:
# 기본값 없음; 클라이언트 개인 키를 포함하는 파일 경로
local_private_key_file:
# 기본값 없음; 서버 인증서의 파일 경로
local_certificate_file:
# 기본값 없음; 인증 기관 인증서를 포함하는 파일 경로
ca_certs_file:
# 기본값 없음; 사용해야 하는 암호를 지정하는 문자열. 최신 Python 인터프리터에 적용되며 SSLContext 또는 wrap_socket() 메서드의 암호를 변경할 수 있습니다. 이전 버전에서는 무시됩니다. 기본값 없음
ciphers:
# 서버 인증서를 확인해야 하는지 여부 지정, 선택값: CERT_NONE(인증서 무시), CERT_OPTIONAL(필수는 아니지만 제공되면 확인), CERT_REQUIRED(필수 및 확인)
validate: "CERT_REQUIRED"
# 사용할 SSL 또는 TLS 버전, 다음 중 하나 가능: SSLv2, SSLv3, SSLv23, TLSv1 (Python 3.3 기준. 버전 목록은 다른 Python 버전에서 다를 수 있음), 현재 기본값 TLS 1.2
version: "PROTOCOL_TLSv1_2"
connection:
# 기본값 없음; Active Directory 액세스: ldap3를 사용하면 NTLM v2 프로토콜을 사용하여 Active Directory 서버에 연결할 수도 있음, 이 경우 NTLM으로 설정 가능
authentication:
# authentication, sasl_mechanism 및 sasl_credentials는 여기서 https://ldap3.readthedocs.io/en/latest/bind.html?highlight=Active%20Directory#digest-md5 따라야 함
# 기본값 없음; Active Directory 액세스 시 sasl_mechanism은 DIGEST_MD5 가능; 기본값 없음
sasl_mechanism:
# Active Directory 액세스 시 필요
# DIGEST-MD5 메커니즘을 사용하려면 4개 또는 5개 값의 튜플을 sasl_credentials로 전달해야 함: (realm, user, password, authz_id, enable_signing). 사용하지 않는 경우 'realm', 'authz_id' 및 'enable_signing'에 None 전달 가능:
sasl_credentials:
# 표준 연결 위에 TLS 활성화 여부; true인 경우 ldap 연결 후 TLS 확인 및 활성화
startTls: false
baseDN: "dc=demo1,dc=freeipa,dc=org"
bindDN: "uid=admin,cn=users,cn=accounts,dc=demo1,dc=freeipa,dc=org"
bindPassword: "Secret123"
# 계정 검색에 사용되는 속성; 방법 1: `searchAttribute: uid` 속성 필드 이름만 지정; 방법 2: `searchAttribute: "(uid={username})"` 사용자 정의 필터 문, 이 방법에서 괄호와 중괄호 안의 username은 필수
# 참고: AD 사용자인 경우 일반적으로 sAMAccountName으로 설정
searchAttribute: "uid"
# 계정 검색 시 계정 정보에 해당하는 클래스 이름. 참고: 연동 대상이 Microsoft AD의 LDAP인 경우 여기는 persion이어야 함
# 확인 방법: `ldapsearch`(타사 LDAP 연결 도구) 설치 후 `ldapsearch -x -H ldap://xxx.cn:389 -D "bindDN 정보" -w "bindPassword 정보" -b "baseDN 내용" "(cn=대상 사용자)"` 명령 실행, 반환 결과의 objectClass가 선택 가능한 목록
personObjectClass: "inetOrgPerson"
mapping:
# 인증 서비스에서 로그인 계정의 사용자 이름 필드 이름, 필수, 값이 없는 경우 email 사용
username: uid
# 인증 서비스에서 로그인 계정의 이메일 필드 이름, 필수
email: mail
# 인증 서비스에서 로그인 계정의 전화번호 필드 이름, 선택 사항
mobile: mobile
# 인증 서비스에서 로그인 계정의 고유 식별자 필드 이름, 필수
exterId: uid
SSL을 사용하지 않는 경우 내부 네트워크에서 LDAP 서비스에 액세스하는 구성 예시:
# LDAP 클라이언트 구성(구성 본체 참조: https://ldap3.readthedocs.io/en/latest/server.html)
LDAPClientSet:
# LDAP 활성화 여부, 기본적으로 비활성화
enable: true
# server 매개변수 형식은 https://ldap3.readthedocs.io/en/latest/server.html 따름
server:
# LDAP 서버 도메인 이름, 도메인 이름 또는 ldap://xxx 또는 ldaps://xxx 가능
# 로컬 개발 주소 hosts 바인딩: 172.16.211.111 openldap-server
host: "<域名 、 协议+域名+端口>"
# 서버 스키마 및 서버 특정 정보를 반드시 읽어야 하는지 지정 (기본값: SCHEMA). 선택적 값 설명: https://ldap3.readthedocs.io/en/latest/server.html#server-object
get_info: "ALL"
# 기본 DN 정보
baseDN: "<基础DN>"
# 클라이언트 연결 시 바인딩되는 DN
bindDN: "<客户端建立连接时绑定的DN>"
# bindDN에 해당하는 비밀번호
bindPassword: "<与 bindDN 对应的密码>"
# 계정 검색에 사용되는 속성
searchAttribute: cn
# 계정 검색 시 계정 정보에 해당하는 클래스 이름. 참고: 연동 대상이 Microsoft AD의 LDAP인 경우 여기는 persion이어야 함
# 확인 방법: `ldapsearch`(타사 LDAP 연결 도구) 설치 후 `ldapsearch -x -H ldap://xxx.cn:389 -D "bindDN 정보" -w "bindPassword 정보" -b "baseDN 내용" "(cn=대상 사용자)"` 명령 실행, 반환 결과의 objectClass가 선택 가능한 목록
personObjectClass: "inetOrgPerson"
# 계정 속성이 아래 표와 일치하지 않는 경우 조정 필요
mapping:
# 인증 서비스에서 로그인 계정의 사용자 이름 필드 이름, 필수, 값이 없는 경우 email 사용
username: cn
# 인증 서비스에서 로그인 계정의 이메일 필드 이름, 필수
email: mail
# 인증 서비스에서 로그인 계정의 전화번호 필드 이름, 선택 사항
mobile: mobile
# 인증 서비스에서 로그인 계정의 고유 식별자 필드 이름, 필수
exterId: cn
LDAP 싱글 사인온을 사용하여 Guance에 로그인¶
위 구성이 추가되면 LDAP 싱글 사인온을 사용하여 Guance에 로그인할 수 있습니다.
1) Guance배포 플랜의 로그인 주소를 열고 로그인 페이지에서 LDAP 로그인을 선택합니다.
2) LDAP 서버에서 사용하는 사용자 이름과 비밀번호를 입력합니다.
3) Guance의 해당 워크스페이스에 로그인합니다.
