2026년 하루 평균 보고된 CVE가 전년 대비 131% 증가했습니다.

CI/CD 보안

CI/CD 파이프라인 보안 체크리스트

CI/CD 파이프라인은 자격 증명을 보유하고, 인터넷에서 가져온 코드를 실행하며, 고객이 설치하는 것을 만들어 냅니다. 그 자체로 공격 대상이 되는 이유입니다. 이 체크리스트로 워크플로 파일부터 출시되는 아티팩트까지 GitHub Actions 파이프라인을 점검하세요.

업데이트

워크플로

  • 서드파티 액션을 전체 커밋 SHA로 고정하세요. GitHub는 이것을 "현재 액션을 변경 불가능한 릴리스로 사용하는 유일한 방법"이라고 부릅니다. 태그는 다른 코드를 가리키도록 바뀔 수 있습니다. 2025년 3월, CISA는 tj-actions/changed-files의 모든 버전이 3일 동안 침해되었다고 보고했습니다.
  • GITHUB_TOKEN에 최소 권한을 부여하세요. 콘텐츠에 대한 기본값을 읽기 전용으로 하고, 작업별로 더 많은 권한을 부여하세요.
  • pull_request_target에서 신뢰할 수 없는 코드를 체크아웃하지 마세요. 이 워크플로는 시크릿과 상승된 권한으로 실행됩니다.
  • 신뢰할 수 없는 입력을 스크립트에 넣지 마세요. 제목, 브랜치 이름 등 사용자가 제어하는 값은 셸 명령에 직접 전개하지 말고 환경 변수로 전달하세요.
  • 워크플로 파일의 변경을 검토하세요. .github/workflows에 대해 코드 소유자 검토를 필수로 지정하세요.

시크릿

  • 수명이 짧은 자격 증명을 우선하세요. OpenID Connect를 사용하면 작업이 시크릿으로 저장된 장기 키 대신 클라우드 제공업체에서 수명이 짧고 범위가 제한된 토큰을 받습니다.
  • 시크릿의 범위를 환경으로 제한하세요. 프로덕션 자격 증명은 필수 검토자가 지정된 환경 뒤에 두세요.
  • 사고 후에는 교체하세요. tj-actions 침해 이후 CISA는 노출된 시크릿을 침해된 것으로 간주하고 즉시 교체하라고 권고했습니다.

러너

  • 임시(ephemeral) 러너를 사용하세요. 작업마다 새 머신을 쓰면 다음 작업에 아무것도 남지 않습니다.
  • 셀프 호스팅 러너를 공개 리포지토리에서 쓰지 마세요. 누구나 리포지토리에 풀 리퀘스트를 열 수 있으므로, GitHub는 공개 리포지토리에서 셀프 호스팅 러너를 거의 사용해서는 안 된다고 말합니다.
  • 작업을 격리하세요. 한 작업이 다른 작업의 작업 공간이나 자격 증명을 읽을 수 있어서는 안 됩니다.

네트워크

  • 이그레스를 통제하세요. 작업에 필요한 패키지 소스와 서비스는 허용하고 나머지는 차단해, 손상된 종속성이 시크릿을 밖으로 보낼 수 없게 하세요. 이그레스 정책으로 데이터 유출을 막는 방법
  • 연결을 기록하세요. 각 작업이 무엇에 연결했는지 추적 기록을 남겨 나중에 조사할 수 있게 하세요.

종속성

  • 잠금 파일을 커밋하세요. 빌드는 매번 같은 버전으로 확정되어야 합니다.
  • 새 종속성을 검토하세요. 병합하기 전에 풀 리퀘스트가 무엇을 추가하는지 확인하세요.
  • 발견 사항으로 빌드를 게이트하세요. 알려진 Critical 취약점이 있는 패키지를 가져오는 빌드는 아티팩트가 출시되기 전에 차단하세요.

빌드 증거

  • 빌드가 가져온 것의 SBOM을 기록하세요. 사후에 파일을 스캔하면 선언된 것을 설명할 뿐, 빌드가 사용한 것을 설명하지는 않습니다.
  • 출처 증명에 서명하세요. 각 아티팩트를 그것을 만든 빌드와 연결해, 실행 중인 것이 빌드된 것과 같은지 나중에 확인할 수 있게 하세요.
  • 출시한 것을 모니터링하세요. 새 취약점이 게시되면 출시된 빌드를 다시 검사하세요.

어떤 도구가 어떤 항목을 다루는가

스캐너는 종속성 항목을, 파이프라인 강화 도구는 워크플로 항목을, 러너의 에이전트나 보안 러너는 네트워크와 증거 항목을 다룹니다. CRACI는 러너입니다. 실패 시 차단(fail closed)되는 이그레스 정책을 적용하고, 각 작업이 가져온 것의 SBOM을 기록하며, 정책 게이트로 발견 사항에 따라 빌드를 차단할 수 있게 하고, API로 SBOM, 네트워크 추적, 출처 증명을 반환합니다. 코드나 워크플로는 스캔하지 않습니다. 어떤 도구가 무엇을 다루는지는 CI/CD 보안 도구 비교를 참조하세요.

CI/CD 파이프라인 보안: 자주 묻는 질문

CI/CD 파이프라인 보안이란 무엇입니까?

소프트웨어를 빌드하고 출시하는 시스템을 보호하는 것입니다. 워크플로 정의, 워크플로가 사용하는 시크릿, 워크플로를 실행하는 러너, 내려받는 종속성, 만들어 내는 아티팩트가 그 대상입니다. 파이프라인이 침해되면 소스 코드를 건드리지 않고도 여러분의 이름으로 악성 코드가 출시될 수 있습니다.

GitHub Actions를 커밋 SHA로 고정해야 하는 이유는 무엇입니까?

태그는 다른 코드를 가리키도록 바뀔 수 있습니다. GitHub는 액션을 전체 길이의 커밋 SHA로 고정하는 것이 현재 액션을 변경 불가능한 릴리스로 사용하는 유일한 방법이라고 밝힙니다. 2025년 3월, CISA는 tj-actions/changed-files의 모든 버전이 3일 동안 침해되었다고 보고했습니다.

GITHUB_TOKEN에는 어떤 권한을 주어야 합니까?

각 작업에 필요한 최소한의 권한입니다. 리포지토리 콘텐츠에 대한 기본값을 읽기 전용으로 설정하고, 작업에 필요한 경우에만 작업별로 더 많은 권한을 부여하세요.

CI에 네트워크 이그레스 통제가 필요합니까?

작업이 시크릿을 보유하고 서드파티 코드를 실행한다면 필요합니다. 대부분의 작업은 알려진 패키지 레지스트리와 서비스에만 접근하면 됩니다. 이그레스 정책은 그 밖의 모든 것을 차단하므로, 손상된 종속성이 공격자의 서버로 시크릿을 보낼 수 없습니다.

작업 하나로 네트워크와 증거 항목을 점검하세요

워크플로 하나를 CRACI에서 실행하고, 이그레스 정책, 작업이 맺은 연결, 그리고 가져온 것의 SBOM을 확인하세요.

데모 예약