본문 바로가기

* Twodragon/보안 강의 (Course)

🚀 클라우드 보안 과정 8기 8주차: CI/CD와 Kubernetes 보안 실전 가이드 - DevSecOps 파이프라인부터 클러스터 보안까지

안녕하세요, Twodragon입니다.

지난 7주차에서는 Docker & Kubernetes 보안 실전 가이드를 다루었습니다. 이번 클라우드 보안 과정 8기 8주차에서는 CI/CD와 Kubernetes 보안 실전 가이드를 통해 DevSecOps 파이프라인부터 클러스터 보안까지 실무 중심으로 다루고자 합니다.

특히 이번 주에는 CI/CD 파이프라인 보안과 Kubernetes 클러스터 보안을 통합하여, 실제 서비스 환경에 적용 가능한 보안 전략을 깊이 있게 다뤄보겠습니다.

본 과정은 온라인 미팅으로 진행되며, ‘20분 강의 + 5분 휴식’ 사이클로 멘티분들의 집중력을 최대로 유지하며 진행됩니다.


📅 8주차 타임테이블 (Agenda)

10:00 - 10:20 근황 토크 & 과제 피드백 한 주간의 보안 이슈 공유 및 Q&A
10:25 - 11:00 Kubernetes 네트워크 및 보안 Kubernetes 네트워크, Network Policies, RBAC, Pod Security Standards
11:10 - 11:40 지속적 통합, 지속적 제공/배포(CI/CD) 및 보안 CI/CD 파이프라인 보안, 코드 스캔, 이미지 스캔, Secret 관리
11:45 - 12:00 AI 활용을 통한 DevSecOps 강화 Cursor, Claude API, GitHub Copilot 활용 방법, AI 기반 보안 모니터링
12:05 - 12:10 실습 및 Q&A 보안 강화된 CI/CD 파이프라인 구축, Kubernetes 보안 환경 구성, AI 도구 통합

1. Kubernetes 네트워크 및 보안

Kubernetes 네트워크 보안은 클러스터 보안의 핵심입니다. 네트워크 정책부터 접근 제어까지 다층 방어 전략을 적용해야 합니다.

1.1 Kubernetes 네트워크 기본 개념

Kubernetes 핵심 오브젝트

 

Application 기능으로 이해하기-PVC/PV, Deploym... #7-3 - 일프로님의 블로그 - 인프런 | 커뮤니티

Application 기능으로 이해하기-PVC/PV, Deploym... #7-3 - 테스트 환경에서 통상 노드를 임시 스토리지 볼륨으로 많이 사용합니다.이때 hostPath를 쓰거나 PV의 local 속성을 쓰는데, 그러다보니 이 기능들이

www.inflearn.com

오브젝트 설명 역할
Namespace 리소스를 논리적으로 분리하는 가상 클러스터 리소스 그룹핑 및 격리
Deployment Pod의 배포, 업데이트, 스케일링을 관리 Pod 생명주기 관리
Service Pod에 대한 안정적인 네트워크 엔드포인트 제공 Pod 간 통신 및 로드 밸런싱
ConfigMap 설정 데이터를 저장하는 리소스 애플리케이션 설정 관리
Secret 민감한 데이터를 저장하는 리소스 비밀 정보 관리
PersistentVolumeClaim(PVC) 스토리지 요청 리소스 영구 스토리지 요청
PersistentVolume(PV) 클러스터의 스토리지 리소스 영구 스토리지 제공
HPA Horizontal Pod Autoscaler 자동 스케일링

참고: Kubernetes 기본 개념은 Kubernetes 공식 문서 및 Kubernetes GitHub 저장소를 참조하세요.

 

Kubernetes 네트워크 아키텍처

Kubernetes 네트워크 아키텍처: Pod 간 통신, Service를 통한 로드 밸런싱, Ingress를 통한 외부 접근 (AI 모니터링 통합)

