CI/CD 파이프라인은 애플리케이션을 신속하고 안정적으로 배포할 뿐만 아니라, 조직 전체에 일관된 보안 규칙과 컴플라이언스를 적용하는 데도 중요한 역할을 합니다.

예를 들어, 규제가 엄격한 산업 환경에서는 모든 변경 사항이 컴플라이언스 요구 사항을 반드시 충족해야 합니다. 아울러 그 결과를 확인하고, 증빙 자료로 남기는 게 필수입니다. CI/CD 파이프라인을 잘 설계하면 이러한 작업을 자동화하고 체계적으로 수행할 수 있습니다.

특히 GitLab의 Pipeline Execution Policy 기능을 사용하면, 모든 변경 사항이 컴플라이언스 요구 사항을 충족하도록 손쉽게 강제하고, 그 결과를 확인할 수 있습니다. 이 기능은 GitLab의 모든 프로젝트에 일관된 보안 규칙을 자동으로 적용합니다. 이로써 조직 전체에 CI/CD 작업을 표준화하고 강제할 수 있습니다.

이 글에서는 Pipeline Execution Policy의 개념, 구성 방법, 정책 적용 확인 방법을 실습 예제와 함께 자세히 알아보겠습니다.

GitLab CI/CD 파이프라인 개요

Pipeline Execution Policy를 본격적으로 다루기에 앞서, GitLab CI/CD 파이프라인 개념과 기능을 먼저 살펴보겠습니다.

Pipeline Execution Policy는 GitLab CI/CD 파이프라인 구조를 기반으로 동작합니다. 따라서 해당 개념과 세부 기능을 이해하면, Pipeline Execution Policy의 동작 원리와 구성 방식을 더 쉽게 파악할 수 있습니다.

개념과 기능

GitLab CI/CD는 .gitlab-ci.yml(YAML 형식의 구성 파일)에 정의된 스크립트를 기반으로 소프트웨어의 빌드, 테스트, 배포를 자동화하는 도구입니다.

과거에는 프로젝트별로 개별 파이프라인을 정의하는 방식이 일반적이었습니다. 그러나 조직 규모가 커지고 컴플라이언스 요구 사항이 증가하면서, 중앙집중화된 파이프라인 관리와 통제가 점점 더 중요해졌습니다.

GitLab CI/CD는 이러한 니즈에 부응하는 다양한 기능을 제공합니다. 특히 다음 세 가지 기능으로 CI/CD 파이프라인에 보안 스캔을 통합하고, 컴플라이언스를 강화하도록 지원합니다.

  • Pipeline Includes: 외부 구성 파일을 다른 프로젝트의 파이프라인에 포함해 공통 작업을 재사용하도록 지원하는 기능입니다. 이 기능을 사용하면, 외부 YAML 파일을 프로젝트 파이프라인에 포함해 재사용 가능한 템플릿이나 컴포넌트를 쉽게 활용할 수 있습니다. 예를 들어, GitLab에서 제공하는 SAST(정적 애플리케이션 보안 테스트), Secret Detection(비밀 탐지), Dependency Scanning(의존성 검사) 등의 템플릿을 포함해 보안 스캔을 프로젝트 파이프라인에 추가할 수 있습니다.
  • Security Policies: 조직 차원에서 보안·컴플라이언스 기준을 코드 수준에서 통제하도록 해주는 정책 관리 기능입니다. 보안·컴플라이언스 팀은 중앙 집중식으로 보안 스캔 실행, Merge request 승인, 파이프라인 실행 정책을 정의하고 적용할 수 있습니다. 이러한 정책은 조직 전체 또는 특정 그룹/프로젝트에 적용해 일관된 보안, 컴플라이언스를 유지하는 데 도움이 됩니다.
  • Compliance Frameworks: 프로젝트에 특정 컴플라이언스 기준을 라벨링 해 해당 기준에 맞는 파이프라인 실행을 강제하는 기능입니다. 예를 들어, PCI DSS(결제 카드 업계 데이터 보안 표준), NIST(미국 국립표준기술연구소)에 따라 프로젝트를 라벨링하고, 해당 라벨이 적용된 프로젝트에 특정 컴플라이언스 파이프라인을 자동으로 실행하도록 강제할 수 있습니다. 참고로, Compliance Frameworks는 GitLab 17.3 버전부터 더 이상 지원되지 않으므로, Pipeline Execution Policies로 마이그레이션 할 것을 권장합니다.

Pipeline Execution Policy 개요

이제 Pipeline Execution Policy의 개념과 장점, 적용 방식을 살펴보겠습니다. 최근 GitLab은 이 기능을 DevSecOps 강화를 위한 핵심 기능으로 발전시키고 있습니다.

