Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

seoyyyy-dev

젠킨스 CI/CD - 젠킨스의 보안 관리 본문

개발 독서 스터디/젠킨스로 배우는 CIㆍCD 파이프라인 구축

젠킨스 CI/CD - 젠킨스의 보안 관리

seoyyyy 2025. 5. 25. 21:31

 

젠킨스의 인증(Authentication)권한 부여(Autorization) 기능을 구성하는 데 필요한 다양한 보안 관련 설정을 알아보자

 

🍟 젠킨스 전역 보안 구성

 

젠킨스 전역 보안을 구성하기 위해 대시보드 > Jenkins 관리 > Security로 이동한다. 

 

그러면 다음과 같은 화면이 나타난다.

 

▶️ Disable “Keep me signed in” ("로그인 상태 유지" 비활성화)

   : 이 옵션을 체크 해제하여 저장하면 로그인 화면에서 keep me sign in (로그인 상태 유지) 라는 체크박스가 표시되며 이를 선택하고 로그인을 하면 로그아웃을 하지 않는 한 젠킨스에 접속할 때 로그인 요청을 하지 않고 유지된다. 기본은 체크 해제된 상태로 체크하여 저장하면 로그인 화면에서 keep me signed in 체크박스가 더이상 표시되지 않는다.

 

▶️ Security Realm(보안영역) 섹션

 ✔️Delegate to servlet container

    - 서블릿 컨테이너에 위임

    - 젠킨스는 제티(jetty)나 톰캣등과 같은 자바 서블릿 컨테이너에서 실행되는 자동화 서버이다. 만일 이들 컨테이너에 구성된 사용자 젠킨스를 실행하고 싶은 경우 이 옵션을 선택한다.

✔️ Jenkins' own user database

    - 서드파티 제품을 이용하지 않고, 젠킨스의 자체 데이터베이스에서 사용자를 생성하고 관리하려고 할 때 사용하는 옵션이다. 

    - 새로운 사용자를 생성하는 방법은 이전 "젠킨스 CI/CD - 젠킨스 구성" 포스팅에서 작성해두었다. 

    - 해당 옵션 선택 시  Allow users to sign up (사용자의 가입 허용) 체크박스가 나타나는데 기본 값으로는 체크 해제 된 상태이다. 이 옵션을 선택하면 로그인 화면에서 or register 링크를 클릭해 계정을 생성할 수 있게 된다. 

하지만 이 옵션은 권장하지 않는다. 이 옵션 선택 시 젠킨스 서버 도메인의 모든 사용자가 계정을 만들어 인증 사용자가 될 수 있다. 

 

✔️ None

   - 무인증

   - 어떤 인증도 요청하지 않고 익명 사용자로 간주된다.

   - 이 옵션을 설정하고 젠킨스에 접속을 시도하면 젠킨스 화면에 다음과 같은 오류 페이지가 나타난다.

 

이 상황에 서버 로그를 보면 다음과 같다고 한다. 

anonymous is missing the Overall/Read permission
(익명 사용자는 전체/읽기 권한이 없습니다.)

 

하지만 참고로 나는 이 에러페이지가 나타나고서는 어디에도 이동할 수 없었고, 파일 경로에서도 서버 로그를 찾을 수 없었으므로 책을 따라 다음과 같이 작업을 해주었다.

(원래는 아래와 같은 경로에서 확인이 가능해보인다. 나중에 정상적일 때 캡쳐한 화면이라 해당 에러 메세지는 확인할 수 없었다.)

 

우선 ${jenkins_home}/config.xml 파일로 이동한다. 

 

그리고 파일을 열어 denyAnonymousReadAccess 태그의 값을 true에서 false로 변경한다. 

 

 

그리고 서버를 재시작하여 젠킨스 주소로 접속하면 인증을 거치지 않고도 젠킨스 대시보드로 직접 이동할 수 있다.

 

그러나 읽기 전용으로만 접속을 할 수 있다. 

만일 실습을 위해 None 으로 설정하고 이전의 상태로 되돌리고 싶다면 config.xml 파일의 useSecurity 태그를 false 설정한 후 서비스를 재시작한다.

 

재시작 후 젠킨스 URL로 접속하여 Dashboard > Jenkins 관리 > Security 화면으로 이동한 후 Security Realm을 원래 상태로 되돌려주고 저장한다. 

 

 

▶️ Autorization(권한부여) 섹션

   

이번엔 권한부여 섹션에 대해 알아보자

✔️ Anyone can do anything

   - 누구나 모든 기능 제어 가능

   - 권장하지 않음

   - 이 옵션을 선택 시 로그인을 하지 않은 익명의 사용자를 포함하여 모든 사람이 젠킨스의 모든 기능을 제어할 수 있다.

   - 이 설정은 기업 내부의 신뢰할 수 있는 인트라넷 환경에서 젠킨스를 운영할 때 사용하는 옵션으로 사용자가 매번 젠킨스에 로그인할 필요가 없어서 빠르게 설정을 변경할 수 있다. 