구성 요소 설명 역할
Pod Network Pod 간 통신을 위한 네트워크 CNI 플러그인으로 구현
Service Pod에 대한 안정적인 엔드포인트 내부 로드 밸런싱
Ingress 외부에서 클러스터로의 HTTP/HTTPS 트래픽 관리 외부 접근 제어
Network Policy Pod 간 통신을 제어하는 정책 네트워크 보안 강화

1.2 Network Policies

네트워크 트래픽 제어

Network Policies를 통해 Pod 간 통신을 제어하여 방어 깊이를 강화합니다.

Network Policy를 통한 Pod 간 통신 제어: Ingress(들어오는 트래픽), Egress(나가는 트래픽), Default Deny(기본 거부)

정책 유형 설명 적용 예시
Ingress 들어오는 트래픽 제어 특정 네임스페이스에서만 접근 허용
Egress 나가는 트래픽 제어 특정 서비스로만 통신 허용
Default Deny 기본 거부 정책 명시적으로 허용된 트래픽만 통신

참고: Network Policy 설정 예시는 Kubernetes Network Policies 공식 문서 및 Kubernetes 예제 저장소를 참조하세요.

# Network Policy 예시 (간단한 버전)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: app-network-policy
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: myapp
  policyTypes:
  - Ingress
  - Egress

네트워크 세분화 전략

전략설명 적용 방법
기본 거부 정책 모든 트래픽 기본 차단 Default Deny Network Policy 적용
네임스페이스 격리 네임스페이스별 네트워크 격리 네임스페이스별 Network Policy
서비스 메시 통합 Istio, Linkerd 등 서비스 메시 활용 mTLS, 트래픽 제어

1.3 RBAC (Role-Based Access Control)

역할 기반 접근 제어

RBAC 최소 권한 원칙: 사용자/서비스 계정이 Role을 통해 필요한 리소스에만 접근

RBAC 구조: User/ServiceAccount → RoleBinding → Role → Resources

역할 권한 설명
Developer Deployment 생성/수정 애플리케이션 배포만 가능
Operator Pod 로그 조회, 리소스 모니터링 운영 작업만 가능
Security NetworkPolicy, PodSecurityPolicy 관리 보안 정책 관리

참고: RBAC 설정은 Kubernetes RBAC 공식 문서 및 Kubernetes 예제 저장소를 참조하세요.

# RBAC 예시
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: developer
  namespace: production
rules:
- apiGroups: ["apps"]
  resources: ["deployments"]
  verbs: ["get", "list", "create", "update", "patch"]
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: developer-binding
  namespace: production
subjects:
- kind: User
  name: developer-user
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: developer
  apiGroup: rbac.authorization.k8s.io

1.4 Pod Security Standards (PSS)

PSS 레벨별 정책

Pod Security Standards는 세 가지 보안 레벨을 제공합니다:

Pod Security Standards: Privileged(제한 없음) → Baseline(최소 보안) → Restricted(강력한 보안)

레벨설명 적용 예시
Privileged 제한 없음 시스템 Pod, 특수 워크로드
Baseline 최소 보안 요구사항 일반 애플리케이션
Restricted 강력한 보안 정책 민감한 워크로드

참고: Pod Security Standards 설정은 Kubernetes Pod Security Standards 문서를 참조하세요.

# Namespace에 PSS 적용
apiVersion: v1
kind: Namespace
metadata:
  name: production
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/warn: restricted
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
  namespace: production
spec:
  template:
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser: 1000
      containers:
      - name: app
        image: myapp:latest
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop: ["ALL"]
          readOnlyRootFilesystem: true

1.5 감사 로깅 및 모니터링

Kubernetes 감사 로깅

항목 설명 도구적용 방법
Audit 로깅 Kubernetes API 서버 감사 로그 활성화 Kubernetes Audit API 서버 설정
컨테이너 로그 수집 Pod 로그 중앙 수집 및 분석 ELK Stack, Loki 로그 수집 파이프라인
보안 이벤트 모니터링 보안 관련 이벤트 실시간 모니터링 Prometheus, Grafana 메트릭 수집 및 알림

