- 디버그 수준 로깅
DS_MAJOR_VERSION
또는DS_ANALYZER_IMAGE
설정 후 최신 Docker 이미지를 더 이상 받지 못하는 경우setuptools
프로젝트의 의존성 스캐닝에서use_2to3 is invalid
오류 발생psycopg2
를 사용하는 프로젝트의 의존성 스캐닝에서pg_config executable not found
오류 발생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
파일이 없음
Dependency Scanning 문제 해결
의존성 스캔 작업 시 다음과 같은 문제가 발생할 수 있습니다.
디버그 수준 로깅
문제 해결 시 디버그 수준 로깅이 도움이 될 수 있습니다. 자세한 내용은 디버그 수준 로깅을 참조하십시오.
특정 언어 또는 패키지 관리자에 대한 누락된 지원 우회
“지원되는 언어” 섹션에 명시된 대로 일부 의존성 정의 파일은 아직 지원되지 않습니다. 그러나, 언어, 패키지 관리자 또는 타사 도구를 사용하여 정의 파일을 지원되는 형식으로 변환할 수 있다면 의존성 스캔이 가능합니다.
일반적으로 다음과 같은 방법을 사용합니다.
-
.gitlab-ci.yml
파일에 전용 변환 작업을 정의합니다. 변환을 용이하게 하기 위해 적절한 Docker 이미지, 스크립트 또는 둘 다를 사용합니다. - 해당 작업은 변환된 지원되는 파일을 artifact로 업로드합니다.
- 변환된 정의 파일을 사용하기 위해
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:
# https://gitlab.com/gitlab-org/gitlab/-/issues/32774 문제 우회
before_script:
- pip install "poetry>=1,<2" # 또는 다른 방법으로: https://python-poetry.org/docs/#installation
- poetry update --lock # 분석할 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
경고 메시지가 표시됨
이에 대한 정보는 일반적인 Application Security 문제 해결 섹션을 참조하십시오.
:::
Tier: Free, Premium, Ultimate
Offering: GitLab.com, Self-managed, GitLab Dedicated
무엇이든, 해명에 따르지 않습니다.
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
에 의존하는 파이썬 프로젝트를 스캔하면 다음과 같은 메시지로 실패할 수 있습니다:
Error: pg_config executable not found.
psycopg2는 libpq-dev
Debian 패키지에 의존하며, 이 패키지는 gemnasium-python
Docker 이미지에 설치되지 않습니다. 이 오류를 해결하려면 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의 구성 권장 사항을 따르세요.
project has unresolved dependencies
오류
다음 오류 메시지는 build.gradle
또는 build.gradle.kts
파일에서 발생한 Gradle 의존성 해결 문제를 나타냅니다:
-
Project has <number> unresolved dependencies
(GitLab 16.7~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
파일에서 배포 환경의 운영 체제 및 아키텍처를 대상으로 하는 빌드 프로세스를 구성할 수 있습니다.
예시:
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] ▶ Selecting "go.sum" parser for "/test-projects/gitlab-shell/go.sum". False positives may occur. See https://gitlab.com/gitlab-org/gitlab/-/issues/321081.
ssh
사용 시 Host key verification failed
오류
어떤 gemnasium
이미지에 openssh-client
를 설치한 후 ssh
를 사용하면 Host key verification failed
메시지가 표시될 수 있습니다. 이는 이미지를 빌드할 때 $HOME
을 /tmp
로 설정하여 설정 중에 사용자 디렉토리를 나타내기 위해 ~
를 사용하는 경우 발생할 수 있습니다. 이 문제는 Cloning project over SSH fails when using gemnasium-python
image에 설명되어 있습니다. 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에서 사용하는 플랫폼과 다른 플랫폼에서 생성된 경우 발생합니다. 다른 플랫폼을 대상으로 지원하는 사항은 issue 416376에서 추적됩니다.
편집 가능 플래그는 Python에 대한 종속성 스캔을 멈출 수 있음
-e/--editable
플래그를 사용하여 현재 디렉토리를 대상으로 하는 requirements.txt
파일을 사용하는 경우, 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 프로젝트는 빌드 프로세스 중에 package-lock.json
파일을 생성하여 Git 저장소에 저장하는 대신 생성합니다.
이러한 프로젝트의 종속성을 스캔하려면 다음을 수행하십시오:
- 빌드 작업에서
package-lock.json
파일을 생성합니다. - 생성된 파일을 artifact로 저장합니다.
- 종속성 스캔 작업을 수정하여 해당 artifact를 사용하고 규칙을 조정합니다.
예를들어 다음과 같이 구성할 수 있습니다:
include:
- template: Dependency-Scanning.gitlab-ci.yml
build:
script:
- npm i
artifacts:
paths:
- package-lock.json # 생성된 package-lock.json을 artifact로 저장
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/"