✔️ Legacy mode

   - 레거시 모드

   - 권장하지 않음

   - 이 모드에서 관리자 권한이 있는 사용자는 시스템에 대한 모든 권한을 갖는다.

   - 일반 사용자 및 익명 사용자는 읽기 전용 권한만 갖는다.

✔️ Logged-in users can do anything

   - 로그인한 사용자는 모든 기능 제어 가능

   - 익명 사용자를 제외한 사용자들은 반드시 로그인을 해야 한다.

   - 로그인을 하면 시스템에 대한 모든 권한을 갖게 된다. 

   - 이 옵션 선택 시 Allow anonymous read access(익명 사용자에게 읽기 권한 부여) 체크박스가 나타난다.

 

이 체크 박스를 선택하면 로그인을 하지 않은 사용자(익명 사용자)는 읽기 전용 권한을 가지며 체크 해제 시 익명 사용자는 젠킨스에 접근할 수 없으며 다음과 같은 화면을 보게 된다.

 

 

▶️ Agents 섹션

다음은 에이전트 섹션의 옵션이다.

✔️TCP port for inbound agents

   - 인바운드 에이전트용 TCP 포트 번호

   - 이 옵션은 분산 빌드(distributed build)와 관련된 기능으로 분산 빌드 시 별도의 젠킨스 에이전트(노드)를 구성해야 하는데, 이 옵션에서 지정한 포트 번호를 사용해 젠킨스 에이전트와 통신한다.

 

  - Fixed: 고정 옵션으로 다른 프로세스에서 사용하지 않은 포트 번호 중 사용 가능한 포트 번호 하나를 사용자가 직접 입력해야 한다.

  - Random: 임의 옵션으로 다른 프로세스에서 사용하지 않은 포트 번호가 임의로 선택된다.

  - Disable: 사용하지 않음

 

일반적으로는 Random 옵션보다는 Fixed 옵션을 많이 사용한다. 특정 포트로 들어오는 통신 요청을 허용하려면 시스템 방화벽 설정의 인바운드 규칙에 포트 번호를 직접 입력해야하기 때문이다.

 

▶️ CSRF Protection 섹션

다음은 사이트 간 요청 위조(CSRF, Cross-Site Request Forgery) 공격 보호 기능을 선택하는 섹션이다.

이 기능을 선택하면 젠킨스는 사용자 정보를 기반으로 토큰을 생성해 사용자에게 전송하고, 사용자가 양식을 제출하거나 빌드 구성을 변경하는 작업이 발생하는 경우 사용자는 이 토큰(젠킨스에서는 Crumb 이라고 불림)을 제공해야 한다. 이 토큰엔 토큰을 생성한 특정 사용자의 식별 정보가 포함되어 있어 다른 사용자의 토큰을 사용하면 요청한 작업이 거부된다.

 

🚲 크럼 해시값의 구조

● 사용자 이름

웹 세션 아이디

사용자 컴퓨터 IP 주소

젠킨스 인스턴스의 고유한 솔트(salt) 값

 


▶️ API Token 섹션

젠킨스에서 제공하는 REST API나 CLI 명령, 다른 애플리케이션 등을 통해 젠킨스에 접속할 때, 접근을 제어하는 구성과 관련되어 있다.

젠킨스는 새로운 빌드를 시작하거나 기존 작업의 생성/복사 등의 기능을 수행하는 다양한 CLI 명령과 REST API 엔드포인트를 제공한다.

 

✔️ Generate a legacy API token for each newly created user

   - 신규 생성 사용자별 레거시 API 토큰

   - 모든 사용자별로 API토큰을 생성해 젠킨스 데이터베이스나 LDAP에 저장되며 REST API로 젠킨스 서버에 접속할 때마다 이 토큰을 사용해 사용자를 인증한다.

   - 버전 2.129 이후로 더이상 권장하지 않는다.(Not recommend)

✔️ Allow users to manually create a legacy API token

   - 사용자가 수동으로 레거시 API 토큰 생성 허용

   - 버전 2.129 이후로 더이상 권장하지 않는다.(Not recommend)

 

 ▶️SSH Server (SSH 서버)

   젠킨스에는 셸 프로그램으로 젠킨스에 접속할 수 있는 내장 명령이 있는데 젠킨스 CLI 명령을 실행하여 작업 생성, 빌드 시작 등의 기능을 수행할 수 있다. 이 때 젠킨스는 SSH 서버의 역할을 하며, 다른프로그램이 젠킨스에 CLI 접속을 할 수 있게 허용한다.

 

   Agents 설정과 마찬가지로 Fixed 옵션과 Random 옵션이 존재하는 것 같으나 내 화면에서는 해당 섹션이 존재하지 않는다.