참고: Kubernetes Audit Policy 설정은 Kubernetes Audit 문서 및 Kubernetes 예제 저장소를 참조하세요.

# Kubernetes Audit Policy 예시 (간단한 버전)
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata
  namespaces: ["production"]
  resources:
  - group: ""
    resources: ["secrets", "configmaps"]

2. CI/CD 파이프라인 보안

CI/CD 파이프라인은 개발부터 배포까지의 자동화된 흐름을 제공하지만, 보안이 미흡할 경우 심각한 위협이 될 수 있습니다.

2.1 CI/CD 기본 개념

CI/CD 파이프라인 구성

CI/CD 파이프라인 구성: 코드 저장소 → CI(빌드, 테스트, 스캔) → CD(배포, 모니터링)

단계 설명 주요 활동
CI (Continuous Integration) 지속적 통합 코드 빌드, 단위 테스트, 코드 스캔
CD (Continuous Delivery/Deployment) 지속적 제공/배포 자동 배포, 환경 구성, 모니터링

CI/CD 도구 비교

도구 설명 장점 단점
Jenkins 오픈소스 CI/CD 플랫폼 플러그인 생태계, 유연성 설정 복잡도 높음
GitHub Actions GitHub 통합 CI/CD GitHub과 완벽 통합, 간단한 설정 GitHub 종속적
GitLab CI GitLab 통합 CI/CD GitLab과 완벽 통합, 통합 도구 GitLab 종속적
ArgoCD Kubernetes 네이티브 CD 도구 Kubernetes 네이티브, GitOps Kubernetes 환경 필요

참고: CI/CD 도구 비교는 ArgoCD 공식 문서 및 Jenkins 공식 문서를 참조하세요.

2.2 코드 및 종속성 보안 스캔

정적 분석 (SAST)

도구 설명 주요 기능 CI/CD 통합
SonarQube 코드 품질 및 보안 분석 취약점 탐지, 코드 스멜 탐지 Jenkins, GitHub Actions
Checkmarx 상용 SAST 도구 포괄적인 보안 분석 다양한 CI/CD 통합
Semgrep 오픈소스 정적 분석 빠른 스캔, 커스텀 규칙 GitHub Actions, GitLab CI

동적 분석 (DAST)

도구 설명 주요 기능 적용 방법
OWASP ZAP 오픈소스 DAST 도구 웹 애플리케이션 보안 테스트 CI/CD 파이프라인 통합
Burp Suite 상용 DAST 도구 포괄적인 보안 테스트 수동/자동 스캔

소프트웨어 구성 분석 (SCA)

도구 설명 주요 기능 CI/CD 통합
Snyk 오픈소스 종속성 스캔 취약점 탐지, 수정 가이드 GitHub Actions, Jenkins
Dependabot GitHub 통합 종속성 관리 자동 업데이트, 보안 알림 GitHub 자동 통합
WhiteSource 상용 SCA 도구 포괄적인 공급망 보안 다양한 CI/CD 통합

참고: 코드 스캔 도구는 OWASP Top 10 및 OWASP CI/CD Security Cheat Sheet를 참조하세요.

# GitHub Actions에서 SonarQube 스캔 예시
name: Security Scan
on: [push, pull_request]
jobs:
  sonarqube:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run SonarQube Scan
        uses: sonarsource/sonarqube-scan-action@master
        env:
          SONAR_TOKEN: $
          SONAR_HOST_URL: $

2.3 컨테이너 이미지 보안 스캔

이미지 스캔 도구

도구 설명 CI/CD 통합 특징
Trivy 오픈소스 취약점 스캐너 GitHub Actions, GitLab CI 빠른 스캔, 다양한 포맷 지원
Snyk 상용/오픈소스 스캐너 GitHub, GitLab, Jenkins 상세한 취약점 정보, 수정 가이드
Clair Quay.io의 오픈소스 스캐너 Kubernetes Operator 컨테이너 레지스트리 통합

