컨테이너 스캐닝 문제 해결
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
컨테이너 스캐닝을 사용할 때 다음과 같은 문제가 발생할 수 있습니다. 컨테이너 스캐닝 job이 수행하는 작업을 자세히 확인해야 할 때 상세 출력을 활성화합니다. 러너가 docker 실행기를 사용하고 NFS를 사용하는 환경 (예: /var/lib/docker가 NFS 마운트에 있는 경우)에서는 컨테이너 스캐닝이 다음과 같은 오류로 실패할 수 있습니다.
컨테이너 스캐닝을 사용할 때 다음과 같은 문제가 발생할 수 있습니다.
상세 로깅 활성화#
컨테이너 스캐닝 job이 수행하는 작업을 자세히 확인해야 할 때 상세 출력을 활성화합니다. 자세한 내용은 디버그 수준 로깅을 참고합니다.
docker: Error response from daemon: failed to copy xattrs#
러너가 docker 실행기를 사용하고 NFS를 사용하는 환경
(예: /var/lib/docker가 NFS 마운트에 있는 경우)에서는 컨테이너 스캐닝이
다음과 같은 오류로 실패할 수 있습니다.
docker: Error response from daemon: failed to copy xattrs: failed to set xattr "security.selinux" on /path/to/file: operation not supported.
이 오류는 현재 수정된 Docker 버그에서 비롯됩니다.
오류를 방지하려면 러너가 사용하는 Docker 버전이
18.09.03 이상인지 확인합니다. 자세한 내용은
이슈 #10241을 참고합니다.
오류: gl-container-scanning-report.json: no matching files#
이에 대한 정보는 일반 애플리케이션 보안 문제 해결 섹션을 참고합니다.
오류: unexpected status code 401 Unauthorized: Not Authorized#
이 오류는 AWS ECR의 이미지를 스캔할 때 AWS 리전이 구성되지 않은 경우 발생할 수 있습니다.
스캐너가 인증 토큰을 가져오지 못합니다.
SECURE_LOG_LEVEL을 debug로 설정하면 다음과 같은 로그 메시지가 표시됩니다.
[35mDEBUG[0m failed to get authorization token: MissingRegion: could not find region configuration
이를 해결하려면 CI/CD 변수에 AWS_DEFAULT_REGION을 추가합니다.
variables:
AWS_DEFAULT_REGION:
오류: unable to open a file: open /home/gitlab/.cache/trivy/ee/db/metadata.json#
압축된 Trivy 데이터베이스는 컨테이너의 /tmp 폴더에 저장되며, 런타임에 /home/gitlab/.cache/trivy/{ee|ce}/db로 추출됩니다. 이 오류는 러너 구성에 /tmp 디렉터리에 대한 볼륨 마운트가 있는 경우 발생할 수 있습니다.
이 문제를 해결하려면 /tmp 폴더 전체를 바인딩하는 대신 /tmp 안의 특정 파일이나 폴더(예: /tmp/myfile.txt)를 바인딩합니다.
오류: context deadline exceeded#
이 오류는 타임아웃이 발생했음을 의미합니다. 이를 해결하려면 충분히 긴 시간을 지정한 TRIVY_TIMEOUT 환경 변수를 container_scanning job에 추가합니다.
오래된 이미지를 기반으로 한 이미지에서 취약점이 탐지되지 않음#
Trivy는 더 이상 업데이트가 제공되지 않는 운영 체제 이미지는 스캔하지 않습니다.
이를 UI에 표시하는 방안은 이슈 433325에서 제안되었습니다.
예상한 취약점이 탐지되지 않음#
Trivy는 기본적으로 언어별 결과를 보고하지 않으므로, 이미지에 취약한 운영 체제 의존성이 없으면 빈 보고서가 생성될 수 있습니다. 언어별 결과를 활성화하려면 연결된 문서의 단계를 수행한 뒤 스캔을 다시 실행합니다.
경고: vulnerability database was built X days ago (max allowed age is Y days)#
다음과 같은 오류 메시지가 표시될 수 있습니다.
1 error occurred: * the vulnerability database was built 6 days ago (max allowed age is 5 days)
컨테이너 스캐닝 이미지가 5일보다 오래되면 컨테이너 스캐닝이 실패합니다. GitLab은 이미지를 매일 업데이트하지만, 예를 들어 오프라인 환경에서 이미지 복사본을 사용하면 오래된 상태가 될 수 있습니다. 최신 이미지를 사용해야 이미지에 저장된 Trivy 데이터베이스가 최신 상태로 유지됩니다.
이 문제를 해결하려면 컨테이너 스캐닝 이미지를 업데이트합니다. 자세한 내용은 로컬 컨테이너 이미지 업데이트를 참고합니다.
오류: Unknown scheme in CS_IMAGE. Allowed schemes: docker, archive#
CS_IMAGE 환경 변수에 잘못된 URI 스키마가 설정되었거나 스키마가 누락된 경우
이 오류가 발생할 수 있습니다.
이 문제는 이미지 참조가 지원되는 스키마를 사용하지 않을 때 발생합니다. 스키마는
레지스트리의 컨테이너 이미지에는 docker://, 로컬 tar 아카이브 파일에는
archive://여야 합니다.
표준 컨테이너 이미지를 스캔한다면 분석기가 기본적으로 Docker 스키마를 사용하므로
스키마를 생략하고 이미지 이름만 사용할 수 있습니다
(예: myapp:latest 또는 registry.example.com/myapp:latest).
CS_IMAGE 변수가 올바르게 설정되었는지, 오타나 지원되지 않는 접두사가 포함되지 않았는지 확인합니다.