seoyyyy-dev
젠킨스 CI/CD - 젠킨스의 보안 관리 본문
젠킨스의 인증(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 옵션이 존재하는 것 같으나 내 화면에서는 해당 섹션이 존재하지 않는다.
'개발 독서 스터디 > 젠킨스로 배우는 CIㆍCD 파이프라인 구축' 카테고리의 다른 글
젠킨스 CI/CD - 사용자관리 (1) | 2025.06.16 |
---|---|
젠킨스 CI/CD - 자격 증명 관리 (0) | 2025.05.25 |
젠킨스 CI/CD - 전역 도구 구성의 이해 (1) | 2025.05.25 |
젠킨스 CI/CD - 젠킨스 플러그인 관리 (3) | 2025.05.11 |
젠킨스 CI/CD - 젠킨스 구성 (1) | 2025.05.11 |