참고: 이미지 스캔 도구는 Trivy GitHub 저장소 및 Snyk 공식 문서를 참조하세요.

# GitHub Actions에서 Trivy 스캔 예시
name: Security Scan
on: [push, pull_request]
jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run Trivy vulnerability scanner
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: 'myapp:latest'
          format: 'table'
          exit-code: '1'
          severity: 'CRITICAL,HIGH'

2.4 비밀 정보 관리

Secret 관리 도구

도구 설명 장점 적용 방법
HashiCorp Vault 오픈소스 Secret 관리 중앙 관리, 동적 Secret 생성 CI/CD 파이프라인 통합
AWS Secrets Manager AWS 관리형 Secret 서비스 AWS 통합, 자동 로테이션 AWS 환경 통합
Azure Key Vault Azure 관리형 Secret 서비스 Azure 통합, 자동 로테이션 Azure 환경 통합
Sealed Secrets Kubernetes 네이티브 암호화 Secret Git에 안전하게 저장 가능 Kubernetes Operator

⚠️ 보안 주의사항

  • API 키, 비밀번호, 토큰은 절대 코드에 하드코딩하지 않습니다.
  • Secret 관리 도구를 사용하여 민감 정보를 안전하게 저장하고 접근을 제어합니다.
  • 정기적으로 Secret을 로테이션하여 보안을 강화합니다.

참고: Secret 관리 도구는 HashiCorp Vault 문서 및 AWS Secrets Manager 문서를 참조하세요.

# External Secrets Operator 예시 (AWS Secrets Manager)
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: app-secrets
spec:
  refreshInterval: 1h
  secretStoreRef:
    name: aws-secrets-manager
    kind: SecretStore
  target:
    name: app-secrets
    creationPolicy: Owner
  data:
    - secretKey: database-password
      remoteRef:
        key: production/database
        property: password

2.5 파이프라인 무결성 검증

서명된 커밋 및 태그

항목 설명 적용 방법
GPG 서명 Git 커밋 및 태그 서명 GPG 키 생성 및 Git 설정
서명 검증 CI/CD 파이프라인에서 서명 검증 자동화된 검증 스크립트

참고: GPG 서명 설정은 Git 공식 문서 - 서명 커밋을 참조하세요.

# GPG 키 생성 및 Git 설정 (간단한 예시)
gpg --gen-key
git config --global user.signingkey YOUR_GPG_KEY_ID
git config --global commit.gpgsign true

2.6 접근 제어 및 인증

역할 기반 접근 제어 (RBAC)

항목 설명 적용 방법
최소 권한 원칙 필요한 권한만 부여 CI/CD 도구의 RBAC 설정
다중 인증 (MFA) GitHub, GitLab 등에 MFA 적용 리포지토리 접근 시 MFA 필수
서비스 계정 관리 CI/CD 파이프라인용 서비스 계정 분리 최소 권한 서비스 계정 사용

3. AI 활용을 통한 DevSecOps 강화

AI 도구(Cursor, Claude, GitHub Copilot 등)를 활용하여 DevSecOps 워크플로우를 강화하는 방법을 다룹니다.

3.1 AI 코딩 어시스턴트 개요

주요 AI 도구 비교

도구 설명 주요 기능 DevSecOps 활용
Cursor AI 통합 IDE 코드 자동 완성, 리팩토링, 보안 검증 실시간 보안 취약점 탐지, 코드 리뷰
Claude (Anthropic) AI 어시스턴트 API 코드 분석, 보안 감사, 문서화 CI/CD 파이프라인 통합, 자동화된 보안 검증
GitHub Copilot GitHub 통합 AI 코딩 코드 제안, 테스트 생성 보안 모범 사례 제안, 취약점 예방
GitHub Actions AI GitHub Actions 통합 AI 자동화된 코드 리뷰, 보안 스캔 CI/CD 파이프라인 보안 강화

