2026년 DevOps 파이프라인 보안: DevSecOps 모범 사례 및 면접 질문

DevSecOps의 핵심 방법론, CI/CD 파이프라인 보안 강화 방법, 2026년 기술 면접에서 요구되는 보안 지식을 다룹니다. SAST, SCA, OIDC 페더레이션, 컨테이너 보안까지 종합적으로 소개합니다.

DevSecOps 모범 사례와 CI/CD 파이프라인 보안

DevOps 파이프라인 보안은 대규모로 소프트웨어를 배포하는 조직에게 핵심적인 차별화 요소가 되었습니다. OWASP Top 10 CI/CD 보안 위험에서는 불충분한 플로우 제어부터 손상된 빌드 의존성까지 최신 파이프라인의 가장 위험한 취약점을 식별합니다. 본 가이드에서는 2026년 기술 면접에서 지원자에게 요구되는 필수 DevSecOps 실천 방법을 다룹니다.

시프트-레프트 보안

DevSecOps는 소프트웨어 딜리버리 라이프사이클의 모든 단계에서 보안 검사를 통합합니다. 보안을 프로덕션 전 최종 게이트로 취급하는 대신, 시프트-레프트 방식은 수정 비용이 적고 더 빠르게 배포할 수 있는 개발 단계에서 취약점을 발견합니다.

CI/CD 공격 표면 이해하기

최신 CI/CD 파이프라인은 소스 코드 저장소, 빌드 러너, 아티팩트 레지스트리, 배포 대상에 걸친 복잡한 공격 표면을 제공합니다. 2025년 3월 tj-actions/changed-files 침해 사건에서는 널리 사용되는 GitHub Action에 악성 코드가 주입되어 23,000개 이상의 저장소에서 시크릿이 유출되었습니다. 2026년 초 TanStack 공격에서는 유효한 SLSA Build Level 3 증명을 가진 170개 이상의 오염된 npm 패키지가 게시되었으며, 공격자가 빌드 프로세스를 제어할 경우 암호화 증명조차 우회할 수 있음을 입증했습니다.

이러한 사고는 세 가지 핵심 제어 지점을 강조합니다:

  • 소스 무결성: 브랜치 보호 규칙, 서명된 커밋, 필수 코드 리뷰를 통해 무단 변경이 빌드 파이프라인에 도달하는 것을 방지합니다
  • 빌드 격리: 임시 러너, 최소 권한, 아티팩트 검증으로 손상된 의존성의 영향 범위를 제한합니다
  • 시크릿 위생: 단기 자격 증명, OIDC 페더레이션, 시크릿 스캐닝으로 공격자가 노리는 정적 토큰을 제거합니다

면접관은 종종 지원자에게 일반적인 배포 파이프라인의 신뢰 경계를 추적하도록 요청합니다. 훌륭한 답변은 공격자가 코드를 주입하거나 자격 증명을 탈취할 수 있는 각 단계를 매핑합니다.

SAST와 SCA: 취약점 조기 발견

정적 애플리케이션 보안 테스트(SAST)는 프로그램을 실행하지 않고 소스 코드의 보안 결함을 분석합니다. 소프트웨어 구성 분석(SCA)은 서드파티 의존성의 알려진 취약점을 식별합니다. 모든 풀 리퀘스트에서 두 가지를 모두 실행하면 코드가 병합되기 전에 대부분의 일반적인 보안 문제를 발견할 수 있습니다.

yaml
# .github/workflows/security.yml
name: Security Scan

on:
  pull_request:
    branches: [main]

jobs:
  sast:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      security-events: write
    steps:
      - uses: actions/checkout@v4
      
      - name: Run CodeQL
        uses: github/codeql-action/analyze@v3
        with:
          languages: javascript,typescript
          queries: security-extended

  sca:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Run Trivy vulnerability scanner
        uses: aquasecurity/trivy-action@0.28.0
        with:
          scan-type: fs
          scan-ref: .
          severity: HIGH,CRITICAL
          exit-code: 1

위 워크플로우는 SAST용 CodeQL과 SCA용 Trivy를 실행합니다. Trivy에서 exit-code: 1을 설정하면 높음 또는 치명적 취약점이 나타날 때 빌드가 실패합니다. GitHub Advanced Security와 GitLab Ultimate에는 각각의 머지 리퀘스트 워크플로우와 통합되는 내장 SAST 기능이 포함되어 있습니다.

