운영 컨테이너 스캔

Tier: Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated
History
  • Deprecated the starboard directive in GitLab 15.4. The starboard directive is scheduled for removal in GitLab 16.0.

지원되는 아키텍처

GitLab 쿠버네티스 에이전트 16.10.0 및 이후, 그리고 GitLab 에이전트 Helm 차트 1.25.0 및 이후에는 운영 컨테이너 스캔(OCS)이 linux/arm64linux/amd64를 지원합니다. 이전 버전의 경우, linux/amd64만 지원됩니다.

운영 컨테이너 스캔 활성화

보안 취약점을 위해 클러스터 내 컨테이너 이미지를 스캔하기 위해 OCS를 사용할 수 있습니다. GitLab 에이전트 16.9 이상에서 OCS는 취약점을 스캔하기 위해 Trivy를 둘러싼 래퍼 이미지를 사용합니다. GitLab 16.9 이전에는 OCS가 직접 Trivy 이미지를 사용했습니다.

OCS는 ‘에이전트 구성’ 또는 프로젝트의 스캔 실행 정책을 사용하여 일정에 따라 구성할 수 있습니다.

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

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

에이전트 구성에 ‘컨테이너 스캔’ 구성 블록을 추가하여 쿠버네티스 클러스터 내 이미지를 스캔하도록 설정합니다. ‘cadence’ 필드에는 스캔이 실행되는 CRON 표현식을 포함해야 합니다.

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

‘cadence’ 필드가 필요합니다. GitLab은 ‘cadence’ 필드에 대해 다음 유형의 CRON 구문을 지원합니다:

  • 특정 시간에 매 시간마다 실행되는 일일 일정, 예: 0 18 * * *
  • 특정 일 및 시간에 매주 한 번 실행되는 주간 일정, 예: 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: '내-gitlab-에이전트를 통해 연결된 클러스터의 기본  kube-system 네임스페이스에 대한 컨테이너 스캔 강제 실시'
  enabled: true
  rules:
  - type: schedule
    cadence: '0 10 * * *'
    agents:
      <에이전트-이름>:
        namespaces:
        - 'default'
        - 'kube-system'
  actions:
  - scan: container_scanning

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

  • cadence (필수): 스캔이 실행되는 CRON 표현식
  • 에이전트-이름 (필수): 스캔에 사용할 에이전트의 이름
  • 에이전트-이름:namespaces (선택 사항): 스캔할 Kubernetes 네임스페이스. 생략된 경우 모든 네임스페이스가 스캔됩니다.
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에 대해 분수 값을 사용할 때는 값의 형식을 문자열로 지정합니다.

note
리소스 요구사항은 에이전트 구성을 통해만 설정할 수 있습니다. 만약 운영 컨테이너 스캔스캔 실행 정책을 통해 활성화했다면 리소스 요구사항을 에이전트 구성 파일 내에서 정의해야 합니다.

클러스터 취약점 보기

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

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

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

이 정보는 또한 운영 취약점에서 찾을 수 있습니다.

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

비공개 이미지 스캔

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

제한 사항

GitLab 에이전트 16.9 이상의 운영 컨테이너 스캔:

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

문제 해결

Error running Trivy scan. Container terminated reason: OOMKilled

OCS는 스캔해야 할 자원이 너무 많거나 스캔할 이미지가 큰 경우 OOM 오류로 실패할 수 있습니다. 이를 해결하려면 리소스 요구사항을 구성하여 사용 가능한 메모리 양을 증가시킵니다.