참고: AI 코딩 어시스턴트 비교는 AI Coding Assistants Comparison을 참조하세요.

AI 활용 DevSecOps 워크플로우

AI 활용 DevSecOps 워크플로우: Cursor로 코드 작성 → GitHub Copilot으로 보안 검증 → Claude API로 코드 리뷰 → GitHub Actions로 자동화된 보안 스캔 → Kubernetes 배포

3.2 Cursor를 활용한 보안 코딩

Cursor 보안 기능

기능 설명 활용 방법
실시간 보안 검증 코드 작성 중 보안 취약점 탐지 .cursorrules 파일에 보안 규칙 정의
자동 코드 리뷰 보안 모범 사례 제안 보안 관련 코드 작성 시 자동 제안
Secret 탐지 하드코딩된 Secret 자동 탐지 환경 변수 사용 제안

Cursor 설정 예시

// .cursorrules 파일 예시
{
  "security": {
    "noHardcodedSecrets": true,
    "requireEnvVars": true,
    "securityScanOnSave": true
  },
  "rules": [
    "Never hardcode API keys or passwords",
    "Always use environment variables for sensitive data",
    "Validate all user inputs",
    "Use parameterized queries for database access"
  ]
}

참고: Cursor 보안 설정은 Cursor 공식 문서 및 프로젝트 .cursorrules 파일을 참조하세요.

Cursor 활용 사례

시나리오 Cursor 활용 보안 효과
API 키 관리 환경 변수 사용 제안 Secret 노출 위험 제거
SQL Injection 방지 파라미터화된 쿼리 제안 SQL Injection 공격 방어
XSS 방지 입력 검증 코드 제안 XSS 공격 방어

3.3 Claude API를 활용한 자동화된 보안 검증

Claude API 통합 전략

단계 Claude API 활용 보안 효과
코드 리뷰 Pull Request 자동 리뷰 보안 취약점 조기 발견
보안 감사 정기적인 코드베이스 감사 지속적인 보안 모니터링
문서화 보안 정책 문서 자동 생성 보안 가이드라인 일관성 유지

GitHub Actions에서 Claude API 활용

# .github/workflows/claude-security-review.yml
name: Claude Security Review
on:
  pull_request:
    branches: [ main ]
jobs:
  claude-review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Run Claude Security Review
        uses: anthropic/claude-code-review@v1
        with:
          api-key: $
          focus: "security, best-practices, kubernetes-security"
          severity: "high,critical"
      
      - name: Post Review Comments
        uses: actions/github-script@v6
        with:
          script: |
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: '## 🔒 Claude Security Review\n\n' + steps.review.outputs.comments
            })

참고: Claude API 설정은 Anthropic Console 및 Claude API 문서를 참조하세요.

Claude API 활용 사례

사례 Claude API 활용 결과
Kubernetes 매니페스트 검증 보안 설정 자동 검증 Pod Security Standards 준수 확인
Secret 관리 검토 하드코딩된 Secret 탐지 Secret 관리 개선
네트워크 정책 검증 Network Policy 설정 검토 네트워크 보안 강화

3.4 GitHub Copilot을 활용한 보안 코딩

GitHub Copilot 보안 기능

기능 설명 활용 방법
보안 모범 사례 제안 보안 관련 코드 패턴 제안 보안 코드 작성 시 자동 제안
취약점 예방 알려진 취약점 패턴 회피 안전한 코드 패턴 제안
테스트 코드 생성 보안 테스트 코드 자동 생성 보안 테스트 자동화

GitHub Copilot 활용 예시

# GitHub Copilot이 제안하는 보안 강화 코드
import os
from typing import Optional

