Search

Argo CD Dex를 활용한 LDAP 연동하기

들어가며

지난 글 (Argo CD Dex를 활용한 GitHub SSO 연동하기)에서는 Argo CD의 Dex를 활용하여 Github 계정으로 로그인하는 방법을 알아봤습니다.
지난 글에 이어서, 이번에는 Github가 아닌 LDAP(Lightweight Directory Access Protocol)을 연동하여 로그인할 수 있도록 Argo CD를 설정하는 방법을 소개하겠습니다.

LDAP?

LDAP은 Lightweight Directory Access Protocol로 네트워크 상에서 조직의 데이터를 저장하고 검색할 수 있는 디렉토리 서비스를 위한 프로토콜입니다.
기존 디렉토리 서비스의 표준인 X.500의 DAP의 경량화/단순화 버전이며, 현재 대부분의 디렉토리 서비스에 사용되는 프로토콜입니다.
앞서 언급했듯이, 일반적으로 LDAP은 이메일주소, 사용자의 이름, 비밀번호 같은 유저 정보를 저장하는 디렉토리 서비스에 사용됩니다. 대규모 조직에서는 대부분 디렉토리 서비스를 구성하고, 사용자 인증 및 권한 부여 등에 주로 사용합니다.
제가 현재 소속되어있는 곳도 유저 정보를 위한 디렉토리 서비스가 있으며, LDAP으로 접근가능하도록 구성되어 있습니다. 앞으로 Argo CD를 많은 개발자가 참여하여 사용하게 되었기 때문에 별도로 사용자에 대한 관리를 하는 것보다 사내 조직 데이터를 LDAP으로 활용하는 것이 효율적이라고 판단하여 Argo CD와 LDAP 연동하는 작업을 진행했습니다.

Argo CD에 LDAP 연동하기

아래의 Argo CD 설치는 모두 Argo CD Helm chart를 사용합니다. 수동으로 manifest를 사용하여 설치하는 것과는 조금 다를 수 있습니다.
먼저 Argo CD Helm Chart를 사용할 때는 README.md의 내용도 중요하지만, 차트에 사용되는 설정 값들이 모여있는 values.yaml 을 확인하는 습관을 들이는게 좋은 것 같습니다.
특히 Argo CD는 지금도 활발히 업데이트되고 있는 툴입니다. 많은 configuration 값들이 없어지고, 변경되고, 생기기 때문에 수시로 확인하여 상황에 맞게 Argo CD 차트를 이용하는 것이 추후에 많은 도움이됩니다.

dex.config 설정

이전 포스팅과 동일하게, dex의 config 값들은 argocd-cm 이라는 이름의 ConfigMap 에서 관리됩니다.
Github SSO 연동과 동일하게 dex.config 값을 이번에는 LDAP을 연동하도록 바꾸는 작업이 필요합니다.
LDAP type의 dex.config 설정 예시는 아래와 같습니다.
dex.config: | connectors: - type: ldap name: <connector-name-you-want> id: <connector-id-you-want> config: host: <ldap 서버 host> rootCA: <ldap 서버 CA 인증서> bindDN: <ldap 서버에 로그인할 DN(ID)> bindPW: <위 DN(ID)에 대한 패스워드> usernamePrompt: Username # 사용자를 찾는데 사용되는 정보 userSearch: {} # 그룹을 찾는데 사용되는 정보 groupSearch: {}
YAML
복사
type: ldap
name : connector의 이름
id : connector의 고유 식별자
config : connector의 구성 정보
host : LDAP 서버 호스트 주소
bindDN: cn=Administrator,cn=users,dc=example,dc=com : LDAP 서버에 바인드하기 위해 사용되는 Distinguished Name(DN)입니다.
bindPW : LDAP 서버에 바인드하기 위해 사용되는 패스워드입니다.
usernamePrompt : 사용자 이름을 묻는 프롬프트입니다.
host, rootCA, bindDN, bindPW 값들은 LDAP 서버에 정상적으로 접근하기 위해 필요한 값들이라고 생각하면 됩니다.

userSearch, groupSearch 설정

userSearch, groupSearch는 실제로 유저, 그룹에 대한 정보를 찾을 때 사용되는 정보들인데, 이 부분은 실제 적용 예시를 공유하고 싶지만, 사내 정보다보니(…) 실제 예시는 생략했습니다. 아래는 userSearch, groupSearch의 한 예시입니다.
현재 이 부분은 명확하게 파악하지 못한 내용이라 일단 아래 내용을 참고만 부탁드립니다. 추후에 아래 내용에 대한 상세한 설명을 덧붙여 놓겠습니다.
userSearch: baseDN: cn=Users,dc=example,dc=com filter: "(objectClass=person)" username: userPrincipalName idAttr: DN emailAttr: userPrincipalName nameAttr: cn groupSearch: baseDN: cn=Users,dc=example,dc=com filter: "(objectClass=group)" userMatchers: - userAttr: DN groupAttr: member nameAttr: cn
YAML
복사
userSearch : 사용자를 찾는 데 사용되는 설정 정보
baseDN: cn=Users,dc=example,dc=com : 검색의 시작점으로 사용되는 Distinguished Name(DN)
filter: "(objectClass=person)" : 검색할 사용자 클래스를 지정하는 필터
username: userPrincipalName : 사용자 이름을 나타내는 LDAP 속성
idAttr: DN : 사용자를 식별하는 데 사용되는 속성
emailAttr: userPrincipalName : 사용자 이메일을 나타내는 LDAP 속성
nameAttr: cn : 사용자 이름을 나타내는 LDAP 속성
groupSearch : 그룹을 찾는 데 사용되는 설정 정보
baseDN: cn=Users,dc=example,dc=com : 검색의 시작점으로 사용되는 Distinguished Name(DN)
filter: "(objectClass=group)" : 검색할 그룹 클래스를 지정하는 필터
userMatchers : 그룹에 대한 사용자 matcher 목록
userAttr: DN : 사용자를 식별하는 데 사용되는 LDAP 속성
groupAttr: member : 그룹을 식별하는 데 사용되는 LDAP 속성
nameAttr: cn : 그룹 이름을 나타내는 LDAP 속성
위 내용을 기반으로, dex.config가 작성이 완료되면 해당 내용을 argocd-cm 에 직접 반영하거나, Argo CD Helm Chart values.yaml 파일의 configs.cm.dex.config 에 추가하여 Argo CD를 설치합니다.
이제 Argo CD Web UI에 접속하면 LOG IN VIA ... 로 dex.config에 설정했던 connector의 이름이 나타나게 됩니다. 해당 버튼을 누르면 별도의 로그인 페이지가 나오고, 사내 시스템에서 사용하고 있는 계정/패스워드를 사용해서 로그인이 된다면 성공적으로 설정된 것입니다.

마치며

Argo CD와 LDAP을 연동하는 내용은 비교적 간단하게 마무리했습니다. LDAP이라는 개념만 제외하면 Github 연동과 크게 다를 것이 없어서 무리 없이 적용해볼 수 있으리라고 생각합니다.
다만, userSearchgroupSearch 를 제대로 활용하기 위해서는 LDAP과 Active Directory 대해 공부가 필요합니다.
만약 LDAP으로 연동하는데 어려움이 있으시다면, 오른쪽 하단의 채널톡으로 문의를 남겨주세요.

참고