- 디버그 수준 로깅
Error response from daemon: error processing tar file: docker-tar: relocation error
- 의존성 스캐닝 작업이 예기치 않게 실행되고 있습니다
- 오류:
dependency_scanning은 구성 용도로만 사용되며, 스크립트가 실행되어서는 안 됩니다
- Java 기반 프로젝트용 여러 인증서 가져오기
- 의존성 스캐닝 작업이
strconv.ParseUint: parsing "0.0": invalid syntax
메시지와 함께 실패 - 메시지
<file> does not exist in <commit SHA>
DS_MAJOR_VERSION
또는DS_ANALYZER_IMAGE
설정 후 더 이상 최신 Docker 이미지를 가져오지 못함- setuptools 프로젝트의 의존성 스캐닝이
use_2to3 is invalid
오류로 실패 - psycopg2를 사용하는 프로젝트의 의존성 스캐닝이
pg_config executable not found
오류로 실패 CI_JOB_TOKEN
과 함께poetry config http-basic
을 사용할 때NoSuchOptionException
- 오류: 프로젝트에 해결되지 않은 의존성이 있습니다
- Go 프로젝트에서 빌드 제약 설정
- Go 프로젝트의 의존성 스캐닝이 잘못된 양성을 반환
ssh
사용 시Host key verification failed
ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE
ERROR: In --require-hashes mode, all requirements must have their versions pinned with ==
- 편집 가능한 플래그는 Python의 의존성 스캔을 중단시킬 수 있습니다
- SBT로 메모리 부족 오류 처리
- NPM 프로젝트에
package-lock.json
파일 없음
의존성 스캐닝 문제 해결
의존성 스캐닝 작업을 수행하는 동안 다음과 같은 문제가 발생할 수 있습니다.
디버그 수준 로깅
디버그 수준 로깅은 문제를 해결하는 데 도움이 될 수 있습니다. 자세한 내용은
디버그 수준 로깅을 참조하세요.
특정 언어 또는 패키지 관리자에 대한 지원이 누락된 경우의 우회 방법
“지원되는 언어” 섹션을 참조하면
일부 의존성 정의 파일은 아직 지원되지 않음을 알 수 있습니다.
하지만 언어, 패키지 관리자 또는 제3자 도구가 정의 파일을
지원되는 형식으로 변환할 수 있다면 의존성 스캐닝이 가능합니다.
일반적으로 접근 방식은 다음과 같습니다:
-
.gitlab-ci.yml
파일에 전용 변환기 작업을 정의하세요.
변환을 용이하게 하기 위해 적절한 Docker 이미지, 스크립트 또는 두 가지를 사용하세요. -
해당 작업이 변환된 지원 파일을 아티팩트로 업로드하도록 합니다.
-
변환된 정의 파일을 사용하기 위해
dependency_scanning
작업에
dependencies: [<your-converter-job>]
를 추가하세요.
예를 들어, pyproject.toml
파일만 가지고 있는 Poetry 프로젝트는
다음과 같이 poetry.lock
파일을 생성할 수 있습니다.
include:
- template: Jobs/Dependency-Scanning.gitlab-ci.yml
stages:
- test
gemnasium-python-dependency_scanning:
# Work around https://gitlab.com/gitlab-org/gitlab/-/issues/32774
before_script:
- pip install "poetry>=1,<2" # 또는 다른 방법을 통해: https://python-poetry.org/docs/#installation
- poetry update --lock # 분석할 잠금 파일을 생성합니다.
Error response from daemon: error processing tar file: docker-tar: relocation error
이 오류는 의존성 스캐닝 작업을 실행하는 Docker 버전이 19.03.0
인 경우 발생합니다.
Docker 19.03.1
이상으로 업데이트를 고려하세요. 이전 버전은 영향받지 않습니다.
자세한 내용은
이 문제를 참조하세요.
경고 메시지 gl-dependency-scanning-report.json: no matching files
이에 대한 정보는
일반 애플리케이션 보안 문제 해결 섹션을 참조하세요.
Error response from daemon: error processing tar file: docker-tar: relocation error
이 오류는 의존성 스캐닝 작업을 실행하는 Docker 버전이 19.03.0
인 경우 발생합니다.
Docker 19.03.1
이상으로 업데이트를 고려하세요. 이전 버전은 영향받지 않습니다.
자세한 내용은
이 문제를 참조하세요.
의존성 스캐닝 작업이 예기치 않게 실행되고 있습니다
의존성 스캐닝 CI 템플릿
은 rules:exists
구문을 사용합니다.
이 지침은 10000개의 검사로 제한되며, 이 숫자에 도달하면 항상 true
를 반환합니다.
이로 인해, 저장소의 파일 수에 따라 스캐너가 귀하의 프로젝트를 지원하지 않더라도
의존성 스캐닝 작업이 트리거될 수 있습니다. 이 제한에 대한
자세한 내용은 the rules:exists
documentation을 참조하세요.
오류: dependency_scanning은 구성 용도로만 사용되며, 스크립트가 실행되어서는 안 됩니다
자세한 내용은 GitLab Secure 문제 해결 섹션을 참조하세요.
Java 기반 프로젝트용 여러 인증서 가져오기
gemnasium-maven
분석기는 keytool
을 사용하여 ADDITIONAL_CA_CERT_BUNDLE
변수의 내용을 읽으며, 이는 단일 인증서 또는 인증서 체인을 가져옵니다. 여러 개의 관련 없는 인증서는 무시되며, 첫 번째 인증서만 keytool
에 의해 가져옵니다.
여러 개의 관련 없는 인증서를 분석기에 추가하기 위해 gemnasium-maven-dependency_scanning
작업의 정의에 다음과 같은 before_script
를 선언할 수 있습니다:
gemnasium-maven-dependency_scanning:
before_script:
- . $HOME/.bashrc # 자바 도구를 스크립트에서 사용할 수 있도록 설정
- OIFS="$IFS"; IFS=""; echo $ADDITIONAL_CA_CERT_BUNDLE > multi.pem; IFS="$OIFS" # ADDITIONAL_CA_CERT_BUNDLE 변수를 PEM 파일에 작성
- csplit -z --digits=2 --prefix=cert multi.pem "/-----END CERTIFICATE-----/+1" "{*}" # 파일을 개별 인증서로 분할
- for i in `ls cert*`; do keytool -v -importcert -alias "custom-cert-$i" -file $i -trustcacerts -noprompt -storepass changeit -keystore /opt/asdf/installs/java/adoptopenjdk-11.0.7+10.1/lib/security/cacerts 1>/dev/null 2>&1 || true; done # 각 인증서를 keytool로 가져오기 (주: keystore 위치는 사용 중인 자바 버전에 관련이 있으며 다른 버전에 맞게 변경해야 함)
- unset ADDITIONAL_CA_CERT_BUNDLE # 변수를 언셋하여 분석기가 가져오기를 중복하지 않도록 함
의존성 스캐닝 작업이 strconv.ParseUint: parsing "0.0": invalid syntax
메시지와 함께 실패
Docker-in-Docker는 지원되지 않으며, 이를 호출하려는 시도가 이 오류의 주요 원인입니다.
이 오류를 수정하려면 의존성 스캐닝에 대한 Docker-in-Docker를 비활성화하세요. 각각의 분석기에 대해 CI/CD 파이프라인에서 실행되는 개별 <analyzer-name>-dependency_scanning
작업이 생성됩니다.
include:
- template: Dependency-Scanning.gitlab-ci.yml
variables:
DS_DISABLE_DIND: "true"
메시지 <file> does not exist in <commit SHA>
파일의 의존성 위치가 표시되면 링크의 경로는 특정 Git SHA로 이동합니다.
그러나 의존성 스캐닝 도구가 검토한 잠금 파일이 캐시되었을 경우, 해당 링크를 선택하면 다음과 같은 메시지와 함께 리포지토리 루트로 리디렉션됩니다:
<file> does not exist in <commit SHA>
.
잠금 파일은 빌드 단계에서 캐시되고 스캔이 수행되기 전에 의존성 스캐닝 작업에 전달됩니다. CI_BUILDS_DIR
디렉토리에 잠금 파일이 존재하면 의존성 스캐닝 작업이 트리거됩니다.
이 경고를 방지하려면 잠금 파일을 커밋해야 합니다.
DS_MAJOR_VERSION
또는 DS_ANALYZER_IMAGE
설정 후 더 이상 최신 Docker 이미지를 가져오지 못함
특정 이유로 DS_MAJOR_VERSION
또는 DS_ANALYZER_IMAGE
를 수동으로 설정한 경우, 최신 패치 버전의 분석기를 다시 가져오기 위해 구성을 업데이트해야 합니다. .gitlab-ci.yml
파일을 편집하고 다음 중 하나를 수행하세요:
-
DS_MAJOR_VERSION
을 현재 의존성 스캐닝 템플릿에서 볼 수 있는 최신 버전과 일치하도록 설정합니다. -
DS_ANALYZER_IMAGE
변수를 직접 하드코딩한 경우, 이를 현재 의존성 스캐닝 템플릿에서 찾을 수 있는 최신 줄로 변경합니다. 줄 번호는 편집한 스캐닝 작업에 따라 달라집니다.
예를 들어, gemnasium-maven-dependency_scanning
작업은 DS_ANALYZER_IMAGE
가 "$SECURE_ANALYZERS_PREFIX/gemnasium-maven:$DS_MAJOR_VERSION"
로 설정되어 있기 때문에 최신 gemnasium-maven
Docker 이미지를 가져옵니다.
setuptools 프로젝트의 의존성 스캐닝이 use_2to3 is invalid
오류로 실패
2to3에 대한 지원이 setuptools
버전 v58.0.0
에서 제거되었습니다.
의존성 스캐닝( python 3.9
실행)은 setuptools
버전 58.1.0+
를 사용하며, 이 버전은 2to3
를 지원하지 않습니다. 따라서 lib2to3
에 의존하는 setuptools
의존성이 다음과 같은 메시지로 실패합니다:
error in <dependency name> setup command: use_2to3 is invalid
이 오류를 해결하려면 분석기의 setuptools
버전을 다운그레이드하세요 (예: v57.5.0
):
gemnasium-python-dependency_scanning:
before_script:
- pip install setuptools==57.5.0
psycopg2를 사용하는 프로젝트의 의존성 스캐닝이 pg_config executable not found
오류로 실패
psycopg2
에 의존하는 Python 프로젝트를 스캔할 때 다음과 같은 메시지로 실패할 수 있습니다:
Error: pg_config executable not found.
psycopg2는 설치되지 않은 libpq-dev
Debian 패키지에 의존합니다. 이 문제를 해결하려면 before_script
에서 libpq-dev
패키지를 설치하세요:
gemnasium-python-dependency_scanning:
before_script:
- apt-get update && apt-get install -y libpq-dev
CI_JOB_TOKEN
과 함께 poetry config http-basic
을 사용할 때 NoSuchOptionException
이 오류는 자동으로 생성된 CI_JOB_TOKEN
이 하이픈(-
)으로 시작할 때 발생할 수 있습니다. 이 오류를 피하려면 Poetry의 구성 조언을 따르세요.
오류: 프로젝트에 해결되지 않은 의존성이 있습니다
다음 오류 메시지는 build.gradle
또는 build.gradle.kts
파일로 인한 Gradle 의존성 해결 문제를 나타냅니다:
-
Project has <number> unresolved dependencies
(GitLab 16.7 to 16.9) -
project has unresolved dependencies: ["dependency_name:version"]
(GitLab 17.0 및 이후)
GitLab 16.7에서 16.9까지, gemnasium-maven
은 해결되지 않은 의존성이 발견되면 처리를 계속할 수 없습니다.
GitLab 17.0 및 이후에는 gemnasium-maven
이 해결되지 않은 의존성을 처리하는 방법을 제어할 수 있는 DS_GRADLE_RESOLUTION_POLICY
환경 변수를 지원합니다. 기본적으로 스캔은 해결되지 않은 의존성이 발견되면 실패합니다. 그러나 환경 변수 DS_GRADLE_RESOLUTION_POLICY
를 "none"
으로 설정하면 스캔을 계속하고 부분 결과를 생성할 수 있습니다.
build.gradle
파일을 수정하는 방법에 대한 가이드는 Gradle 의존성 해결 문서를 참조하십시오. 자세한 내용은 이슈 482650을 참조하십시오.
또한, 의존성 해결에 영향을 미치는 Kotlin 2.0.0
의 알려진 문제가 있으며, 이는 Kotlin 2.0.20
에서 수정될 예정입니다. 자세한 내용은 이 문제를 참조하십시오.
Go 프로젝트에서 빌드 제약 설정
의존성 스캐닝은 linux/amd64
컨테이너에서 실행됩니다. 결과적으로, Go 프로젝트에 대해 생성된 빌드 목록은 이 환경과 호환되는 의존성을 포함합니다. 배포 환경이 linux/amd64
가 아닌 경우, 최종 의존성 목록에 추가적인 호환되지 않는 모듈이 포함될 수 있습니다. 의존성 목록은 배포 환경과 호환되는 모듈을 생략할 수도 있습니다. 이 문제를 방지하려면 .gitlab-ci.yml
파일의 GOOS
및 GOARCH
환경 변수를 설정하여 빌드 프로세스를 배포 환경의 운영 체제와 아키텍처를 대상으로 구성할 수 있습니다.
예를 들어:
variables:
GOOS: "darwin"
GOARCH: "arm64"
빌드 태그 제약을 GOFLAGS
변수를 사용하여 공급할 수도 있습니다:
variables:
GOFLAGS: "-tags=test_feature"
Go 프로젝트의 의존성 스캐닝이 잘못된 양성을 반환
go.sum
파일은 프로젝트의 빌드 목록을 생성하는 동안 고려된 모든 모듈의 항목을 포함합니다. 여러 버전의 모듈이 go.sum
파일에 포함되지만, go build
에서 사용되는 MVS 알고리즘은 단 하나만 선택합니다. 이로 인해 의존성 스캐닝이 go.sum
을 사용할 경우 잘못된 양성을 보고할 수 있습니다.
잘못된 양성을 방지하기 위해, Gemnasium은 Go 프로젝트에 대한 빌드 목록을 생성할 수 없는 경우에만 go.sum
을 사용합니다. go.sum
이 선택되면 경고가 발생합니다:
[WARN] [Gemnasium] [2022-09-14T20:59:38Z] ▶ "/test-projects/gitlab-shell/go.sum"에 대한 "go.sum" 파서를 선택했습니다. 잘못된 양성이 발생할 수 있습니다. https://gitlab.com/gitlab-org/gitlab/-/issues/321081를 참조하세요.
ssh
사용 시 Host key verification failed
어떤 gemnasium
이미지에 openssh-client
를 설치한 후, ssh
사용 시 Host key verification failed
메시지가 표시될 수 있습니다. 이는 설정 중에 사용자 디렉토리를 나타내기 위해 ~
를 사용할 경우 발생할 수 있으며, 이로 인해 이미지 빌드 시 $HOME
이 /tmp
로 설정됩니다. 이 문제는 SSH를 사용하여 프로젝트를 클론하는 데 실패하는 경우 설명되어 있습니다. openssh-client
는 /root/.ssh/known_hosts
를 찾기를 기대하지만 이 경로는 존재하지 않으며, 대신 /tmp/.ssh/known_hosts
가 존재합니다.
이 문제는 openssh-client
가 미리 설치된 gemnasium-python
에서 해결되었지만, 다른 이미지에서 openssh-client
를 처음부터 설치할 경우 문제가 발생할 수 있습니다. 이를 해결하기 위해 다음 중 하나를 선택할 수 있습니다:
-
키와 호스트를 설정할 때 절대 경로(
/root/.ssh/known_hosts
대신~/.ssh/known_hosts
)를 사용합니다. -
관련
known_hosts
파일을 지정하여ssh
구성에UserKnownHostsFile
을 추가합니다. 예:echo 'UserKnownHostsFile /tmp/.ssh/known_hosts' >> /etc/ssh/ssh_config
.
ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE
이 오류는 requirements.txt
파일의 패키지 해시가 다운로드된 패키지의 해시와 일치하지 않을 때 발생합니다. 보안 조치로 인해 pip
는 패키지가 변조되었다고 가정하고 설치를 거부합니다. 이를 해결하려면 요구 사항 파일에 포함된 해시가 올바른지 확인하세요.
pip-compile
에 의해 생성된 요구 사항 파일의 경우, pip-compile --generate-hashes
를 실행하여 해시가 최신인지 확인합니다.
pipenv
에 의해 생성된 Pipfile.lock
을 사용하는 경우, pipenv verify
를 실행하여 잠금 파일이 최신 패키지 해시를 포함하는지 확인하세요.
ERROR: In --require-hashes mode, all requirements must have their versions pinned with ==
이 오류는 요구 사항 파일이 GitLab Runner에서 사용하는 것과 다른 플랫폼에서 생성된 경우 발생합니다.
다른 플랫폼을 대상으로 하는 지원은 문제 416376에서 추적됩니다.
편집 가능한 플래그는 Python의 의존성 스캔을 중단시킬 수 있습니다
requirements.txt
파일에서 현재 디렉토리를 겨냥하기 위해 -e/--editable
플래그를 사용하면, Gemnasium Python 의존성 스캐너가 pip3 download
를 실행할 때 멈추는 문제가 발생할 수 있습니다.
이 명령은 대상 프로젝트를 빌드하는 데 필요합니다.
이 문제를 해결하려면 Python 의존성 스캔을 실행할 때 -e/--editable
플래그를 사용하지 마세요.
SBT로 메모리 부족 오류 처리
Scala 프로젝트에서 의존성 스캔을 사용하는 동안 SBT로 메모리 부족 오류가 발생하면, SBT_CLI_OPTS
환경 변수를 설정하여 이 문제를 해결할 수 있습니다. 예시 구성은 다음과 같습니다:
variables:
SBT_CLI_OPTS: "-J-Xmx8192m -J-Xms4192m -J-Xss2M"
Kubernetes 실행기를 사용하는 경우, 기본 Kubernetes 리소스 설정을 덮어써야 할 수도 있습니다. 메모리 문제를 방지하기 위해 컨테이너 리소스를 조정하는 방법에 대한 내용은 Kubernetes 실행기 문서를 참고하세요.
NPM 프로젝트에 package-lock.json
파일 없음
기본적으로, 의존성 스캔 작업은 저장소에 package-lock.json
파일이 있을 때만 실행됩니다. 그러나 일부 NPM 프로젝트는 Git 저장소에 저장하는 대신 빌드 프로세스 중에 package-lock.json
파일을 생성합니다.
이러한 프로젝트에서 의존성을 스캔하려면:
-
빌드 작업에서
package-lock.json
파일을 생성합니다. -
생성된 파일을 아티팩트로 저장합니다.
-
의존성 스캔 작업을 수정하여 아티팩트를 사용하고 규칙을 조정합니다.
예를 들어, 구성은 다음과 같을 수 있습니다:
include:
- template: Dependency-Scanning.gitlab-ci.yml
build:
script:
- npm i
artifacts:
paths:
- package-lock.json # 생성된 package-lock.json을 아티팩트로 저장
gemnasium-dependency_scanning:
needs: ["build"]
rules:
- if: "$DEPENDENCY_SCANNING_DISABLED == 'true' || $DEPENDENCY_SCANNING_DISABLED == '1'"
when: never
- if: "$DS_EXCLUDED_ANALYZERS =~ /gemnasium([^-]|$)/"
when: never
- if: $CI_COMMIT_BRANCH && $GITLAB_FEATURES =~ /\bdependency_scanning\b/ && $CI_GITLAB_FIPS_MODE == "true"
variables:
DS_IMAGE_SUFFIX: "-fips"
DS_REMEDIATE: 'false'
- if: "$CI_COMMIT_BRANCH && $GITLAB_FEATURES =~ /\\bdependency_scanning\\b/"