운영 컨테이너 스캐닝

Tier: Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated
  • GitLab 14.8에서 소개되었습니다.
  • GitLab 15.4에서 starboard 지시문이 사용 중지되었습니다. Starboard 지시문은 GitLab 16.0에서 제거 예정입니다.

지원되는 아키텍처

GitLab 쿠버네티스 에이전트 v16.10.0 및 GitLab 에이전트 Helm 차트 버전 v1.25.0부터 운영 컨테이너 스캐닝(OCS)은 linux/arm64linux/amd64를 지원합니다. 이전 버전에서는 linux/amd64만 지원됩니다.

운영 컨테이너 스캐닝 활성화

클러스터 내 컨테이너 이미지를 보안 취약점을 스캔하기 위해 OCS를 사용할 수 있습니다. GitLab 에이전트 릴리스 16.9부터 OCS는 취약점을 스캔하기 위해 Trivy 이미지 주변에 래퍼 이미지를 사용합니다. GitLab 16.9 이전에 OCS는 직접적으로 Trivy 이미지를 사용했습니다.

OCS는 에이전트 구성 또는 프로젝트의 스캔 실행 정책을 사용하여 주기적으로 실행하도록 구성할 수 있습니다.

note
에이전트 구성스캔 실행 정책이 모두 구성된 경우, 스캔 실행 정책에서의 구성이 우선합니다.

에이전트 구성을 통한 활성화

에이전트 구성에 CADENCE 필드를 포함하여 클러스터 내 이미지 스캔을 활성화하려면 container_scanning 구성 블록을 에이전트 구성에 추가하세요. CADENCE 필드에는 스캔을 실행하는 CRON 식이 포함되어야 합니다.

container_scanning:
  cadence: '0 0 * * *' # 매일 00:00에 실행 (쿠버네티스 클러스터 시간)

CADENCE 필드는 필수입니다. GitLab은 다음과 같은 유형의 CRON 구문을 지원합니다:

  • 특정 시간에 1시간 단위로 실행되는 매일 CADENCE, 예: 0 18 * * *
  • 특정 요일과 시간에 매주 한 번 실행되는 주간 CADENCE, 예: 0 13 * * 0
note
다른 CRON 구문 요소는 사용중인 cron에서 지원된다면 CADENCE 필드에서 작동할 수 있지만, GitLab에서는 공식적으로 테스트 또는 지원하지는 않습니다.
note
CRON 식은 쿠버네티스 에이전트 파드의 시스템 시간을 사용하여 UTC에서 평가됩니다.

기본적으로 운영 컨테이너 스캐닝은 취약점을 스캔하지 않습니다. vulnerability_report 블록을 설정하여 namespaces 필드와 함께 사용하여 어떤 네임스페이스를 스캔할지 선택할 수 있습니다. 예를 들어, default, kube-system 네임스페이스만 스캔하려면 다음 구성을 사용할 수 있습니다:

container_scanning:
  cadence: '0 0 * * *'
  vulnerability_report:
    namespaces:
      - default
      - kube-system

대상 네임스페이스마다 다음의 작업부하 리소스 내 이미지를 스캔합니다:

  • Pod
  • ReplicaSet
  • ReplicationController
  • StatefulSet
  • DaemonSet
  • CronJob
  • Job

스캔 실행 정책을 통한 활성화

모든 이미지를 스캔하도록 스캔 실행 정책을 사용하여 쿠버네티스 클러스터 내에서 운영 컨테이너 스캐닝을 활성화하려면 스캔 실행 정책 편집기를 사용할 수 있습니다. 새로운 일정 규칙을 만들 수 있습니다.

note
스캔 실행 정책 편집기를 사용하려면 쿠버네티스 에이전트가 클러스터에서 실행 중이어야 합니다.

다음은 Kubernetes 에이전트가 연결된 클러스터 내에서 운영 컨테이너 스캐닝을 활성화하는 정책의 예입니다:

- name: 에이전트 내 my-gitlab-agent를 통해 default 및 kube-system 네임스페이스 연결된 클러스터에서 컨테이너 스캔 강제 실행
  enabled: true
  rules:
  - type: schedule
    cadence: '0 10 * * *'
    agents:
      <agent-name>:
        namespaces:
        - 'default'
        - 'kube-system'
  actions:
  - scan: container_scanning

일정 규칙의 키는 다음과 같습니다:

  • cadence (필수): 스캔이 실행되는 CRON 식
  • agents:<agent-name> (필수): 스캔에 사용할 에이전트의 이름
  • agents:<agent-name>:namespaces (선택적): 스캔할 쿠버네티스 네임스페이스. 생략되면 모든 네임스페이스가 스캔됩니다.
note
다른 CRON 구문 요소가 사용된 경우, 사용 중인 cron에서 지원된다면 CADENCE 필드에서 작동할 수 있지만, GitLab에서는 공식적으로 테스트 또는 지원하지는 않습니다.
note
CRON 식은 쿠버네티스 에이전트 파드의 시스템 시간을 사용하여 UTC 에서 평가됩니다.

스캔 실행 정책 문서에서 전체 스키마를 확인할 수 있습니다.

스캐너 리소스 요구 사항 구성

기본적으로 스캐너 파드의 기본 리소스 요구 사항은 다음과 같습니다.

requests:
  cpu: 100m
  memory: 100Mi
limits:
  cpu: 500m
  memory: 500Mi

이를 resource_requirements 필드로 사용자 정의할 수 있습니다.

container_scanning:
  resource_requirements:
    requests:
      cpu: '0.2'
      memory: 200Mi
    limits:
      cpu: '0.7'
      memory: 700Mi

CPU에 대해 분수 값을 사용할 때, 값을 문자열로 형식화하세요.

참고: 리소스 요구 사항은 에이전트 구성을 사용하여 설정할 수 있습니다. scan execution policies를 통해 Operational Container Scanning을 활성화한 경우, 리소스 요구 사항을 에이전트 구성 파일 내에서 정의해야 합니다.

클러스터 취약점 보기

GitLab에서 취약성 정보를 보려면:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 에이전트 구성 파일이 포함된 프로젝트를 찾습니다.
  2. 운영 > Kubernetes 클러스터을 선택합니다.
  3. 에이전트 탭을 선택합니다.
  4. 클러스터 취약점을 보려면 에이전트를 선택합니다.

클러스터 에이전트 보안 탭 UI

이 정보는 운영 취약성에서도 찾을 수 있습니다.

참고: 최소한 개발자 역할이 있어야 합니다.

비공개 이미지 스캔

비공개 이미지를 스캔하려면, 스캐너는 이미지 풀 시크릿(직접 참조 및 서비스 계정에서)에 의존하여 이미지를 풉니다.

제한 사항

GitLab Agent 16.9부터 운영용 컨테이너 스캐닝:

  • 최대 100MB까지의 Trivy 보고서를 처리합니다. 이전 릴리스에서는 이 제한이 10MB입니다.
  • GitLab Agent가 fips 모드에서 실행될 때 비활성화됩니다.

문제 해결

Trivy 스캔 실행 오류. 컨테이너 종료 이유: OOMKilled

너무 많은 리소스가 스캔되거나 스캔되는 이미지가 큰 경우 OCS가 OOM 오류로 실패할 수 있습니다. 이를 해결하려면 사용 가능한 메모리 양을 늘리기 위해 리소스 요구 사항을 구성하세요.