OIDC 페더레이션을 통한 시크릿 관리

CI/CD 플랫폼에 저장된 장기 자격 증명은 파이프라인 침해에서 가장 많이 악용되는 공격 벡터입니다. GitHub Actions OIDC는 정적 시크릿을 런타임에 클라우드 공급자가 발급하는 단기 토큰으로 대체합니다.

yaml
# .github/workflows/deploy.yml
name: Deploy to AWS

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      id-token: write  # OIDC에 필요
      contents: read
    steps:
      - uses: actions/checkout@v4
      
      - name: Configure AWS credentials via OIDC
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsRole
          aws-region: us-east-1
          # AWS_ACCESS_KEY_ID나 AWS_SECRET_ACCESS_KEY가 어디에도 저장되지 않음
      
      - name: Deploy to ECS
        run: aws ecs update-service --cluster prod --service api --force-new-deployment

AWS IAM 역할 신뢰 정책은 역할을 수임할 수 있는 저장소와 브랜치를 제한합니다:

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
        },
        "StringLike": {
          "token.actions.githubusercontent.com:sub": "repo:my-org/my-repo:ref:refs/heads/main"
        }
      }
    }
  ]
}

이 조건은 특정 저장소의 main 브랜치로 자격 증명 발급을 제한합니다. Azure와 GCP도 동등한 OIDC 페더레이션 기능을 제공합니다. 반드시 존재해야 하는 시크릿의 경우, HashiCorp Vault와 AWS Secrets Manager 같은 클라우드 네이티브 옵션이 중앙 집중식 로테이션과 접근 로깅을 제공합니다.

DevOps 면접 준비가 되셨나요?

인터랙티브 시뮬레이터, flashcards, 기술 테스트로 연습하세요.

컨테이너 보안 및 SBOM 생성

컨테이너 이미지는 애플리케이션 코드 외의 의존성을 도입합니다. 베이스 이미지, 시스템 패키지, 빌드 도구는 모두 잠재적인 취약점을 가지고 있습니다. 빌드 프로세스 중에 이미지를 스캔하고 소프트웨어 자재 명세서(SBOM)를 생성하면 전체 의존성 체인에 대한 가시성을 확보할 수 있습니다.

yaml
# GitLab CI 컨테이너 보안
container_scanning:
  stage: test
  image: registry.gitlab.com/gitlab-org/security-products/analyzers/container-scanning:7
  variables:
    CS_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    CS_DOCKERFILE_PATH: Dockerfile
  script:
    - /analyzer run
  artifacts:
    reports:
      container_scanning: gl-container-scanning-report.json
      cyclonedx: gl-sbom.cdx.json

CycloneDX 형식의 SBOM 아티팩트를 사용하면 다운스트림 소비자가 재빌드 없이 새로 공개된 취약점을 확인할 수 있습니다. SLSA와 같은 공급망 보안 프레임워크는 기본 제어로 SBOM 생성을 요구합니다.

스테이징 환경에서의 동적 애플리케이션 보안 테스트

DAST 도구는 정적 분석으로 감지할 수 없는 취약점(인증 결함, 인젝션 취약점, 보안 설정 오류 등)에 대해 실행 중인 애플리케이션을 테스트합니다. 프로덕션 배포 전에 스테이징 환경에서 DAST를 실행하면 이전 게이트를 통과한 문제를 발견할 수 있습니다.

yaml
# .gitlab-ci.yml
dast:
  stage: dast
  image: registry.gitlab.com/gitlab-org/security-products/analyzers/dast:5
  variables:
    DAST_WEBSITE: https://staging.example.com
    DAST_AUTH_URL: https://staging.example.com/login
    DAST_USERNAME: $DAST_USER
    DAST_PASSWORD: $DAST_PASSWORD
    DAST_AUTH_VERIFICATION_URL: https://staging.example.com/dashboard
  script:
    - /analyze
  artifacts:
    reports:
      dast: gl-dast-report.json
  rules:
    - if: $CI_COMMIT_BRANCH == "main"