def get_api_key() -> Optional[str]:
    """
    GitHub Copilot이 제안: 환경 변수에서 API 키 가져오기
    하드코딩 대신 환경 변수 사용
    """
    api_key = os.getenv("API_KEY")
    if not api_key:
        raise ValueError("API_KEY environment variable is not set")
    return api_key

# 나쁜 예시 (GitHub Copilot이 경고)
# api_key = "sk-1234567890abcdef"  # ⚠️ 하드코딩된 Secret

참고: GitHub Copilot 설정은 GitHub Copilot 문서를 참조하세요.

3.5 GitHub Actions AI 통합

GitHub Actions AI 기능

기능 설명 활용 방법
자동화된 코드 리뷰 Pull Request 자동 리뷰 보안 취약점 자동 탐지
보안 스캔 통합 Trivy, Snyk 등과 통합 자동화된 보안 스캔
의존성 업데이트 Dependabot과 통합 취약점 패치 자동화

GitHub Actions AI 통합 예시

# .github/workflows/ai-powered-security.yml
name: AI-Powered Security Scan
on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]
jobs:
  security-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      # GitHub Copilot으로 생성된 코드 검증
      - name: Run Security Scan with AI
        uses: github/super-linter@v4
        env:
          DEFAULT_BRANCH: main
          GITHUB_TOKEN: $
          VALIDATE_ALL_CODEBASE: true
      
      # Claude API로 보안 리뷰
      - name: Claude Security Review
        uses: anthropic/claude-code-review@v1
        with:
          api-key: $
          focus: "security"
      
      # Trivy로 이미지 스캔
      - name: Run Trivy vulnerability scanner
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'fs'
          scan-ref: '.'
          format: 'sarif'
          output: 'trivy-results.sarif'
      
      # 결과를 GitHub Security 탭에 업로드
      - name: Upload Trivy results to GitHub Security
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: 'trivy-results.sarif'

3.6 AI 기반 보안 모니터링

AI 기반 이상 탐지

도구 설명 활용 방법
Claude API + Falco 런타임 보안 이벤트 분석 이상 행위 패턴 탐지
GitHub Copilot + Prometheus 메트릭 분석 및 알림 보안 이벤트 자동 분석
Cursor + Kubernetes Audit 감사 로그 분석 보안 이벤트 패턴 탐지

AI 기반 보안 모니터링 아키텍처

AI 기반 보안 모니터링: Kubernetes Audit 로그 → Claude API 분석 → 이상 행위 탐지 → 자동화된 대응

참고: AI 기반 보안 모니터링은 OWASP AI Security 및 MITRE ATLAS를 참조하세요.

3.7 AI 활용 Best Practices

보안 고려사항

항목 설명 권장 사항
API 키 관리 AI 도구 API 키 보안 관리 환경 변수 사용, Secret 관리 도구 활용
코드 검증 AI 생성 코드 검증 필수 자동화된 테스트 및 보안 스캔
비용 관리 AI API 사용 비용 최적화 캐싱, 배치 처리, 프롬프트 최적화

AI 활용 체크리스트

항목 설명 상태
Cursor 보안 설정 .cursorrules 파일에 보안 규칙 정의
Claude API 통합 CI/CD 파이프라인에 Claude API 통합
GitHub Copilot 활성화 GitHub Copilot 활성화 및 보안 설정
AI 생성 코드 검증 자동화된 테스트 및 보안 스캔
비용 모니터링 AI API 사용량 및 비용 모니터링

4. DevSecOps 통합 전략

DevSecOps는 개발, 보안, 운영을 통합하여 보안을 개발 프로세스에 자연스럽게 통합하는 접근 방식입니다.

3.1 자동화된 보안 검증

CI/CD 파이프라인 보안 통합

단계보안 검증 항목도구적용 방법

단계 보안 검증 항목 도구 적용 방법
빌드 단계 이미지 스캔, Dockerfile 검증 Trivy, Hadolint CI 파이프라인 통합
배포 전 Kubernetes 매니페스트 검증 Polaris, Kube-score Pre-commit hook
배포 후 런타임 보안 모니터링 Falco, Sysdig Kubernetes Operator

