카테고리 없음

Jenkins에서 인증서 사용하는 방법

자바바라 2025. 2. 10. 07:26

Jenkins에서 인증서 사용하는 방법 (명령어 중심)

Jenkins에서 인증서를 사용하는 방법은 크게 두 가지 시나리오로 나눌 수 있습니다.
Jenkins 자체의 HTTPS 설정 (웹 인터페이스 보안): Jenkins 웹 인터페이스에 접속할 때 HTTPS를 사용하도록 설정합니다.

빌드 파이프라인 내에서 인증서 사용 (Harbor, Kubernetes 등): 빌드 파이프라인에서 외부 서비스 (Harbor, Kubernetes 등)에 접근할 때 인증서를 사용합니다.

각 시나리오별 설정 방법을 설명하겠습니다.

1. Jenkins 자체의 HTTPS 설정:

이 설정은 Jenkins 웹 인터페이스에 HTTPS를 적용하여 보안을 강화하는 방법입니다.

사전 준비:
도메인 이름 (예: jenkins.example.com)
SSL/TLS 인증서 및 개인 키 (Let's Encrypt 등에서 발급)
인증서 파일 (예: jenkins.crt)
개인 키 파일 (예: jenkins.key)

명령어 (Ubuntu 기준):
1. 인증서 및 개인 키 파일 Jenkins 서버에 복사:

sudo mkdir /var/lib/jenkins/cert
sudo cp jenkins.crt /var/lib/jenkins/cert/
sudo cp jenkins.key /var/lib/jenkins/cert/
sudo chown -R jenkins:jenkins /var/lib/jenkins/cert
sudo chmod 400 /var/lib/jenkins/cert/jenkins.key




2. Jenkins 설정 파일 수정 (/etc/default/jenkins 또는 /etc/sysconfig/jenkins):

# 기존 HTTP 포트 설정 주석 처리
#HTTP_PORT=8080

# HTTPS 포트 및 인증서 관련 설정 추가
HTTPS_PORT=8443
HTTPS_KEYSTORE=/var/lib/jenkins/cert/jenkins.pfx # 또는 jenkins.jks (PKCS12 또는 JKS 형식)
HTTPS_KEYSTORE_PASSWORD=your_keystore_password
HTTPS_CERTIFICATE=/var/lib/jenkins/cert/jenkins.crt # PEM 형식일 경우
HTTPS_PRIVATE_KEY=/var/lib/jenkins/cert/jenkins.key # PEM 형식일 경우




PKCS12 또는 JKS 형식을 사용하는 경우 :
OpenSSL을 사용하여 PEM 형식의 인증서와 키를 PKCS12 형식으로 변환:

openssl pkcs12 -export -out jenkins.pfx -inkey jenkins.key -in jenkins.crt -certfile jenkins.crt



keytool을 사용하여 PKCS12를 JKS 형식으로 변환

keytool -importkeystore -srckeystore jenkins.pfx -srcstoretype pkcs12 -destkeystore jenkins.jks -deststoretype JKS




3. Jenkins 재시작:

sudo systemctl restart jenkins



4. 방화벽 설정 (필요한 경우):

sudo ufw allow 8443/tcp
sudo ufw reload




2. 빌드 파이프라인 내에서 인증서 사용 (Harbor, Kubernetes 등):

이 설정은 빌드 파이프라인에서 외부 서비스에 안전하게 접근하기 위해 인증서를 사용하는 방법입니다.

시나리오 1: Harbor 인증서:

명령어 (Jenkinsfile):

pipeline {
agent any
environment {
HARBOR_USERNAME = credentials('harbor-username')
HARBOR_PASSWORD = credentials('harbor-password')
HARBOR_CERT = credentials('harbor-certificate') // Harbor CA 인증서 Credential ID
}
stages {
stage('Login to Harbor') {
steps {
withCredentials([
usernamePassword(credentialsId: 'harbor-username', passwordVariable: 'HARBOR_PASSWORD', usernameVariable: 'HARBOR_USERNAME'),
file(credentialsId: 'harbor-certificate', variable: 'HARBOR_CERT_FILE')
]) {
sh "docker login -u \"$HARBOR_USERNAME\" -p \"$HARBOR_PASSWORD\" --ca-cert $HARBOR_CERT_FILE harbor.example.com" // CA 인증서 사용
}
}
}
}
}




Credentials 설정:
Jenkins -> Manage Jenkins -> Credentials -> System -> Global credentials (unrestricted) -> Add Credentials
Kind: Secret file
File: Harbor CA 인증서 파일 (예: ca.crt) 업로드
ID: harbor-certificate (Jenkinsfile에서 사용할 ID)
Description: Harbor CA Certificate

시나리오 2: Kubernetes 인증서 (kubectl):
명령어 (Jenkinsfile):

pipeline {
  agent any
  environment {
KUBE_CONFIG = credentials('k8s-kubeconfig') // Kubernetes 설정 파일 Credential
  }
  stages {
 stage('Deploy to K8s') {
  steps{
script {
sh """
export KUBECONFIG=${KUBE_CONFIG}
kubectl apply -f deployment.yaml
"""
}
  }
}
  }
}




Credentials 설정:
Jenkins -> Manage Jenkins -> Credentials -> System -> Global credentials (unrestricted) -> Add Credentials
Kind: Secret file
File: Kubernetes 설정 파일 (~/.kube/config 또는 유사한 파일) 업로드
ID: k8s-kubeconfig (Jenkinsfile에서 사용할 ID)
Description: Kubernetes Config File
또는: Kind: Kubernetes configuration (kubeconfig) 를 사용하고, Enter directly 에 kubeconfig 내용을 붙여넣을 수 있음.

핵심:

Credentials: Jenkins Credentials 기능을 사용하여 인증서 파일, 비밀번호 등을 안전하게 관리합니다.
withCredentials: withCredentials 블록을 사용하여 Credentials에 저장된 정보를 Jenkinsfile에서 변수로 사용할 수 있습니다.
file: file Credentials 바인딩을 사용하여 인증서 파일을 Jenkinsfile에서 사용할 수 있습니다.
usernamePassword: usernamePassword Credentials 바인딩을 사용하여 사용자 이름과 비밀번호를 Jenkinsfile에서 사용할 수 있습니다.
명령어 옵션: 각 도구 (docker, kubectl 등)의 명령어 옵션을 사용하여 인증서 파일을 지정합니다. (예: docker login --ca-cert, kubectl config)

참고 사항:

인증서 형식 (PEM, PKCS12, JKS 등)에 따라 설정 방법이 다를 수 있습니다.
Jenkins 버전에 따라 설정 방법이 약간 다를 수 있습니다.
보안을 위해 인증서 및 개인 키 파일을 안전하게 관리하고, Jenkins Credentials를 사용하여 비밀 정보를 보호해야 합니다.
HTTPS_PROXY 와 같은 환경 변수 설정도 필요 할 수 있음.

이러한 방법을 통해 Jenkins 자체의 보안을 강화하고, 빌드 파이프라인에서 외부 서비스에 안전하게 접근할 수 있습니다.