OWASP ZAP은 GitLab Ultimate가 없는 팀에게 무료 대안을 제공합니다. 인증된 스캔은 민감한 작업이 일반적으로 존재하는 로그인 벽 뒤의 기능을 테스트합니다. Kubernetes 환경에서는 API 보안 테스트가 Ingress 구성과 서비스 메시 정책을 검증합니다.

Infrastructure as Code 보안 스캔

Terraform, Kubernetes 매니페스트, Helm 차트는 공격자가 표적으로 삼는 인프라를 정의합니다. IaC 스캔은 클라우드 환경에 도달하기 전에 설정 오류를 발견합니다.

yaml
# GitHub Actions에서 Checkov IaC 스캔
iac-scan:
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v4
    
    - name: Run Checkov
      uses: bridgecrewio/checkov-action@v12
      with:
        directory: terraform/
        framework: terraform
        soft_fail: false
        output_format: sarif
        output_file_path: checkov.sarif
    
    - name: Upload SARIF
      uses: github/codeql-action/upload-sarif@v3
      with:
        sarif_file: checkov.sarif

Checkov은 CIS 및 SOC2를 포함한 보안 벤치마크에 대해 Terraform 구성을 검증합니다. SARIF 출력은 통합 취약점 추적을 위해 GitHub 보안 탭과 통합됩니다. Ansible을 사용하는 팀은 보안 규칙이 포함된 ansible-lint를 동일한 파이프라인 단계에 추가할 수 있습니다.

GitHub Actions 공급망 강화

액션을 전체 커밋 SHA에 고정하면 메인테이너나 손상된 계정이 기존 태그에 악성 버전을 강제 푸시하는 태그 기반 공격을 방지합니다. 2026년 5월 Megalodon 캠페인에서는 6시간 동안 수천 개의 저장소에 5,700개 이상의 악성 커밋이 푸시되었습니다.

yaml
# 태그가 아닌 커밋 SHA에 고정
steps:
  - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
  
  # @v4나 @latest 같은 가변 태그 피하기
  # 나쁜 예: uses: actions/checkout@v4

Dependabot은 새 버전이 릴리스되면 SHA 고정된 액션을 업데이트합니다. OWASP DevSecOps 가이드라인은 추가 제어를 권장합니다:

  • permissions: 블록을 사용하여 워크플로우 권한을 필요한 최소로 제한
  • pull_request_target 트리거를 비활성화하거나 협력자의 레이블이 지정된 PR로 제한
  • 조직 수준에서 기본적으로 읽기 전용인 GITHUB_TOKEN 사용
  • 기본 브랜치에서 필수 상태 확인 및 브랜치 보호 활성화

일반적인 DevSecOps 면접 질문

면접관은 기술적 깊이와 실무 경험을 모두 평가합니다. 다음 질문들은 DevOps 보안 면접에서 자주 등장합니다.

Q: 저장소에 시크릿이 커밋되는 것을 어떻게 방지합니까?

detect-secrets나 gitleaks 같은 도구를 사용한 pre-commit 훅이 커밋 전에 스테이징된 변경 사항을 스캔합니다. GitHub Enterprise나 GitLab의 서버 측 푸시 규칙은 알려진 시크릿 형식과 일치하는 패턴이 포함된 커밋을 차단합니다. 개발자가 로컬 훅을 우회할 수 있으므로 시크릿 스캔은 CI에서도 백스톱으로 실행해야 합니다.

Q: SAST, DAST, SCA의 차이점을 설명하세요.

SAST는 SQL 인젝션 패턴과 하드코딩된 자격 증명 같은 버그를 찾기 위해 실행 없이 소스 코드를 분석합니다. SCA는 패키지 버전을 CVE 데이터베이스와 대조하여 의존성의 알려진 취약점을 식별합니다. DAST는 악성 요청을 보내고 응답을 관찰하여 실행 중인 애플리케이션을 테스트합니다. 성숙한 파이프라인은 세 가지 모두를 실행합니다: SAST와 SCA는 모든 PR에서, DAST는 프로덕션 릴리스 전 스테이징에서 실행합니다.

Q: CI/CD에서 최소 권한 원칙이란 무엇입니까?