보안 강화된 CI/CD 파이프라인

보안 강화된 CI/CD 파이프라인: 코드 스캔 → 이미지 스캔 → Secret 관리 → 배포 검증 → 런타임 모니터링 (AI 통합)

참고: DevSecOps 통합 전략은 OWASP DevSecOps Maturity Model 및 OWASP CI/CD Security Cheat Sheet를 참조하세요.

3.2 보안 강화된 파이프라인 구축

실습 예시: 보안 강화된 CI/CD 파이프라인

이번 주차 실습에서는 보안이 강화된 CI/CD 파이프라인을 구축해보았습니다. 주요 구성은 다음과 같습니다:

  1. 코드 저장소: GitHub를 사용하여 소스코드를 관리하고, GPG 서명을 통해 커밋의 무결성을 검증합니다.
  2. CI 도구: Jenkins를 활용하여 빌드 및 테스트를 자동화하고, SonarQube를 통합하여 코드 품질을 분석합니다.
  3. CD 도구: ArgoCD를 사용하여 Kubernetes 클러스터에 애플리케이션을 배포하고, Helm을 통해 배포를 관리합니다.
  4. 보안 스캔: Trivy를 사용하여 컨테이너 이미지의 취약점을 스캔하고, 결과를 Slack으로 알림받습니다.

3.3 정기적인 보안 감사

보안 감사 체크리스트

항목 설명 주기 담당
코드 스캔 정적/동적 분석 실행 매 커밋 개발팀
이미지 스캔 컨테이너 이미지 취약점 스캔 매 빌드 DevOps팀
Secret 감사 하드코딩된 Secret 검색 주 1회 보안팀
권한 감사 RBAC 권한 검토 월 1회 보안팀
파이프라인 감사 CI/CD 파이프라인 설정 검토 분기 1회 DevOps팀

4. 실전 보안 강화 사례

보안 엔지니어에게 실전 경험은 이론보다 중요합니다. 이번 주에는 실제 프로젝트에서 적용한 보안 강화 사례를 공유합니다.

💡 멘토의 관점: CI/CD 보안도 ‘코드’로 관리됩니다.

DevSecOps 워크플로우

CI/CD 보안은 DevSecOps 사이클을 통해 코드로 관리됩니다. 실제 보안 강화 사례를 통해 구체적인 개선 방법을 살펴보겠습니다.

보안 강화 사례: Secret 관리 개선

구분 수정 전 (Before) 수정 후 (After)
Secret 관리 환경 변수에 하드코딩
(코드에 평문 저장)
HashiCorp Vault 통합
(중앙 관리, 동적 생성)
위협 요소 Git 히스토리에 Secret 노출 위험 Secret이 코드에 노출되지 않음
보안 효과 Secret 유출 시 전체 시스템 위험 Secret 로테이션, 접근 제어 가능

보안 강화 사례: 이미지 스캔 자동화

구분 수정 전 (Before) 수정 후 (After)
이미지 스캔 수동 스캔
(배포 전 수동 실행)
CI/CD 파이프라인 통합
(자동 스캔, 실패 시 배포 차단)
위협 요소 취약점이 있는 이미지 배포 가능 취약점 발견 시 자동 차단
보안 효과 취약점 탐지 지연 실시간 취약점 탐지 및 차단

👨‍🏫 멘토의 조언 (Takeaway)

CI/CD 보안은 한 번의 설정으로 끝나는 것이 아닙니다. 지속적인 모니터링과 자동화된 보안 검증을 통해 보안 상태를 유지해야 합니다. 이번 주 실습을 통해 여러분의 CI/CD 파이프라인도 점검해 보세요.

👉 CI/CD 보안 Best Practices 및 실습 가이드 보러가기


5. 실습: 보안 강화된 CI/CD 파이프라인 구축

