티스토리 뷰

728x90
반응형

본 포스팅에서는 Jenkins 사용자 관리 및 권리 관리 방안에 대해 살펴보겠습니다.

Jenkins를 활용하여 WildFly 배포 방법에 대해 살펴보았습니다.

해당 포스팅을 확인하고자 할 경우 다음을 참고하세요.

 

[Jenkins] Jenkins를 활용한 WildFly CI/CD 환경 구성

 

지금까지 작업은 설치 시 생성한 admin 계정으로 진행하였으며, 실제 개발자, 운영자가 빌드 용 또는 배포 용으로 사용하고자 하는 Jenkins 계정 권한 부여에 대해 고민할 필요가 있습니다.

본 포스팅에서는 사용자 계정 생성부터 사용자가 별로 어떠한 권한을 부여해 주어야 하는지 살펴보도록 하겠습니다.

1) 사용자 관리 방안

사용자 가입 방식은 직접 Jenkins에 가입하는 방식과 admin 계정으로 생성하는 방식이 있습니다.

사용자가 직접 가입하는 방식은 Jenkins 관리에서 허용 또는 차단할 수 있습니다.

위와 같이 Jenkins 메인 화면 → Jenkins 관리 → Configure Global Secutiry로 이동합니다.

Access Control → Security Realm → Jenkins`own user database의 사용자의 가입 허용을 체크 할 경우 직접 가입하여 사용할 수 있으며, 체크를 해제 할 경우 admin 계정이 사용자를 추가해 주어야 합니다.

일반적인 프로젝트에서는 가입을 차단해 두고 배포 관리자 또는 아키텍처가 관리하는 방식으로 운영합니다.

그럼 먼저 admin 권한을 이용해 사용자를 추가해 보도록 하겠습니다.

위와 같이 Jenkins 메인 화면 → Jenkins 관리 → Manage Users로 이동합니다.

설치 시 생성한 admin 계정이 나타나며, 왼쪽 메뉴 항목 중 사용자 생성을 선택합니다.

developer & operator 계정을 위와 같이 각각 생성합니다.

위와 같이 admin & developer & operator 계정이 생성된 것을 볼 수 있습니다. 각각의 설정 정보는 사용자 오른쪽 톱니바퀴 모양의 설정 버튼을 클릭하여 언제든지 변경할 수 있습니다.

다음으로 직접 사용자가 추가하는 가입하는 방식입니다.

위와 같이 사용자의 가입 허용이 해제되어 있을 경우에는 가입 버튼이 비활성화 되어 있습니다.

사용자의 가입 허용을 체크하고 다시한번 로그인 화면으로 돌아가면, 아래와 같이 Welcome to Jenkins! 하단에 계정 생성이라는 버튼이 생성된 것을 볼 수 있습니다.

계정 생성을 선택하고, Username, Full name, Email, Password를 각각 입력하고 Create Account를 클릭합니다.

생성된 사용자를 아래와 같이 확인해 보도록 하겠습니다.

현재 총 admin 계정을 포함한 4개의 계정이 생성되어 있습니다.

다음으로 추가한 사용자를 삭제해 보도록 하겠습니다.

삭제하는 방법은 매우 간단합니다.

사용자 화면의 우측 톱니바퀴 설정 하단에 빨간색 원을 클릭하면, 삭제할 수 있습니다.

위와 같이 삭제 여부를 다시한번 확인하고 YES를 클릭하면 사용자를 삭제할 수 있습니다.

사용자 설정 정보는 앞서 이야기한데로 톱니바퀴 모양의 설정 버튼을 클릭하여 변경할 수 있습니다.

2) 권한 관리 방안

다음으로 살펴볼 내용은 권한 관리 방안입니다.

사용자를 생성하고 권한 설정을 하지 않을 경우 제공되는 권한의 범위는 Super User와 동일합니다. 아래와 같이 생성한 developer 계정으로 접속해 보면 Jenkins 관리 설정에 접근할 수 있다는 것을 알 수 있습니다.

 

이렇게 되면 Jenkins 관리 영역에 누구나 접근하게 되어 보안, 관리, 히스토리 등 다양한 문제를 발생 시킬 수 있습니다.

별도로 문제에 대해 설명하지 않아도 권한 관리에 대한 이슈는 충분히 설명이 될 것이라 생각합니다.

권한 설정은 Jenkins 메인 화면 → Jenkins 관리 → Configure Global Secutiry에서 진행할 수 있습니다.

Access Control → Authorization → Matrix-based security에서 각 기능 별 권한을 부여할 수 있습니다.

다음은 각 메트릭에 대한 설명입니다.

항목 권한 의미

Overall

Administer 시스템의 전역 설정을 변경할 수 있다. OS 에서 허용된 범위안에서 전체 시스템 엑세스드의 매우 민감한 설정을 수행할 수 있다.
Read 젠킨스의 모든 페이지를 볼 수 있다.
RunScripts 그루비 콘솔이나 그루비 CLI 명령을 통해 그루비 스크립트를 실행할 수 있다.
UploadPlugins 특정 플러그인을 업로드 할 수 있다.
ConfigureUpdateCenter 업데이트 사이트와 프록시 설정을 할 수 있다.
Slave Configure 기존 슬레이브 설정 가능
Delete 기존 슬레이브 삭제
Create 신규 슬레이브 생성
Disconnect 슬레이브 연결을 끊거나 슬레이브를 임시로 오프라인으로 표시.
Connect 슬레이브와 연결하거나 슬레이브를 온라인으로 표시;
Job Create 새로운 작업 생성
Delete 기존 작업 삭제.
Configure 기존 작업의 설정 갱신
Read 프로젝트 설정에 읽기 전용 권한 부여
Discover 익명 사용자가 작업을 볼 권한이 없으면 에러 메시지 표시를 하지 않고 로그인 폼으로 전환 시킴
Build 새로운 빌드 시작.
Workspace Workspace
Cancel 실행중인 빌드 취소
Run Delete 빌드 내역에서 특정 빌드 삭제
Update 빌드의 설명과 기타 프로퍼티 수정(빌드 실패 사유등)
View Create 새로운 뷰 생성
Delete 기존 뷰 삭제
Configure 기존 뷰 설정 갱신
Read 기존 뷰 보기
SCM Tag 특정 빌드와 관련된 소스 관리 시스템에 태깅을 생성.

기본으로 추가되어 있는 Anonymous Users & Authenticated Users 이외에 앞서 추가한 User를 Add user or Group 버튼으로 추가합니다.

위와 같이 권한을 구분하여 부여하게 되면 각 사용자 별 접근 가능한 메뉴 항목을 제한 할 수 있습니다.

먼저 developer로 로그인을 해보도록 하겠습니다.

developer 로그인 시 위와 같이 Project를 생성할 수 있는 새로운 Item 메뉴와 jenkins 관리 항목이 표시되지 않는 것을 볼 수 있습니다.

메인 화면에 WildFly_Deploy_Job이라는 Project가 표시되어 접근이 가능하므로 Build 권한을 포함하며, 개발자가 수행해야 할 부분에 대한 Role을 부여하였습니다.

위와 같이 개발자 권한으로 Build를 수행할 수 있습니다.

operator는 빌드 권한이 부여되지 않은 단순히 read 권한만을 부여해 보았습니다.

위와 같이 로그인 시 Project 항목이 표시되지 않으며, 단순히 read 할 수 있는 설정항목만을 표시하고 있습니다.

다음으로 살펴볼 사항은 프로젝트 별 접근 권한 관리입니다.

Jenkins 메인 화면 → Jenkins 관리 → Configure Global Secutiry의 Access Control → Authorization → Matrix-based security 항목 대신 Project-based Matrix Authorization Strategy 항목을 선택합니다.

공통 설정은 위와 같이 부여합니다.

현재 생성되어 있는 Project는 JEUS, WildFly Deploy Project 2개이며 각각 사용자 별로 접근 권한을 제한해 보도록 하겠습니다.

특정 프로젝트에서 해당 프로젝트는 특정 유저만 접근하도록 권한을 제한하고 싶을 경우 다음과 같이 설정합니다.

먼저 JEUS_Deploy_Job에 대한 설정입니다.

해당 설정은 개발자만 접근이 가능하고 개발자2는 접근이 불가능하도록 권한을 부여하는 방법입니다.

Project 구성 설정의 General 항목에 Enable project-based security 항목을 체크합니다.

Inheritance Strategy를 앞선 Global 설정항목에 부여한 권한이 상속되지 않도록 Do not inherit permission grants from other ACLs를 선택합니다.

반대로 WildFly_Deploy_Job에 대한 설정은 이와 반대로 권한을 부여합니다.

설정이 완료되었으면, 각각의 계정으로 로그인을 수행해 보겠습니다.

위 사진과 같이 개발자가 접근한 왼쪽의 경우 JEUS만, 개발자2가 접근한 오른쪽의 경우 WildFly만 제어가 가능한 상태임을 확인할 수 있습니다.

이번 시간에는 Jenkins에서 고려해야 할 사용자 관리 및 권한 관리 방안에 대해 살펴보았습니다.

# 참조

권한부여는 Configure Global Security에서는 최소한의 권한 부여만 진행하고, 이후 각 Project Based로 권한 설정하는 것을 권고한다. 권한은 상속되어 Configure Global Security에서 부여된 권한은 Project Base로는 제거할 수 없다. 반대로 부여되지 않은 권한은 Project Based에서 추가할 수 있다.

728x90
반응형