
GitLab Container Scanning이란?
GitLab Container Scanning으로 배포 전 컨테이너 이미지의 취약점과 악성코드를 탐지하고 엔터프라이즈 보안과 규정 준수를 강화하세요. 스캔을 자동화하고 위험을 줄이며 안전한 공급망을 구축하세요.

GitLab Container Scanning은 컨테이너화된 애플리케이션의 보안과 무결성을 유지하는 데 필수적인 도구입니다. 소프트웨어 배포에 컨테이너화를 도입하는 조직이 늘면서 이 기술을 이해하고 활용하는 일이 더욱 중요해졌습니다.
이 글에서는 GitLab Container Scanning의 작동 방식과 지원하는 컨테이너 형식을 자세히 살펴봅니다. 모범 사례와 실제 사례를 통해 프로젝트에 설정하는 방법도 알아봅니다. 이 가이드는 개발 워크플로를 원활하게 유지하면서 안전한 개발 프로세스를 구축하는 데 필요한 이해를 제공합니다.

GitLab Container Scanning 이해하기
보안의 핵심인 GitLab Container Scanning을 이해하는 것은 GitLab이나 Docker 같은 다른 컨테이너화 플랫폼에서 컨테이너화된 애플리케이션을 보호하려는 이들에게 중요합니다. GitLab Container Scanning은 소프트웨어의 각 구성 요소에서 공격자가 악용할 수 있는 취약점을 검사합니다. 소프트웨어를 이루는 요소에 백신 검사를 실시하는 것과 같습니다!
이 검사는 컨테이너에 포함된 소프트웨어를 면밀히 살펴 문제와 잠재적 위험을 탐지합니다. 최신 소프트웨어 개발에서 중요한 단계입니다. 컨테이너는 일반적으로 여러 출처의 구성 요소로 이루어지며, 애플리케이션의 무결성을 유지하려면 모든 요소가 보안 표준을 준수해야 합니다.
GitLab Container Scanning은 컨테이너화된 소프트웨어 애플리케이션에 필수적인 보호를 제공합니다. 취약점을 조기에 식별해 시스템을 안전하게 유지하고 개발자와 이해관계자 모두에게 확신을 줍니다.
GitLab Container Scanning은 어떻게 작동하나요?
GitLab Container Scanning은 컨테이너 이미지의 취약점을 자동으로 식별하고 해결해 신속하고 안정적인 대응을 지원합니다. 작동 방식은 다음과 같습니다:
GitLab Container Scanning은 CI/CD 파이프라인에 통합할 수 있습니다. 따라서 스캔은 일회성 작업이 아니라 각 빌드와 푸시의 필수 단계가 됩니다. 보안 검사가 개발 과정 내내 지속적으로 이루어집니다.
취약점 데이터베이스 활용
이 도구는 컨테이너에 사용된 소프트웨어 패키지와 라이브러리를 알려진 취약점 데이터베이스와 대조합니다. 이를 통해 컨테이너에 존재할 수 있는 알려진 위협을 쉽게 식별합니다.
보고서 생성
GitLab Container Scanning은 검사가 끝나면 종합 보고서를 생성합니다. 발견된 취약점과 심각도 범주를 정리하고, 필요한 경우 수정 방법이나 위험 완화 전략을 제안합니다.
대응 자동화
GitLab Container Scanning에서는 설정에 따라 자동 대응을 지정할 수 있습니다. 개발 팀이 처리할 이슈를 생성하거나, 심각한 취약점이 발견되면 CI/CD 파이프라인을 중단해 안전하지 않은 코드가 프로덕션에 배포되지 않도록 할 수 있습니다.
취약점 해결과 지속적인 모니터링
지속적인 모니터링 도구는 컨테이너가 업데이트될 때마다 스캔을 수행해 취약점 해결을 지원합니다. 변경으로 인해 발생할 수 있는 취약점을 자동으로 확인하고, 시간이 지나며 새롭게 나타나는 취약점으로부터 지속적으로 보호합니다.

