본문으로 건너뛰기

LDAP 및 Active Directory

구성 파일에는 다음 LDAP 매개변수가 포함됩니다.

{
"ldap_binddn": "cn=admin,dc=example,dc=org",
"ldap_bindpassword": "admin_password",
"ldap_server": "localhost:389",
"ldap_searchdn": "ou=users,dc=example,dc=org",
"ldap_searchfilter": "(&(objectClass=inetOrgPerson)(uid=%s))",
"ldap_mappings": {
"dn": "",
"mail": "uid",
"uid": "uid",
"cn": "cn"
},
"ldap_enable": true,
"ldap_needtls": false,
}

모든 SSO 공급자 옵션:

매개변수환경 변수설명
ldap_binddnSEMAPHORE_LDAP_BIND_DN바인딩할 LDAP 사용자 객체의 이름입니다.
ldap_bindpasswordSEMAPHORE_LDAP_BIND_PASSWORDBind DN에 정의된 LDAP 사용자의 비밀번호입니다.
ldap_serverSEMAPHORE_LDAP_SERVER포트를 포함한 LDAP 서버 호스트입니다. 예: localhost:389.
ldap_searchdnSEMAPHORE_LDAP_SEARCH_DN사용자를 검색할 범위입니다. 예: ou=users,dc=example,dc=org.
ldap_searchfilterSEMAPHORE_LDAP_SEARCH_FILTER사용자 검색 표현식입니다. 기본값: (&(objectClass=inetOrgPerson)(uid=%s)), 여기서 %s는 입력한 로그인 이름으로 대체됩니다.
ldap_mappings.dnSEMAPHORE_LDAP_MAPPING_DN
ldap_mappings.mailSEMAPHORE_LDAP_MAPPING_MAIL사용자 이메일 클레임 표현식*입니다.
ldap_mappings.uidSEMAPHORE_LDAP_MAPPING_UID사용자 로그인 클레임 표현식*입니다.
ldap_mappings.cnSEMAPHORE_LDAP_MAPPING_CN사용자 이름 클레임 표현식*입니다.
ldap_enableSEMAPHORE_LDAP_ENABLELDAP 활성화 여부입니다.
ldap_needtlsSEMAPHORE_LDAP_NEEDTLSSSL로 LDAP 서버에 연결합니다.

*클레임 표현식

클레임 표현식 예제:

email | {{ .username }}@your-domain.com

Semaphore는 먼저 email 필드를 클레임하려고 시도합니다. 비어 있으면 그 뒤의 표현식이 실행됩니다.

"username_claim": "|" 표현식은 공급자를 통해 로그인하는 각 사용자에 대해 임의의 username을 생성합니다.

문제 해결

ldapwhoami 도구를 사용하여 BindDN이 동작하는지 확인하십시오. 이 도구는 openldap-clients 패키지에 포함되어 있습니다.

ldapwhoami\
-H ldap://ldap.com:389\
-D "CN=your_ldap_binddn_value_in_config"\
-x\
-W

비밀번호를 대화형으로 묻고, 코드 0을 반환하며 지정한 DN을 출력해야 합니다.

LDAP에 문제가 있는 경우 문제 해결 섹션을 읽어 보십시오.

예제: OpenLDAP 서버 사용

다음 명령을 실행하여 관리자 계정과 추가 사용자가 있는 자체 LDAP 서버를 시작합니다.

docker run -d --name openldap \
-p 1389:1389 \
-p 1636:1636 \
-e LDAP_ADMIN_USERNAME=admin \
-e LDAP_ADMIN_PASSWORD=pwd \
-e LDAP_USERS=user1 \
-e LDAP_PASSWORDS=pwd \
-e LDAP_ROOT=dc=example,dc=org \
-e LDAP_ADMIN_DN=cn=admin,dc=example,dc=org \
bitnami/openldap:latest

Semaphore UI의 LDAP 구성은 다음과 같아야 합니다.

{
"ldap_binddn": "cn=admin,dc=example,dc=org",
"ldap_bindpassword": "pwd",
"ldap_server": "ldap-server.com:1389",
"ldap_searchdn": "dc=example,dc=org",
"ldap_searchfilter": "(&(objectClass=inetOrgPerson)(uid=%s))",
"ldap_mappings": {
"mail": "{{ .cn }}@ldap.your-domain.com",
"uid": "|",
"cn": "cn"
},
"ldap_enable": true,
"ldap_needtls": false
}

Docker에서 Semaphore를 실행하려면 다음 LDAP 구성을 사용하십시오.

docker run -d -p 3000:3000 --name semaphore \
-e SEMAPHORE_DB_DIALECT=bolt \
-e SEMAPHORE_ADMIN=admin \
-e SEMAPHORE_ADMIN_PASSWORD=changeme \
-e SEMAPHORE_ADMIN_NAME=Admin \
-e SEMAPHORE_ADMIN_EMAIL=admin@localhost \
-e SEMAPHORE_LDAP_ENABLE=yes \
-e SEMAPHORE_LDAP_SERVER=ldap-server.com:1389 \
-e SEMAPHORE_LDAP_BIND_DN=cn=admin,dc=example,dc=org \
-e SEMAPHORE_LDAP_BIND_PASSWORD=pwd \
-e SEMAPHORE_LDAP_SEARCH_DN=dc=example,dc=org \
-e 'SEMAPHORE_LDAP_SEARCH_FILTER=(&(objectClass=inetOrgPerson)(uid=%s))' \
-e 'SEMAPHORE_LDAP_MAPPING_MAIL={{ .cn }}@ldap.your-domain.com' \
-e 'SEMAPHORE_LDAP_MAPPING_UID=|' \
-e 'SEMAPHORE_LDAP_MAPPING_CN=cn' \
semaphoreui/semaphore:latest