본문으로 건너뛰기

9. Security

2025년 1월 7일약 7 분cicdjenkins

9. Security

9.1 Securing your deployment with users

사용자별 배포수행을 위한 사용자 설정을 설명합니다.

Enable security는 보안 설정 여부를 설정하는 항목으로 기본적으로는 비활성화되어있습니다. 체크하여 활성화하면 다양한 보안 옵션을 설정할 수 있는 항목이 표기 됩니다.

Security Realm 에서는 Jenkins에서 사용하는 사용자 관리 방식을 선택합니다.

Authorization 에서는 사용자 권한에 대한 설정을 정의합니다.

다음은 권한 매트릭스의 항목과 권한별 설명입니다.

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

CSRF Protection 항목에 있는 Prevent Cross Site Request Forgery exploits 항목은 페이지마다 nonce 또는 crumb 이라 불리우는 임시 값을 삽입하여 사이트 간 요청 위조 공격을 막을 수 있게 해줍니다. 사용방법은 위에서 REST API 에 대한 설명 시 crumb 값을 얻고, 사용하는 방법을 참고합니다.

9.2 Securing secret credentials and files

Jenkins에서 Pipeline을 설정하는 경우 일부 보안적인 값이 필요한 경우가 있습니다. 예를 들면 UsernamePassword 같은 값입니다. 앞서의 과정에서 Credentials를 생성하는 작업을 일부 수행해 보았습니다. 여기서는 생성된 인증 값을 Pipeline에 적용하는 방법을 설명합니다.

Pipeline 타입의 Item을 추가로 생성합니다. (e.g. 09-02.SecuringSecretCredentialsAndFiles) 설정은 다음과 같이 수행합니다.

  1. Pipeline 스크립트에 다음과 같이 입력 합니다.

    pipeline {
        agent any
        environment {
           SECRET=credentials('jenkins-secret-text')
        }
        stages {
            stage('Build') {
                steps {
                    echo "${env.SECRET}"
                }
            }
        }
    }
    
  2. 저장 후 Build Now를 클릭하여 빌드를 수행하면 실패하게 되고 Console Output에서 진행사항을 보면, Pipeline 스크립트에서 선언한 jenkins-secret-text때문에 에러가 발생한 것을 확인할 수 있습니다.

  3. 좌측 상단의 Jenkins버튼을 클릭하여 최상위 메뉴로 이동합니다.

  4. 좌측 메뉴의 Credentials를 클릭하고 (global) 도메인을 클릭합니다.

    1564534571013
    1564534571013
  5. 좌측에 Add Credentials를 클릭하여 새로운 항목을 추가합니다.

    • Kind : Secret text
    • Secret : 해당 Credential에 담을 값을 기입합니다. (e.g. This is credential text.)
    • ID : jenkins-secret-text
  6. 저장 후 다시 빌드를 수행하면 정상적으로 수행됩니다. 해당 값은 숨기기 위한 값이므로 Pipeline 스크립트에서 echo로 호출하더라도 ****이란 값으로 표기 됩니다.

이같은 방법은 Password같은 보안에 민감한 정보를 사용하기에 유용합니다.

9.3 Auditing your environment

Jenkins의 변화와 활동에 대한 감시를 위한 설정 방법을 설명합니다. Jenkins에 새로운 플러그인을 추가하고 설정합니다.

저장 후 빌드나 Job의 설정 변경등의 작업을 수행하면, audit.log.0으로 지정된 파일 경로에 생성됨을 확인 할 수 있습니다.

$ tail -f ./audit.log.0
Jul 31, 2019 10:47:32,727 AM job/02-02.Jobs/ #12 Started by user GyuSeok.Lee
Jul 31, 2019 10:47:42,738 AM /job/03-04.WebhookBuild Triggering/configSubmit by gyulee
Jul 31, 2019 10:48:09,001 AM /configSubmit by gyulee

9.4 Using forders to create security realms

다양한 프로젝트를 관리하는 경우 관리상, 빌드 프로젝트를 관리해야할 필요성이 발생합니다. Jenkins에서 Forder 아이템을 생성하여 관리 편의성과 보안요소를 추가할 수 있습니다.

우선 테스트를 위한 사용자를 추가합니다.

다음으로 Forder 타임의 Item을 추가합니다.

권한 설정을 하여 현재 Admin 권한의 사용자는 접근 가능하고 새로 생성한 tester는 접근불가하도록 설정합니다.

Jenkins의 인증 기능을 사용하여 보안적 요소를 구성할 수 있습니다. Audit 로그를 활용하여 사용자별 활동을 기록할 수도 있고 Folder를 활용하면 간단히 사용자/그룹에 프로젝트를 구분하여 사용할 수 있도록 구성할 수 있습니다.