CNAPP 마켓 가이드
클라우드 네이티브 애플리케이션 보호 플랫폼에 대한 가트너 시장 가이드에서 CNAPP 시장 현황에 대한 주요 인사이트를 확인하세요.
GitLab이 지원하는 컨테이너 형식
GitLab의 Container Scanning이 특정 컨테이너 형식을 지원한다는 것은 컨테이너 내부의 데이터 구조와 배열을 검사한다는 뜻입니다. Trivy와 Grype 스캔 도구는 다양한 Linux 배포판을 폭넓게 지원하므로 여러 환경에서 취약점을 신속하게 식별합니다.
오픈 소스 스캔 도구:
- Trivy(컨테이너 및 운영 체제용 오픈 소스 취약점 스캐너): Trivy는 컨테이너와 운영 체제에 특화된 오픈 소스 취약점 스캐너입니다. 경량이면서도 철저한 스캔으로 다양한 Linux 배포판의 취약점을 식별합니다.
- Grype: Grype는 컨테이너 이미지의 정확한 취약점 데이터를 제공합니다. 보안 위협을 철저히 분석하고 구체적인 대응에 활용할 수 있는 취약점 데이터를 제공해 Trivy를 보완합니다.
지원되는 Linux 배포판
컨테이너 형식과 배포판의 차이를 이해하는 것이 중요합니다. 컨테이너 형식은 컨테이너 내 데이터 저장 방식과 관련되고, 배포판은 GitLab의 Trivy 및 Grype 서비스가 지원하는 다양한 Linux OS 버전을 가리킵니다. GitLab은 폭넓은 배포판을 지원합니다. 주요 목록은 다음과 같습니다:
- Alma Linux: Trivy로 스캔
- Alpine Linux: Grype와 Trivy 모두 지원
- Amazon Linux: Grype와 Trivy 모두 지원
- BusyBox: Grype로 스캔
- CentOS: Grype와 Trivy 모두 지원
- CBL-Mariner: Trivy로 스캔
- Debian: Grype와 Trivy 모두 지원
- Distroless: Grype와 Trivy 모두 지원
- Oracle Linux: Grype와 Trivy 모두 지원
- Photon OS: Trivy로 스캔
- Red Hat (RHEL): Grype와 Trivy 모두 지원
- Rocky Linux: Trivy로 스캔
- SUSE: Trivy로 스캔
- Ubuntu: Grype와 Trivy 모두 지원
폭넓은 배포판 지원의 중요성
GitLab Container Scanning은 컨테이너화된 애플리케이션이 개발자 사이에서 인기를 얻으면서, 개발자들이 성능, 보안, 호환성 또는 개인적 선호도에 따라 서로 다른 Linux 배포판을 선택하는 만큼 폭넓은 배포판 지원이 점점 더 중요해지고 있음을 잘 알고 있습니다. 여러 배포판을 동시에 지원함으로써, GitLab Container Scanning은 개발자가 어떤 환경을 선택하든 애플리케이션 보안을 지속적으로 유지할 수 있도록 합니다 – 이는 컨테이너화된 워크로드에 포괄적인 보안을 제공하겠다는 약속을 더욱 확고히 합니다.
GitLab에서 컨테이너 스캔을 설정하는 방법은?
GitLab 컨테이너 스캔을 설정하면 컨테이너화된 애플리케이션의 취약점을 자동으로 스캔할 수 있습니다. 일반적인 설정 절차는 다음과 같습니다:
1. 자동 병합 요청으로 컨테이너 스캔 활성화
GitLab 14.9에서는 자동 병합 요청으로 컨테이너 스캔을 빠르고 간편하게 활성화할 수 있습니다. 방법은 다음과 같습니다:
- 설정할 프로젝트로 이동하세요.
- 보안 > 보안 구성으로 이동하세요.
- 컨테이너 스캔 행에서 병합 요청으로 구성을 선택하세요.
이 절차를 시작하면 컨테이너 스캔 활성화에 필요한 변경 사항이 담긴 병합 요청이 자동으로 생성됩니다. 내용을 검토한 후 병합하면 구성이 완료됩니다.
2. .gitlab-ci.yml 파일로 구성:
컨테이너 스캔을 수동으로 구성하려면 .gitlab-ci.yml 파일에 해당 템플릿을 추가하세요:
include: - template: Security/Container-Scanning.gitlab-ci.yml이 템플릿은 Docker 이미지의 취약점을 스캔하고 결과를 컨테이너 스캔 보고서 아티팩트로 저장하는 container_scanning 작업을 CI/CD 파이프라인에 추가합니다.
Docker 이미지를 빌드하고 스캔하는 .gitlab-ci.yml 파일의 예시는 다음과 같습니다.
include: - template: Jobs/Build.gitlab-ci.yml - template: Security/Container-Scanning.gitlab-ci.yml container_scanning: variables: CS_DEFAULT_BRANCH_IMAGE: $CI_REGISTRY_IMAGE/$CI_DEFAULT_BRANCH:$CI_COMMIT_SHA3. 컨테이너 스캔 설정 사용자 지정
GitLab에서는 상세 출력과 특정 레지스트리 인증부터 세분화된 결과 제공까지, 필요에 맞게 컨테이너 스캔 방식을 설정할 수 있습니다.
예를 들어 상세 출력을 활성화하려면 .gitlab-ci.yml 파일을 다음과 같이 수정하세요:
include: - template: Security/Container-Scanning.gitlab-ci.yml variables: SECURE_LOG_LEVEL: 'debug'4. 원격 레지스트리의 이미지 스캔:
다음 구성을 사용하면 프로젝트의 레지스트리가 아닌 다른 레지스트리에 있는 이미지도 스캔할 수 있습니다:
include: - template: Security/Container-Scanning.gitlab-ci.yml container_scanning: variables: CS_IMAGE: example.com/user/image:tag자동 병합 요청부터 수동 구성까지, GitLab 컨테이너 스캔은 직관적이고 사용하기 쉽습니다. GitLab은 강력한 스캔 도구로 보안 검사를 개발 워크플로에 통합하며, 안전한 현대 소프트웨어 개발에서 중요한 역할을 합니다.
GitLab 컨테이너 스캔 모범 사례
1. 스캔 도구를 정기적으로 업데이트
Trivy와 Grype 같은 스캔 도구를 최신 상태로 유지하는 것이 중요합니다. 그래야 새로운 취약점이 나타나는 즉시 탐지하고 지원되는 배포판의 변경 사항과도 호환성을 유지할 수 있습니다. 정기적인 업데이트가 이를 뒷받침합니다.
2. 개발 초기부터 스캔 통합
개발 주기에 컨테이너 스캔을 일찍 도입할수록 취약점을 더 빨리 식별하고 해결할 수 있습니다. GitLab 컨테이너 스캔을 지속적 통합 (CI) 파이프라인에 포함하면 코드가 푸시될 때마다 자동으로 스캔합니다 – 스캔이 개발 워크플로의 일부가 되어 취약점을 더 빠르게 식별하고 해결할 수 있습니다.
3. 필요에 맞게 스캔 조정
모든 프로젝트에 동일한 스캔이 필요한 것은 아닙니다. 출력 상세 수준과 스캔할 레지스트리를 지정하거나 변수를 설정하는 등 프로젝트 요구 사항에 맞게 조정하면 더 빠르고 효율적으로 스캔할 수 있습니다. .gitlab-ci.yml 파일의 사용자 지정 기능으로 스캔을 세밀하게 조정하세요.
4. 스캔 보고서를 정기적으로 검토하고 조치
스캔 실행만으로는 충분하지 않습니다 – 발견된 문제를 검토하고 신속히 해결해야 합니다. 컨테이너 스캔 보고서 아티팩트를 정기적으로 검토하고 체계적으로 조치하면 취약점을 빠르게 식별하고 해결할 수 있습니다. 해결 워크플로를 기존 개발 프로세스에 통합하면 이 중요한 작업을 더 원활하게 진행할 수 있습니다.
GitLab 컨테이너 스캔을 활용한 취약점 해결 워크플로
GitLab 컨테이너 스캔의 취약점 해결 워크플로는 컨테이너 이미지의 취약점을 식별하고 효율적이고 체계적으로 해결하는 여러 단계로 구성됩니다. 일반적인 워크플로는 다음과 같습니다:
- 취약점 식별: GitLab의 컨테이너 스캔 기능과 Trivy 또는 Grype를 사용한 보안 스캔으로 취약점을 발견합니다. 이 단계에서 발견된 모든 취약점의 상세 보고서가 생성됩니다.
- 발견 사항 분석: 컨테이너 스캔 보고서의 발견 사항을 면밀히 검토해 심각도, 유형, 취약점의 출처를 파악합니다. 즉시 조치가 필요한 문제를 우선순위에 따라 해결합니다.
- 해결 우선순위 지정: 분석 결과에 따라 문제의 우선순위를 정합니다. 애플리케이션에 즉각적인 위협이 되는 취약점을 우선 고려하며, 영향과 악용 용이성도 판단에 반영할 수 있습니다.
- 해결 계획 수립: 취약점의 우선순위를 정한 후에는 각 취약점을 해결할 계획을 수립합니다. 계획에는 업데이트 설치, 변경 사항 적용, 코드 직접 수정 등 취약점별 위험을 줄이는 데 필요한 조치가 포함됩니다.
- 수정 사항 적용: 계획에 따라 GitLab 병합 요청을 사용해 영향을 받는 코드베이스의 코드, 구성 설정 또는 종속성을 수정합니다. 이 과정에서는 개발자, 보안 팀 및 주요 관계자 간의 협업이 중요합니다.
- 수정 사항 검증: 수정 사항을 적용한 후에는 새로운 문제를 만들지 않으면서 취약점을 해결했는지 추가로 확인해야 합니다. 컨테이너 이미지를 다시 스캔하거나 추가 테스트를 수행해 취약점이 제거되었는지, 새로운 보안 허점이 생겼는지 검증할 수 있습니다.
- 모니터링 및 지속적인 개선: 취약점 조치 워크플로는 하루아침에 완성되지 않습니다; 지속적인 모니터링, 스캔 및 개선을 통해 효과를 유지할 수 있습니다. 반복적으로 개선해야 장기적으로도 효과를 유지할 수 있습니다.
- 모니터링 및 지속적 개선: 수정 작업은 단번에 이루어지지 않습니다. 지속적인 모니터링, 스캔 및 수정을 통해 장기적인 실행 가능성을 보장해야 합니다. 반복적 접근 방식을 채택하면 장기적인 실행 가능성을 확보할 수 있습니다.
실제 사례와 활용 사례
1. 은행
은행 애플리케이션에서는 보안이 무엇보다 중요합니다. 기존의 취약점 탐지 방식은 제때 취약점을 발견하지 못하는 경우가 많습니다; 은행 앱의 CI/CD 파이프라인에 GitLab Container Scanning을 추가하면 실시간 검사와 취약점 조치가 가능해집니다. 이를 통해 전반적인 보안을 강화하고 업계 전반의 신뢰와 규정 준수를 뒷받침할 수 있습니다.
2. 의료
의료 시스템은 엄격한 규제 지침에 따라 보호해야 하는 민감한 데이터를 처리하지만, 수동 점검은 번거롭고 오류가 발생하기 쉽습니다. GitLab Container Scanning을 취약점 평가와 지속적인 규정 준수 보고 프로세스에 도입하면 의료 기관은 보안 침해를 예방하고 보고 절차도 간소화할 수 있습니다.
3. 기술 스타트업
기술 스타트업은 빠른 개발과 보안 기준 준수 사이에서 균형을 잡기 어렵습니다. GitLab Container Scanning은 두 목표를 함께 달성합니다; 컨테이너화된 애플리케이션의 취약점을 지속적으로 스캔하면 보안을 유지하면서 개발 주기를 단축할 수 있습니다 – 스타트업은 강력한 보안 태세를 유지하면서 민첩하게 혁신할 수 있습니다.