5.1 GitHub Actions 보안 강화 설정

# .github/workflows/security-scan.yml
name: Security Scan
on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]
jobs:
  code-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run SonarQube Scan
        uses: sonarsource/sonarqube-scan-action@master
        env:
          SONAR_TOKEN: $
          SONAR_HOST_URL: $
  
  image-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build Docker image
        run: docker build -t myapp:$ .
      - name: Run Trivy vulnerability scanner
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: 'myapp:$'
          format: 'table'
          exit-code: '1'
          severity: 'CRITICAL,HIGH'

5.2 Kubernetes 보안 환경 구성

# Namespace 생성 및 보안 정책 적용
kubectl create namespace production
kubectl label namespace production \
  pod-security.kubernetes.io/enforce=restricted \
  pod-security.kubernetes.io/audit=restricted \
  pod-security.kubernetes.io/warn=restricted

# Network Policy 적용
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
  namespace: production
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
EOF

# RBAC 설정
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: developer
  namespace: production
rules:
- apiGroups: ["apps"]
  resources: ["deployments"]
  verbs: ["get", "list", "create", "update", "patch"]
EOF

5.3 ArgoCD 보안 설정

# ArgoCD Application 보안 설정 예시
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/myorg/myrepo
    targetRevision: HEAD
    path: k8s
  destination:
    server: https://kubernetes.default.svc
    namespace: production
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true

보안 체크리스트

보안 영역 체크리스트 항목 설명
CI/CD 보안 코드 스캔 자동화 SAST, DAST 도구 통합
  이미지 스캔 자동화 Trivy, Snyk 등 CI/CD 파이프라인 통합
  Secret 관리 HashiCorp Vault, AWS Secrets Manager 사용
  파이프라인 무결성 검증 GPG 서명, 자동화된 테스트
AI 활용 Cursor 보안 설정 .cursorrules 파일에 보안 규칙 정의
  Claude API 통합 CI/CD 파이프라인에 Claude API 통합
  GitHub Copilot 활성화 보안 모범 사례 제안 활성화
  AI 생성 코드 검증 자동화된 테스트 및 보안 스캔
Kubernetes 보안 Network Policies 적용 Pod 간 통신 제어 정책 설정
  RBAC 최소 권한 원칙 필요한 권한만 부여
  Pod Security Standards 적용 Namespace에 PSS 레벨 설정
  감사 로깅 활성화 Kubernetes Audit 로그 활성화
모니터링 런타임 보안 모니터링 Falco 등 런타임 보안 도구 통합
  보안 이벤트 알림 Prometheus, Grafana 통합

결론

CI/CD와 Kubernetes 보안은 DevSecOps의 핵심입니다. 개발부터 배포까지 전 과정에서 보안을 고려해야 합니다.

 

주요 포인트:

  1. Kubernetes 네트워크 및 보안: Network Policies, RBAC, Pod Security Standards, 감사 로깅
  2. CI/CD 파이프라인 보안: 코드 스캔(SAST, DAST), 이미지 스캔, Secret 관리, 파이프라인 무결성 검증
  3. AI 활용을 통한 DevSecOps 강화: Cursor 보안 코딩, Claude API 자동화된 보안 검증, GitHub Copilot 보안 모범 사례, GitHub Actions AI 통합, AI 기반 보안 모니터링
  4. DevSecOps 통합 전략: 자동화된 보안 검증, 보안 강화된 파이프라인 구축, 정기적인 보안 감사
  5. 실전 보안 강화 사례: Secret 관리 개선, 이미지 스캔 자동화, AI 기반 보안 모니터링 등 실제 적용 사례
  6. 실습: 보안 강화된 CI/CD 파이프라인 구축, Kubernetes 보안 환경 구성, AI 도구 통합

이 가이드를 참고하여 여러분의 CI/CD 파이프라인과 Kubernetes 클러스터 보안을 강화하시기 바랍니다.

관련 자료