개념

Pipeline Execution Policy는 조직의 보안·컴플라이언스 팀이 개발자가 설정한 파이프라인과 별개로, 특정 필수 작업을 자동으로 실행하도록 강제하는 기능입니다. 이 기능은 규제가 엄격한 환경에서 개발자가 표준화된 작업 흐름을 따르도록 보장합니다.

장점

Pipeline Execution Policy를 사용하면 다음과 같은 장점을 누릴 수 있습니다.

  • 필수 보안 스캔 강제: 조직에서 반드시 실행해야 하는 특정 보안 스캐너(예: 외부 보안 스캐너)를 모든 관련 프로젝트의 파이프라인에 자동으로 포함시켜 실행을 보장할 수 있습니다.
  • 승인된 job, 스테이지 통제: 개발자가 파이프라인 정의에 사용할 수 있는 특정 job 또는 스테이지를 제한해 조직의 표준을 준수하도록 강제할 수 있습니다. 승인되지 않은 job 또는 스테이지가 파이프라인에 추가되면 파이프라인 실행을 실패시킬 수 있습니다.
  • 중앙 집중식 정책 관리: 보안·컴플라이언스 팀은 별도의 보안 정책 프로젝트에서 정책을 정의하고 관리하며, 이를 여러 그룹 또는 프로젝트에 일괄 적용할 수 있습니다. 이로써 관리 효율성을 높일 수 있습니다.
  • 감사, 추적 용이성: 정책 내역은 GitLab의 감사 로그로 추적하고 관리하기가 쉽습니다. 이는 컴플라이언스 감사 준비에도 도움이 됩니다.

적용 방식

Pipeline Execution Policy는 다음 두 가지 방식 중 하나로 프로젝트에 적용할 수 있습니다.

  • inject_policy: 프로젝트의 기존 CI/CD 구성을 유지하면서 정책을 추가하는 방식입니다. 이 방식을 사용하면 기존 파이프라인을 대체하지 않고 확장해 보안 스캔이나 컴플라이언스 검사 등을 적용할 수 있습니다. 아울러 파이프라인에 사용자 정의 정책 스테이지를 주입해 정책 규칙 적용 위치를 세밀하게 제어할 수 있습니다. 각 파이프라인은 격리된 YAML로 구성돼 프로젝트 구성이 정책 동작을 재정의할 수 없습니다. 또 정책에 정의된 변수가 항상 우선 적용되며, 정의되지 않으면 그룹이나 프로젝트 설정값이 사용됩니다.
  • override_project_ci: 프로젝트의 기존 CI/CD 구성을 정책으로 완전히 대체하는 방식입니다. 이 방식은 조직 전체의 CI/CD 표준이나 컴플라이언스 요구사항을 강력하게 적용할 때 유용하고, inject_policy보다 우선순위가 높습니다. 필요하면 include를 사용해 프로젝트 구성을 정책에 포함시킬 수 있습니다. 정책의 워크플로 규칙은 모든 연결 프로젝트에 적용됩니다. 단, 이 방식을 Scan Execution Policy와 함께 사용하면 스캔 정책이 무시될 수 있습니다. 따라서 두 정책을 모두 적용하려면 필요한 스캐너 템플릿을 정책에 직접 포함해야 합니다.

Pipeline Execution Policy 실습

지금부터 Pipeline Execution Policy를 실제로 구성하고 적용하는 방법을 단계별로 알아보겠습니다. 다음 실습 예제로 모든 프로젝트 파이프라인에 보안 스캔을 주입하는 정책을 생성하겠습니다.

0. 사전 준비 사항

Pipeline Execution Policy를 적용하기 전에 다음 사항을 준비하세요.

  1. 보안 정책 프로젝트를 생성합니다.
  2. 해당 프로젝트에 정책 YAML 파일을 생성합니다.
  3. 보안 정책 프로젝트에 삽입할 파이프라인 YAML 파일을 생성합니다.
  4. 관리자 또는 보안 팀에게만 프로젝트 접근 권한을 부여합니다.

1. 보안 스캔 파이프라인 생성

먼저, 보안 정책 프로젝트에 삽입할 보안 스캔 파이프라인 프로젝트와 파일을 아래와 같이 생성합니다. 이 파일은 모든 프로젝트에 삽입될 보안 스캔 작업을 정의합니다.

 | 인포그랩 GitLab


2. GitLab에서 Pipeline Execution Policy 생성