SentinelOne 작동 보기
센티넬원 제품 전문가와의 일대일 데모를 통해 AI 기반 클라우드 보안으로 조직을 보호하는 방법을 알아보세요.
결론
GitLab Container Scanning은 현대 개발 환경의 핵심 요소로 자리 잡았습니다. 조직은 컨테이너화된 애플리케이션의 취약점을 빠르고 안정적으로 탐지할 수 있습니다. 개발 파이프라인에 자연스럽게 통합하고 개발 초기부터 취약점에 대한 가시성을 확보하면 개발 과정에 보안을 내재화할 수 있습니다. 위험을 줄이고 전반적인 보안 태세를 강화할 수 있습니다.
GitLab Container Scanning은 효과적인 DevSecOps 전략의 핵심 요소로, 지속적인 보안 개선을 촉진합니다. 규정 준수, 고객 데이터 보호, 민첩한 개발 주기 유지까지 혁신 과정에서 보안을 우선순위에 두고 다양한 산업과 활용 사례의 보안 요구사항을 충족합니다.
GitLab Container Scanning 자주 묻는 질문
GitLab Container Scanning은 CI/CD 과정에서 컨테이너 이미지의 취약점을 검사합니다. Trivy와 같은 스캐너로 기본 OS 패키지부터 애플리케이션 종속성까지 각 레이어를 검사한 후 이미지를 프로덕션 환경에 배포합니다. GitLab의 Container-Scanning CI 템플릿을 포함하거나 원클릭 병합 요청을 통해 활성화할 수 있습니다.
결과는 JSON 아티팩트와 파이프라인의 Security 탭에 표시되며, 위험한 CVE와 지원이 종료된 OS 버전을 알려줍니다.
기본 이미지와 OS 패키지의 알려진 CVE를 탐지하고, 해당 기능을 활성화한 경우 Java나 Python 패키지 같은 언어별 라이브러리의 취약점도 탐지합니다. 보안 업데이트가 더 이상 제공되지 않는 지원 종료 운영체제도 알려줍니다. 기반 스캐너인 Trivy는 NVD, 배포판 보안 추적 시스템, GitLab 자체 권고 데이터베이스 등의 자료를 사용해 취약점을 식별하고 CVSS 점수와 악용 가능성에 따라 분류합니다.
GitLab의 기본 제공 템플릿을 .gitlab-ci.yml.
include:
- template: Jobs/Container-Scanning.gitlab-ci.yml
또는 프로젝트에서 Secure > Security configuration으로 이동해 Configure with a merge request를 클릭한 다음 병합하세요. 필요한 작업이 파이프라인에 추가됩니다. 이미 Docker 이미지를 빌드해 프로젝트 레지스트리에 푸시하고 있다면 추가 스크립트는 필요하지 않습니다
include:
- template: Jobs/Container-Scanning.gitlab-ci.yml
또는 프로젝트의 보안 > 보안 구성으로 이동하여 병합 요청으로 구성하기를 클릭한 후 병합하세요. 그러면 필요한 작업이 파이프라인에 삽입됩니다. Docker 이미지를 빌드하여 프로젝트 레지스트리에 푸시하는 경우 추가 스크립팅이 필요하지 않습니다.
파이프라인 실행이 끝나면 Build > Pipelines를 열고 실행 항목을 선택한 다음 Security 탭을 선택하세요. 각 탐지 항목의 심각도, CVSS 점수, 악용 가능성(EPSS), 취약점 조치 지침을 확인할 수 있습니다. 원본 스캔 보고서(gl-container-scanning-report.json)와 CycloneDX SBOM(gl-sbom-report.cdx.json)은 Job Artifacts에서 확인할 수 있습니다.
Ultimate 요금제에서는 병합 요청에 표시되는 결과와 기본 브랜치의 통합 Vulnerability Report도 확인할 수 있습니다.
네. 각 취약점 항목에는 문제와 영향, 패키지 업그레이드나 구성 변경과 같은 권장 조치 단계를 설명하는 Description이 포함됩니다. Ultimate 요금제에서는 GitLab이 Dockerfile이나 패키지 매니페스트를 수정된 버전으로 업데이트하는 병합 요청 형태의 자동 조치 패치도 생성할 수 있습니다.
리포지토리의 루트에 vulnerability-allowlist.yml을 생성하세요. 오탐으로 확인된 CVE ID를 전체 또는 이미지별로 나열합니다. 그러면 GitLab은 이후 스캔 보고서에서 해당 CVE를 제외하고 작업 로그에 “Approved”로 표시합니다. 실제 문제를 숨기지 않으면서 Security 탭에서 실질적인 위험에 집중할 수 있습니다.



