Jenkins OIDC로 인증 연결하기

2023. 1. 24. 22:45Devops

Jenkins

엄청 유명한.. CICD로 많이 사용되는 툴이다, 하지만 CICD라는 용어와 개념을 접해보지 못한 사람에게는 생소할 것 입니다.


CICD는 Continuous Integration / Continuous Delivery의 약어로, 새롭게 업데이트되는 코드들이 지속적으로 산출물로 자동 완성되는 개념(CI)와 User에게 끊임없이 전달되는 새로운, 개선된 서비스들을 칭하는 의미(CD)로 Devops라는 문화와 맞물려 빌드 파이브라인이라는 용어로도 많이 사용됩니다.

 

Github에서 제공하는 Circle CI, Travis CI 등 많은 관련 기능을 위한 다른 훌륭한 툴들 또한 존재합니다.

저는 개인적으로 CICD외에도 많은 자동화에 Jenkins를 즐겨 사용하는 편 입니다.

 

궁극적으로 Jenkins라는 툴은 굉장한 Generic하게 정해진 Job(Code, Action)을 원하는 조건과 상황에서 실행되도록 해줍니다. 이에 다양한 Plugin과의 조합으로 Input UI 또한 화려하진 않지만 부족하지 않게 활용이 가능합니다.

 

이번에는 팀내에서 많은 개발자들과 함께 사용하는 Jenkins의 계정을 외부 OIDC와 연결해서 관리하는 방법을 기록해보고자 합니다.

 

자체적으로 셋업이 가능한 Keycloak을 이용해서 연결할 예정이며, 이러한 방식은 사내에서 ID Provider를 하나 셋팅해두고 여기에 Jenkins를 포함한 많은 Tool들을 연결함으로써 하나의 계정관리 포인트에서 모든 사내 서비스의 계정들을 통합관리를 할 수 있는 모델로 발전 시키는 시작점이 될 수 있다고 봅니다.

Keycloak 준비

먼저 Keycloak를 Setup해야하는 데, 이는 아래 포스트에 정리해두었었습니다.

[OIDC_Login_구현해보기_Part-1]

Jenkins setup

Jenkins의 설치 자체는 OS별로 다양한 설명이 잘되어있습니다. (찾아보면 너무 많이 나와서 생략...)

설치가 완료되면 첫 화면은 아래와 같습니다.

 

맨 먼저 OIDC를 위한 Plugin을 설치해보겠습니다.

 


Plugin의 설치가능 항목 중에 OpenId Connet Authentication을 설치하도록 하겠습니다.


설치 후 Jenkins가 Restart되고 나면 관리 메뉴 중 Configure Global Security를 들어가보면...

정상적으로 해당 Plugin이 설치가 되었다면 아래와 같은 메뉴가 생겼을 것 입니다.

 

 

이제 OIDC를 연결할 Provider 값을 설정해주면 됩니다.
우리는 여기에 Keycloak을 연결할 것 입니다.
Security Realm에 Login with Openid Connect 를 선택해주고,
Keycloak에 생성해둔 client 값을 등록하도록 합니다.


전 위와 같이 Keycloak에 준비해두었습니다. 앞서 OIDC 구현하기 Part1과 동일하게 셋업을 해두었습니다.
Valid Redirect URL은 Jenkins의 Url을 입력해둠으로써 User가 인증된 후 code가 전달될 수 있는 주소를 허용하는 개념입니다.


Credential 항목에서는 Secret 값을 가져올 수 있습니다. Jenkins의 client id와 같이 입력하도록 합니다.


다음 OIDC protocal에 맞춰 Provider측의 endpoint들의 값을 보기 위해 Keycloak Realm Settings의 OpenID Endpoint Configuration을 보시면 됩니다.

 

 

여기서 입력해야할 값들인
"Token server url" ,"Authorization server url", "UserInfo server url" 들을 얻을 수 있습니다.

이 값들의 의미와 어떻게 사용되며 왜 필요한 지는 지난 Post인 OIDC login 구현하기를 참조하면 알 수 있을 것 입니다. 실제로 해당 Plugin도 거의 동일한 방식으로 구현되어있음을 짐작할 수 있습니다.

값들을 채워넣었으면 이제 jenkins를 restart 해보겠습니다.

 

 

Url 뒤에 restart path를 입력하면 됩니다.

이제 Jenkins 로그인화면이 변경된 것을 확인할 수 있습니다.

아래와 같이 User를 Keycloak에서 추가 / 관리하고 이 계정을 이용해서 Jenkins를 사용하면 됩니다.

OIDC 연결 후 설정이 잘못되어 Jenkins사용이 불가능할 때...


Ubuntu linux 기준 /var/lib/jenkins/config.xml


파일시스템 내부에 config.xml에서 위 UI를 통해서 설정했던 값들을 직접 수정할 수 있습니다.
설정을 수정하고 다시 Jenkins를 실행하면 수동으로 복구가 가능합니다.

개인적으로 OIDC는 굉장히 유용한 Protocal이라고 생각합니다.


요즘 계정을 관리하는 별도의 툴에서 OIDC나 OAuth2를 지원해주기 때문에 툴들은 본연의 기능에 충실하고, 계정관리는 단순히 User의 정보를 건네받아 권한만 부여하는 방식으로 관리를 하게 되면 맴버 추가나 제거시에도 Provider에서만 수정을 해주어도 모든 계정을 사용하는 시스템에 반영이 되는 등 중앙관리 형태가될 수 있기 때문에 유지보수가 편리해지는 방향이라고 생각됩니다.

'Devops' 카테고리의 다른 글

Selenium webdriver - test automation  (0) 2023.01.24
OIDC 인증 Jenkins에 권한 설정하기  (0) 2023.01.24
Jenkins 2.0 Pipeline  (0) 2023.01.24