Jenkins 보안 및 권한 관리

Jenkins 보안 및 권한 관리

1️⃣2️⃣ Jenkins 보안 및 권한 관리

1️⃣ Jenkins의 보안 설정 (Manage Jenkins → Configure Global Security)

Jenkins는 강력한 보안 설정을 제공하여 서버와 데이터의 안전을 보장합니다. 기본적으로 Configure Global Security 옵션을 통해 다양한 보안 기능을 설정할 수 있습니다.

1.1. 보안 설정 메뉴 접근

  1. Jenkins 대시보드에서 Manage JenkinsConfigure Global Security를 클릭합니다.
  2. 여기에서 Jenkins의 보안 관련 다양한 설정을 할 수 있습니다.

1.2. 설정할 수 있는 보안 항목들

  • Security Realm: 사용자 인증 방식 설정 (기본적으로 Jenkins 내장 사용자나 LDAP, Active Directory 등을 사용할 수 있습니다).
  • Authorization: 사용자의 권한을 관리하는 방식 설정 (Role-Based Access Control(RBAC) 또는 Matrix-based security).
  • Agent/Slave → Master Security: 마스터와 에이전트 간의 보안 연결 설정.
  • CSRF Protection: Cross-Site Request Forgery 방지.

2️⃣ 사용자 인증 및 LDAP 연동

Jenkins는 LDAP을 통한 사용자 인증을 지원합니다. 이를 통해 조직의 중앙 인증 시스템을 사용하여 Jenkins에 로그인할 수 있습니다.

2.1. LDAP 연동 설정

  1. Manage JenkinsConfigure Global Security로 이동하여 Security RealmLDAP로 선택합니다.
  2. LDAP 서버의 주소와 필요한 인증 정보를 입력합니다.
ldap:
  server: ldap://your-ldap-server:389
  rootDN: dc=yourcompany,dc=com
  userSearchBase: ou=users,dc=yourcompany,dc=com
  groupSearchBase: ou=groups,dc=yourcompany,dc=com
  managerDN: cn=admin,dc=yourcompany,dc=com
  managerPassword: yourpassword

2.2. LDAP 그룹과 권한 연동

LDAP 그룹과 연동하여 각 사용자에 맞는 권한을 자동으로 부여할 수 있습니다. 예를 들어, Jenkins 관리자는 LDAP 그룹에서 admins로 설정된 사용자에게만 관리 권한을 부여할 수 있습니다.

3️⃣ Role-Based Access Control (RBAC) 설정

RBAC(Role-Based Access Control)은 사용자가 역할에 따라 특정 작업을 수행할 수 있도록 제한하는 방식입니다. Jenkins에서는 이를 Role Strategy Plugin을 사용하여 설정할 수 있습니다.

3.1. RBAC 플러그인 설치

  1. Manage JenkinsManage PluginsAvailable 탭에서 Role-based Authorization Strategy 플러그인을 설치합니다.
  2. 설치 후, Manage JenkinsConfigure Global Security에서 AuthorizationRole-Based Strategy로 설정합니다.

3.2. 역할 설정

  • Role Management 메뉴에서 다양한 역할을 설정하고, 각 역할에 대한 권한을 지정합니다.
  • 예를 들어, admin 역할을 부여한 사용자는 모든 설정을 변경할 수 있으며, developer 역할을 가진 사용자는 빌드만 실행할 수 있습니다.
role:
  admin:
    - Manage Jenkins
    - Configure System
  developer:
    - Job: Build
    - Job: View

4️⃣ Secrets 및 Credentials 관리 (withCredentials, Vault)

Jenkins에서는 빌드 및 배포 과정에서 사용하는 비밀번호나 API 키와 같은 민감한 정보를 안전하게 관리할 수 있습니다. Credentials Plugin을 사용하여 이를 관리합니다.

4.1. withCredentials 사용

withCredentials는 Jenkins Pipeline에서 비밀번호와 같은 비밀 데이터를 안전하게 사용할 수 있게 해줍니다.

pipeline {
    agent any
    environment {
        MY_SECRET = credentials('my-secret-id')  // Jenkins Credentials에서 설정한 ID
    }
    stages {
        stage('Build') {
            steps {
                script {
                    sh "echo ${MY_SECRET}"
                }
            }
        }
    }
}

4.2. Vault 연동

Vault Plugin을 사용하여 HashiCorp Vault에서 비밀 데이터를 가져올 수 있습니다. 이를 통해 외부 시스템에서 안전하게 비밀 데이터를 관리할 수 있습니다.

  1. Vault Plugin 설치 후, Vault 서버에 접근할 수 있는 설정을 진행합니다.
  2. Jenkins 파이프라인에서 Vault를 통해 비밀 정보를 사용할 수 있습니다.
vaultSecret = vault(
    path: 'secret/myapp',
    secretValues: [[path: 'username', target: 'MY_USERNAME'], [path: 'password', target: 'MY_PASSWORD']]
)

5️⃣ Jenkins Agent 보안 (SSH, TLS)

Jenkins에서는 마스터와 에이전트 간의 안전한 통신을 위해 SSHTLS를 사용할 수 있습니다.

5.1. SSH를 통한 Agent 연결

Jenkins의 마스터와 에이전트는 SSH를 통해 연결할 수 있습니다. 이를 통해 에이전트 노드와 안전하게 통신할 수 있습니다.

  1. Manage JenkinsManage Nodes and CloudsNew Node에서 에이전트 유형을 SSH로 선택합니다.
  2. SSH 키를 설정하여 인증을 진행합니다.

5.2. TLS 설정

Jenkins는 TLS를 사용하여 마스터와 에이전트 간의 안전한 연결을 할 수 있습니다. 이 설정은 Configure Global Security에서 TCP port for inbound agents 옵션을 SSL/TLS로 설정하여 활성화할 수 있습니다.

6️⃣ Audit Log 및 보안 로그 분석

Jenkins에서 발생하는 모든 보안 관련 이벤트는 Audit Log로 기록됩니다. 이를 통해 보안 사고나 문제 발생 시 분석할 수 있습니다.

6.1. Audit Plugin 설치

Audit Trail Plugin을 설치하면 Jenkins의 보안 로그를 외부 파일로 기록할 수 있습니다.

  1. Manage JenkinsManage Plugins에서 Audit Trail Plugin을 설치합니다.
  2. 설치 후, Manage JenkinsSystem Log에서 로그를 설정하고 기록할 경로를 지정할 수 있습니다.

6.2. 보안 로그 분석

로그에는 로그인 시도, 권한 변경, 작업 실행 등 중요한 정보가 기록됩니다. 이를 통해 누가 언제 어떤 작업을 했는지 추적할 수 있습니다.

tail -f /var/log/jenkins/audit.log

이러한 Jenkins의 보안 및 권한 관리 기능을 잘 활용하면, 보다 안전하고 효율적인 Jenkins 환경을 구축할 수 있습니다.

RSS Feed