GitLab UI로 Pipeline Execution Policy를 생성하고 적용합니다.

  1. 해당 보안 정책을 적용할 프로젝트로 이동합니다.
  2. 우측 메뉴 바에서 Secure > Polices > New Policy를 클릭합니다.
  3. Pipeline Execution Policies 섹션을 찾아 Add Policy를 클릭합니다.
  4. 다음 항목을 설정합니다.
  • Name: 정책 이름을 입력합니다. (예: '표준 보안 정책')
  • Description: 목적을 포함한 정책 내용을 설명합니다.
  • Source Project: 파이프라인 템플릿이 저장된 프로젝트를 선택합니다.
  • Source File: 파일 경로를 입력합니다.
  • Policy Type: 적용 방식을 선택합니다. (inject_policy/override_project_ci)
  • Job Name Suffix: 적용 방식을 선택합니다. (on_conflict/ never)
  1. Create Policy를 클릭해 정책을 생성합니다.
  • YAML 구성 예시
 | 인포그랩 GitLab


3. 정책 적용 확인

설정한 파이프라인 정책이 프로젝트에 정상 적용됐는지 확인합니다. Pipeline Execution Policy 기능에 따라 파이프라인이 실행할 때, 정책이 자동으로 적용돼야 합니다. 시나리오는 정책을 적용한 프로젝트에 .gitlab-ci.yaml 파일이 있을 때와 없을 때로 구분해 구성했습니다.

  • 시나리오 1: .gitlab-ci.yml 파일이 있을 때
  • 샘플 코드 예시:
 | 인포그랩 GitLab


  • .gitlab-ci.yml 파일을 생성한 뒤, 실행 결과:
    .gitlab-ci.yml이 있을 때, 파이프라인 실행 결과 | 인포그랩 GitLab
    .gitlab-ci.yml이 있을 때, 파이프라인 실행 결과

  • 시나리오 2: .gitlab-ci.yml 파일이 없을 때
  • 이전에 설정한 .gitlab-ci.yml 파일을 삭제한 뒤, 실행 결과:
    .gitlab-ci.yml이 없을 때, 파이프라인 실행 결과 | 인포그랩 GitLab
    .gitlab-ci.yml이 없을 때, 파이프라인 실행 결과

맺음말

지금까지 GitLab Pipeline Execution Policy의 개념과 구성 방법, 정책 적용 확인 방법을 실습 예제와 함께 살펴봤습니다.

Pipeline Execution Policy는 조직 전체에 CI/CD 워크플로를 표준화하고, 컴플라이언스 요구 사항을 일관되게 관리하는 강력한 기능입니다. 이 기능을 사용하면 중앙 집중식 정책 관리, 필수 작업 강제 실행, 향상된 감사 기능으로 개발 프로세스의 효율성을 유지하며, 엄격한 컴플라이언스 요구 사항을 안정적으로 충족할 수 있습니다.

기존에 Compliance Pipeline을 사용하셨다면, GitLab에서 제공하는 마이그레이션 도구와 가이드를 활용해 Pipeline Execution Policy로 전환하시길 권장합니다. 마이그레이션 하시면 GitLab에서 더욱 강력하고 유연한 컴플라이언스 정책 관리 기능을 경험하실 수 있습니다.

참고 자료

  1. “Policies”, GitLab, https://docs.gitlab.com/user/application_security/policies/
  2. Dan Rabinovitz, “Tutorial: Advanced use case for GitLab Pipeline Execution Policies”, GitLab, 2025-01-22, https://about.gitlab.com/blog/2025/01/22/tutorial-advanced-use-case-for-gitlab-pipeline-execution-policies/
  3. Ian Khor, “Why GitLab is deprecating compliance pipelines in favor of security policies”, GitLab, 2024-10-01, https://about.gitlab.com/blog/2024/10/01/why-gitlab-is-deprecating-compliance-pipelines-in-favor-of-security-policies/
  4. Mathias Ewald, Matt Genelin, "How to choose the right security scanning approach", GitLab, 2024-08-26, https://about.gitlab.com/blog/2024/08/26/how-to-choose-the-right-security-scanning-approach/
  5. Abubakar Siddiq Ango, "Meet regulatory standards with GitLab security and compliance", GitLab, 2024-08-22, https://about.gitlab.com/blog/2023/08/17/meet-regulatory-standards-with-gitlab/
  6. Fernando Diaz, Beatriz Barbosa, "How to ensure separation of duties and enforce compliance with GitLab", GitLab, 2024-12-16, https://about.gitlab.com/blog/2022/04/04/ensuring-compliance/

완벽한 GitLab 구축부터 성공적인 DevOps 도입까지! 인포그랩과 DevOps 라이프사이클을 함께하세요.