빌드 작업은 특정 태스크를 완료하는 데 필요한 권한만 가져야 합니다. 스테이징에 배포하는 작업은 프로덕션 자격 증명이 필요하지 않습니다. OIDC 페더레이션은 특정 저장소, 브랜치, 워크플로우 작업으로 범위가 지정된 자격 증명을 발급하여 이를 시행합니다. OWASP CI/CD Top 10은 과도한 권한을 가진 손상된 작업이 공격 표면을 극적으로 확장하기 때문에 부적절한 ID 및 액세스 관리를 최고 위험으로 나열합니다.

Q: 컨테이너 이미지의 무결성을 어떻게 검증합니까?

콘텐츠 신뢰 서명(Docker Content Trust, Sigstore cosign)은 이미지가 신뢰할 수 있는 파이프라인에서 빌드되었다는 암호화 검증을 제공합니다. SBOM 증명은 이미지 내의 구성 요소를 문서화합니다. Kubernetes의 어드미션 컨트롤러는 서명되지 않은 이미지나 알려진 치명적 취약점이 있는 이미지를 거부합니다. 레지스트리 스캔은 빌드 시간 이후에 나타나는 취약점을 감지합니다.

Q: CI/CD에 대한 공급망 공격과 그 방지 방법을 설명하세요.

tj-actions/changed-files 공격은 널리 사용되는 GitHub Action을 손상시켜 공격자가 제어하는 엔드포인트로 시크릿을 유출하는 코드를 주입했습니다. 방지 조치에는 태그 대신 커밋 SHA에 액션을 고정하고, Dependabot을 사용하여 고정된 버전을 업데이트하고, 조직 수준 정책으로 실행할 수 있는 액션을 제한하고, 예상치 못한 네트워크 연결이나 자격 증명 액세스에 대해 워크플로우 실행을 모니터링하는 것이 포함됩니다.

연습을 시작하세요!

면접 시뮬레이터와 기술 테스트로 지식을 테스트하세요.

기술 면접을 위한 DevSecOps 로드맵 구축

보안 구현에 대해 구조화된 사고를 보여주는 지원자가 돋보입니다. 실용적인 DevSecOps 롤아웃은 먼저 높은 영향력과 낮은 노력의 제어를 우선시합니다:

  • 시크릿 스캔과 브랜치 보호를 즉시 활성화합니다. 둘 다 무료이며 가장 일반적인 공격 벡터를 차단합니다
  • 첫 번째 스프린트 내에 풀 리퀘스트 체크에 SAST와 SCA를 추가하여 병합 전에 취약점을 발견합니다
  • 정적 자격 증명에서 OIDC 페더레이션으로 마이그레이션하여 CI/CD 플랫폼에서 가장 위험한 시크릿을 제거합니다
  • 이미지 빌드의 일부로 컨테이너 스캔과 SBOM 생성을 구현합니다
  • Terraform, Kubernetes, 클라우드 구성을 위한 IaC 스캔을 배포합니다
  • 인증이나 민감한 데이터 처리가 있는 애플리케이션에 DAST를 추가합니다
  • 프로덕션 Kubernetes 클러스터를 위해 Falco 또는 동등한 런타임 모니터링을 수립합니다

면접관은 트레이드오프를 인정하는 지원자를 높이 평가합니다. 보안 스캔은 파이프라인 지연 시간을 추가합니다. 오탐지는 알림 피로를 유발합니다. 성숙한 DevSecOps 실천은 임계값을 조정하고, 보상 제어로 계산된 위험을 수용하며, 평균 복구 시간을 지속적으로 측정합니다.

연습을 시작하세요!

면접 시뮬레이터와 기술 테스트로 지식을 테스트하세요.

오늘의 챌린지

DevOps 코드의 버그를 찾을 수 있나요

실제 코드 한 조각, 숨은 버그 하나, 하루 한 번. 계정 없이 바로 도전할 수 있습니다.

Anthony Fillion-Maillet

작성자

Anthony Fillion-Maillet

SharpSkill 창업자

10년 이상 풀스택 개발을 해왔습니다. SharpSkill을 운영하며 이곳에 게시되는 모든 내용에 책임을 집니다.

2026년 9월 8일 업데이트

태그

#devops
#devsecops
#security
#cicd
#pipeline

공유

관련 기사