Jenkins 보안 및 권한 관리
1️⃣2️⃣ Jenkins 보안 및 권한 관리
1️⃣ Jenkins의 보안 설정 (Manage Jenkins → Configure Global Security)
Jenkins는 강력한 보안 설정을 제공하여 서버와 데이터의 안전을 보장합니다. 기본적으로 Configure Global Security 옵션을 통해 다양한 보안 기능을 설정할 수 있습니다.
1.1. 보안 설정 메뉴 접근
- Jenkins 대시보드에서 Manage Jenkins → Configure Global Security를 클릭합니다.
- 여기에서 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 연동 설정
- Manage Jenkins → Configure Global Security로 이동하여 Security Realm을 LDAP로 선택합니다.
- 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 플러그인 설치
- Manage Jenkins → Manage Plugins → Available 탭에서 Role-based Authorization Strategy 플러그인을 설치합니다.
- 설치 후, Manage Jenkins → Configure Global Security에서 Authorization을 Role-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에서 비밀 데이터를 가져올 수 있습니다. 이를 통해 외부 시스템에서 안전하게 비밀 데이터를 관리할 수 있습니다.
- Vault Plugin 설치 후, Vault 서버에 접근할 수 있는 설정을 진행합니다.
- Jenkins 파이프라인에서 Vault를 통해 비밀 정보를 사용할 수 있습니다.
vaultSecret = vault(
path: 'secret/myapp',
secretValues: [[path: 'username', target: 'MY_USERNAME'], [path: 'password', target: 'MY_PASSWORD']]
)
5️⃣ Jenkins Agent 보안 (SSH, TLS)
Jenkins에서는 마스터와 에이전트 간의 안전한 통신을 위해 SSH와 TLS를 사용할 수 있습니다.
5.1. SSH를 통한 Agent 연결
Jenkins의 마스터와 에이전트는 SSH를 통해 연결할 수 있습니다. 이를 통해 에이전트 노드와 안전하게 통신할 수 있습니다.
- Manage Jenkins → Manage Nodes and Clouds → New Node에서 에이전트 유형을 SSH로 선택합니다.
- 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의 보안 로그를 외부 파일로 기록할 수 있습니다.
- Manage Jenkins → Manage Plugins에서 Audit Trail Plugin을 설치합니다.
- 설치 후, Manage Jenkins → System Log에서 로그를 설정하고 기록할 경로를 지정할 수 있습니다.
6.2. 보안 로그 분석
로그에는 로그인 시도, 권한 변경, 작업 실행 등 중요한 정보가 기록됩니다. 이를 통해 누가 언제 어떤 작업을 했는지 추적할 수 있습니다.
tail -f /var/log/jenkins/audit.log
이러한 Jenkins의 보안 및 권한 관리 기능을 잘 활용하면, 보다 안전하고 효율적인 Jenkins 환경을 구축할 수 있습니다.