Dependency Scanning

Tier: Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

의존성 스캐닝은 알려진 취약점에 대해 응용 프로그램의 의존성을 분석합니다. 모든 의존성이 스캔되며, 중첩 의존성으로도 알려진 효과적인 의존성을 모두 스캔합니다.

의존성 스캐닝은 종종 소프트웨어 구성 분석(SCA)의 일부로 간주됩니다. SCA에는 코드에서 사용하는 항목을 검사하는 측면이 포함될 수 있습니다. 이러한 항목은 주로 외부 소스에서 가져오는 응용 프로그램 및 시스템 의존성을 포함하며, 직접 작성한 항목에서 가져오는 것이 아닙니다.

의존성 스캐닝은 응용 프로그램 수명주기의 개발 단계에서 실행할 수 있습니다. 파이프라인을 실행할 때마다 취약점이 식별되고, 소스 및 대상 브랜치 간에 비교됩니다. 병합 요청에서 취약점과 그 심각도가 나열되어 응용 프로그램의 위험에 대처할 수 있도록 코드 변경이 커밋되기 전에 사전에 주의할 수 있습니다. 취약점은 파이프라인 외부에서도 지속적인 취약점 스캔으로 식별할 수 있습니다.

GitLab은 의존성 스캐닝과 컨테이너 스캐닝 모두 제공하여 모든 이러한 종속성 유형에 대해 보안을 보장합니다. 가능한 리스크 영역을 최대한 커버하기 위해 보안 스캐너를 모두 사용할 것을 권장합니다. 이러한 기능을 비교하려면 의존성 스캐닝을 컨테이너 스캐닝과 비교하십시오.

의존성 스캐닝 위젯

경고: 의존성 스캐닝은 컴파일러 및 해석기의 런타임 설치를 지원하지 않습니다.

지원되는 언어 및 패키지 관리자

다음 언어 및 의존성 관리자가 지원됩니다:

언어 언어 버전 패키지 관리자 지원되는 파일 여러 파일을 처리하는 방법
.NET 모든 버전 NuGet packages.lock.json Y
C#
C 모든 버전 Conan conan.lock Y
C++
Go 모든 버전 Go
  • go.mod
  • go.sum
Y
Java 및 Kotlin(안드로이드 제외)1 8 LTS, 11 LTS, 17 LTS, 또는 21 LTS2 Gradle3
  • build.gradle
  • build.gradle.kts
N
Maven8 pom.xml N
JavaScript 및 TypeScript 모든 버전 npm
  • package-lock.json
  • npm-shrinkwrap.json
Y
yarn yarn.lock Y
pnpm4 pnpm-lock.yaml Y
PHP 모든 버전 Composer composer.lock Y
Python 3.99, 3.105 setuptools setup.py N
pip
  • requirements.txt
  • requirements.pip
  • requires.txt
N
Pipenv N
Poetry6 poetry.lock N
Ruby 모든 버전 Bundler
  • Gemfile.lock
  • gems.locked
Y
Scala 모든 버전 sbt7 build.sbt N
  1. Kotlin 프로젝트의 지원 여부는 이슈 336866에서 추적됩니다.

  2. sbt의 Java 21 LTS는 버전 1.9.7로 제한됩니다. 더 많은 sbt 버전의 지원 사항은 이슈 430335에서 추적됩니다. FIPS 모드가 활성화된 경우 지원되지 않습니다.

  3. FIPS 모드가 활성화된 경우 Gradle은 지원되지 않습니다.

  4. pnpm 잠금 파일 지원은 GitLab 15.11에서 소개되었습니다. pnpm 잠금 파일은 번들된 종속성을 저장하지 않으므로 보고된 종속성이 npm 또는 yarn과 다를 수 있습니다.

  5. Python 3.10 지원을 위해 GitLab CI/CD 구성 파일에 다음 스탠자를 추가합니다. 이 명령은 기본 Python 3.9 대신 Python 3.10 이미지를 사용하도록 지정합니다.

    gemnasium-dependency_scanning:
      image:
        name: $CI_TEMPLATE_REGISTRY_HOST/security-products/gemnasium-python:4-python-3.10
  6. Poetry 프로젝트 지원에는 poetry.lock 파일이 GitLab 15.0에서 추가되었습니다. poetry.lock 파일이 없는 프로젝트 지원은 이슈에서 추적됩니다: 의존성 스캐닝에 대한 Poetry의 pyproject.toml 지원.

  7. sbt 1.0.x 지원은 GitLab 16.8에서 폐기되었습니다.

  8. Maven 3.8.8 미만의 지원은 GitLab 16.9에서 폐기되었으며, GitLab 17.0에서는 제거될 예정입니다.

  9. < ## Dependency detection 의존성 스캐닝은 저장소에서 사용된 언어를 자동으로 감지합니다. 감지된 언어와 일치하는 모든 분석기가 실행됩니다. 분석기의 선택을 사용자 정의할 필요는 일반적으로 없습니다. 사용자가 분석기를 지정하지 않으면 폐기되거나 제거되는 경우 조정할 필요가 없으므로 최상의 커버리지를 얻을 수 있습니다. 그러나 `DS_EXCLUDED_ANALYZERS` 변수를 사용하여 선택을 재정의할 수 있습니다. 언어 감지는 CI 작업 [`rules`](../../../ci/yaml/index.md#rules)을 기반으로 하며, 저장소 루트에서 최대 두 단계의 디렉토리에서 검색합니다. 예를 들어, `Gemfile`, `api/Gemfile` 또는 `api/client/Gemfile` 중 하나를 포함하는 저장소의 경우 `gemnasium-dependency_scanning` 작업이 활성화됩니다. 다만, `api/v1/client/Gemfile`만 지원되는 종속성 파일인 경우에는 활성화되지 않습니다. Java 및 Python의 경우 지원되는 종속성 파일이 감지되면, 의존성 스캐닝은 프로젝트를 빌드하고 일부 Java 또는 Python 명령을 실행하여 종속성 목록을 가져오려고 시도합니다. 다른 모든 프로젝트의 경우 프로젝트를 먼저 빌드할 필요 없이 잠금 파일을 구문 분석하여 종속성 목록을 얻습니다. 지원되는 종속성 파일이 감지되면, 모든 종속성(전이적 종속성 포함)이 분석됩니다. 분석되는 중첩 또는 전이적 종속성의 깊이에 제한이 없습니다. ### 분석기 의존성 스캐닝은 다음 공식 [Gemnasium 기반](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium) 분석기를 지원합니다: - `gemnasium` - `gemnasium-maven` - `gemnasium-python` 분석기는 Docker 이미지로 출판되며, 의존성 스캐닝은 각 분석을 위해 전용 컨테이너를 시작하는 데 사용합니다. 또한 사용자 정의 [보안 스캐너](../../../development/integrations/secure.md)를 통합할 수도 있습니다. 각 분석기는 Gemnasium의 새 버전이 출시 될 때마다 업데이트됩니다. 자세한 정보는 분석기 [릴리스 프로세스 문서](../../../development/sec/analyzer_development_guide.md#versioning-and-release-process)를 참조하세요. ### 분석기의 종속성 정보 얻는 방법 GitLab 분석기는 종속성 정보를 얻는 데 다음 두 가지 방법 중 하나를 사용합니다: 1. [잠금 파일을 직접 구문 분석합니다.](#잠금 파일을 직접 구문 분석하는 방법) 2. [패키지 관리자 또는 빌드 도구를 실행하여 구문 분석 가능한 파일을 생성한 후 구문 분석합니다.](#패키지 관리자를 실행하여 파생 가능한 파일을 생성하여 종속성 정보를 얻는 방법) #### 잠금 파일을 직접 구문 분석하는 방법 다음 패키지 관리자들은 GitLab 분석기가 직접 구문 분석할 수 있는 잠금 파일을 사용합니다:
    패키지 관리자 지원되는 파일 형식 버전 테스트된 패키지 관리자 버전
    Bundler 해당 없음 1.17.3, 2.1.4
    Composer 해당 없음 1.x
    Conan 0.4 1.x
    Go 해당 없음 1.x1
    NuGet v1, v22 4.9
    npm v1, v2, v33 6.x, 7.x, 9.x
    pnpm v5, v6 7.x, 8.x
    yarn v1, v24, v34 1.x, 2.x, 3.x
    Poetry v1 1.x
    1. Go 프로젝트에서 사용하는 빌드 목록을 생성할 수 없는 경우, Dependency Scanning은 go.sum을만 파싱합니다.

    2. NuGet 버전 2 잠금 파일 지원은 GitLab 16.2에 도입되었습니다.

    3. lockfileVersion = 3 지원은 GitLab 15.7에 도입되었습니다.

    4. Yarn v2v3 지원은 GitLab 15.11에 도입되었습니다. 그러나 이 기능은 GitLab 15.0 이후 버전에서도 사용할 수 있습니다.

      아래 기능들은 Yarn v2 또는 v3에서 지원되지 않습니다:

      패치, 워크스페이스 또는 이 두 가지 기능이 포함된 Yarn 파일은 여전히 처리되지만 이러한 기능들은 무시됩니다.

    #### 패키지 관리자를 실행하여 구문 분석 가능한 파일을 생성하여 의존성 정보 획득하기 다음과 같은 패키지 관리자를 지원하기 위해, GitLab 분석기는 두 단계로 진행됩니다: 1. 패키지 관리자 또는 특정 작업을 실행하여 의존성 정보를 내보냅니다. 1. 내보낸 의존성 정보를 구문 분석합니다.
    패키지 관리자 사전 설치된 버전 테스트된 버전
    sbt 1.6.2 1.0.4, 1.1.6, 1.2.8, 1.3.12, 1.4.6, 1.5.8, 1.6.2 1.7.3 1.8.3 1.9.6 1.9.7
    maven 3.6.3 3.6.31
    Gradle 6.7.12, 7.3.32 5.6.4, 6.7, 6.9, 7.3 8.4
    setuptools 58.1.0 >= 65.6.3
    pip 22.0.4 20.x
    Pipenv 2022.1.8 2022.1.83, 2022.1.8
    Go 1.18 1.184
    1. 이 테스트는 .tool-versions 파일에서 지정된 기본 버전의 maven을 사용합니다.

    2. 서로 다른 Java 버전은 서로 다른 Gradle 버전을 필요로 합니다. 위 표에 나열된 Gradle 버전은 분석기 이미지에 사전 설치되어 있습니다. 분석기에서 사용하는 Gradle 버전은 프로젝트가 gradlew(Gradle 래퍼) 파일을 사용하는지 여부에 따라 달라집니다:

      • 프로젝트가 사용하지 않는 gradlew 파일을 사용하는 경우, 분석기는 DS_JAVA_VERSION 변수에서 지정된 Java 버전에 기반하여 자동으로 사전 설치된 Gradle 버전 중 하나로 전환합니다. 기본적으로, 분석기는 Java 17 및 Gradle 7.3.3을 사용합니다.

        Java 버전 811의 경우, Gradle 6.7.1이 자동으로 선택되며, Java 버전 17의 경우, Gradle 7.3.3이 자동으로 선택됩니다.

      • 프로젝트가 사용하는 gradlew 파일을 사용하는 경우, 분석기 이미지에 사전 설치된 Gradle 버전은 무시되고, 대신 사용 중인 gradlew 파일에 지정된 버전이 사용됩니다.

    3. 이 테스트는 Pipfile.lock 파일이 발견되면, 이 파일에 나열된 정확한 패키지 버전을 스캔하는 데 Gemnasium가 사용되는지 확인합니다.

    4. go build 구현으로 인해, Go 빌드 프로세스는 네트워크 액세스, go mod download를 통한 미리 로드된 모드 캐시 또는 판매된 의존성이 필요합니다. 더 많은 정보는 패키지 및 의존성 컴파일에서 Go 문서를 참조하세요.

    ### 분석기의 트리거 방식 GitLab은 [`rules:exists`](../../../ci/yaml/index.md#rulesexists)에 의존하여 리포지토리의 `지원되는 파일`의 존재로 감지된 언어에 해당하는 분석기를 시작합니다. 위의 표에서 보여진 것과 같이. 현재의 감지 로직은 최대 검색 깊이를 두 수준으로 제한합니다. 예를 들어, `Gemfile.lock`, `api/Gemfile.lock`, 또는 `api/client/Gemfile.lock` 중 하나를 포함한 리포지토리의 경우 `gemnasium-dependency_scanning` 작업이 활성화되지만, `api/v1/client/Gemfile.lock`가 유일하게 지원되는 종속성 파일인 경우 활성화되지 않습니다. 지원되는 종속성 파일이 감지되면, 중첩 또는 효과적인 종속성의 깊이에 제한이 없이 모든 종속성이 분석됩니다. ### 여러 파일의 처리 방법 참고: 여러 파일을 스캔하는 중 문제가 발생한 경우, [이 이슈](https://gitlab.com/gitlab-org/gitlab/-/issues/337056)에 의견을 기여하세요. #### Python requirements 파일 또는 잠금 파일이 감지된 디렉토리에서만 한 번 설치를 실행합니다. 종속성은 감지된 첫 번째 파일에 대해서만 `gemnasium-python`에 의해 분석됩니다. 파일은 다음과 같은 순서로 검색됩니다: 1. Pip를 사용하는 프로젝트의 경우, `requirements.txt`, `requirements.pip`, 또는 `requires.txt`. 1. Pipenv를 사용하는 프로젝트의 경우, `Pipfile` 또는 `Pipfile.lock`. 1. Poetry를 사용하는 프로젝트의 경우, `poetry.lock`. 1. Setuptools를 사용하는 프로젝트의 경우, `setup.py`. 검색은 루트 디렉토리에서 시작하여 루트 디렉토리에서 빌드가 발견되지 않은 경우 하위 디렉토리에서 계속됩니다. 따라서 루트 디렉토리에 있는 Poetry 잠금 파일이 하위 디렉토리에 있는 Pipenv 파일보다 먼저 감지됩니다. #### Java 및 Scala 빌드 파일이 감지된 디렉토리에서만 한 번 빌드가 실행됩니다. 여러 Gradle, Maven 또는 sbt 빌드를 포함하는 큰 프로젝트의 경우, `gemnasium-maven`은 감지된 첫 번째 빌드 파일에 대해서만 종속성을 분석합니다. 빌드 파일은 다음과 같은 순서로 검색됩니다: 1. 단일 또는 [다중 모듈](https://maven.apache.org/pom.html#Aggregation) Maven 프로젝트의 경우, `pom.xml`. 1. 단일 또는 [다중 프로젝트](https://docs.gradle.org/current/userguide/intro_multi_project_builds.html) Gradle 빌드의 경우, `build.gradle` 또는 `build.gradle.kts`. 1. 단일 또는 [다중 프로젝트](https://www.scala-sbt.org/1.x/docs/Multi-Project.html) sbt 빌드의 경우, `build.sbt`. 검색은 루트 디렉토리에서 시작하여 루트 디렉토리에서 빌드가 발견되지 않은 경우 하위 디렉토리에서 계속됩니다. 따라서 루트 디렉토리에 있는 sbt 빌드 파일이 하위 디렉토리에 있는 Gradle 빌드 파일보다 먼저 감지됩니다. #### JavaScript 여러 파일을 처리할 때 다음 분석기가 실행됩니다. 각 분석기는 여러 파일을 처리할 때 다른 동작을 합니다: - [Gemnasium](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium) 여러 lockfile을 지원합니다. - [Retire.js](https://retirejs.github.io/retire.js/) 여러 lockfile을 지원하지 않습니다. 여러 lockfile이 존재할 때, `Retire.js`는 디렉토리 트리를 알파벳순으로 탐색하면서 발견된 첫 번째 lockfile을 분석합니다. GitLab 14.8부터 `gemnasium` 분석기는 지원되는 JavaScript 프로젝트에서 vendored 라이브러리를 스캔합니다 (즉, 프로젝트에 체크아웃되었지만 패키지 매니저로 관리되지 않는 라이브러리). #### Go 여러 파일을 지원합니다. `go.mod` 파일이 감지되면 분석기는 [최소 버전 선택](https://go.dev/ref/mod#glos-minimal-version-selection)을 사용하여 [빌드 목록](https://go.dev/ref/mod#glos-build-list)을 생성하려고 시도합니다. 무해한 오류가 발생할 경우, 분석기는 사용 가능한 `go.sum` 파일의 구문 분석으로 돌아갑니다. 이 과정은 감지된 각 `go.mod` 및 `go.sum` 파일에 대해 반복됩니다. #### PHP, C, C++, .NET, C#, Ruby, JavaScript 이러한 언어의 분석기는 여러 lockfile을 지원합니다. #### 추가 언어 지원 추가 언어, 종속성 관리자 및 종속성 파일 지원은 다음 이슈에서 추적됩니다: | 패키지 관리자 | 언어 | 지원되는 파일 | 스캔 도구 | 이슈 | | ------------------- | --------- | --------------- | ---------- | ----- | | [Poetry](https://python-poetry.org/) | Python | `pyproject.toml` | [Gemnasium](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium) | [GitLab#32774](https://gitlab.com/gitlab-org/gitlab/-/issues/32774) | ## 구성 애플리케이션의 종속성을 알려진 취약점을 스캔하도록 종속성 스캔 분석기를 활성화합니다. 그런 다음 CI/CD 변수를 사용하여 그 동작을 조정할 수 있습니다. ### 분석기 활성화 필수 구성 요소: - `.gitlab-ci.yml` 파일에 `test` 스테이지가 필요합니다. - Self-Managed 러너를 사용하는 경우, `docker`나 `kubernetes` executor가 있는 GitLab 러너가 필요합니다. - GitLab.com의 SaaS 러너를 사용하는 경우, 기본적으로 활성화됩니다. 분석기를 활성화하려면 다음 중 하나를 수행하세요: - [Auto DevOps](../../../topics/autodevops/index.md)(의존성 스캔을 포함)를 활성화합니다. - `.gitlab-ci.yml` 파일을 수동으로 편집합니다. `.gitlab-ci.yml` 파일이 복잡한 경우 이 방법을 사용하세요. - 사전 구성된 병합 요청을 사용합니다. - 의존성 스캔을 강제하는 [스캔 실행 정책](../policies/scan-execution-policies.md)을 생성합니다. #### `.gitlab-ci.yml` 파일 수동 편집 이 방법은 기존의 `.gitlab-ci.yml` 파일을 수동으로 편집해야 합니다. GitLab CI/CD 구성 파일이 복잡한 경우에 사용하세요. 의존성 스캔을 활성화하려면: 1. 왼쪽 사이드바에서 **검색 또는 이동**을 선택하여 프로젝트를 찾습니다. 2. **Build > Pipeline editor**를 선택합니다. 3. `.gitlab-ci.yml` 파일이 없는 경우, **Pipeline 구성**을 선택한 후 예시 내용을 삭제합니다. 4. 다음을 `.gitlab-ci.yml` 파일의 맨 아래에 복사하여 붙여넣습니다. 이미 `include` 줄이 있는 경우 `template` 줄만 다음에 추가합니다. ```yaml include: - template: Jobs/Dependency-Scanning.gitlab-ci.yml ``` 5. **Validate** 탭을 선택한 후 **Validate pipeline**을 선택합니다. 메시지 **시뮬레이션은 성공적으로 완료되었습니다**가 나타나면 파일이 유효함을 확인할 수 있습니다. 6. **Edit** 탭을 선택합니다. 7. 필드를 완료합니다. **Branch** 필드에 기본 브랜치를 사용하지 마세요. 8. **이러한 변경 사항으로 새로운 병합 요청을 시작** 확인란을 선택한 후 **변경 사항 커밋**을 선택합니다. 9. 표준적인 작업 흐름에 따라 필드를 완료한 후 **병합 요청 만들기**를 선택합니다. 10. 표준적인 작업 흐름에 따라 병합 요청을 검토 및 편집한 후 **병합**을 선택합니다. 이제 파이프라인에 의존성 스캔 작업이 포함됩니다. #### 사전 구성된 병합 요청 사용 > - [GitLab 14.1에서 소개됨](https://gitlab.com/groups/gitlab-org/-/epics/4908) (기능 플래그: `sec_dependency_scanning_ui_enable`로 활성화됨) - 기본적으로 활성화됨. > - [GitLab 14.2에서 제너럴리 사용 가능](https://gitlab.com/gitlab-org/gitlab/-/issues/326005). 기능 플래그 `sec_dependency_scanning_ui_enable`가 제거됨. 이 방법은 `.gitlab-ci.yml` 파일에 의존성 스캔 템플릿을 포함하는 병합 요청을 자동으로 준비합니다. 그런 다음 병합 요청을 병합하여 의존성 스캔을 활성화합니다. 참고: 이 방법은 기존의 `.gitlab-ci.yml` 파일이 없거나 최소한의 구성 파일이 있는 경우 가장 잘 작동합니다. 복잡한 GitLab 구성 파일의 경우 성공적으로 구문 분석되지 않을 수 있고 오류가 발생할 수 있습니다. 이 경우 [수동](#edit-the-gitlab-ciyml-file-manually) 방법을 대신 사용하세요. 의존성 스캔을 활성화하려면: 1. 왼쪽 사이드바에서 **검색 또는 이동**을 선택하여 프로젝트를 찾습니다. 2. **Secure > Security configuration**를 선택합니다. 3. **의존성 스캔** 행에서 **병합 요청을 통해 구성**을 선택합니다. 4. **병합 요청 생성**을 선택합니다. 5. 병합 요청을 검토한 후 **병합**을 선택합니다. 이제 파이프라인에 의존성 스캔 작업이 포함됩니다. ### 병합 요청 파이프라인에서 작업 실행 [병합 요청 파이프라인에서 보안 스캔 도구 사용](../index.md#use-security-scanning-tools-with-merge-request-pipelines)을 참조하세요. ### 분석기 동작 사용자화 CI/CD 변수를 사용하여 의존성 스캔 동작을 사용자화할 수 있습니다. 경고: 기본 브랜치로 이러한 변경 사항을 병합하기 전에 병합 요청에서 GitLab 보안 스캔 도구의 모든 사용자화를 테스트해야 합니다. 이를 하지 않으면 예상치 못한 결과가 발생할 수 있으며, 대부분은 잘못된 양성 결과의 수가 많아질 수 있습니다. ### 의존성 스캔 작업 재정의 작업 정의를 재정의하려면(예: `variables` 또는 `dependencies`와 같은 속성을 변경하려는 경우) 해당 작업과 동일한 이름의 새 작업을 선언하고, 이 템플릿 포함 뒤에 이 새 작업을 배치하고 그 아래에 추가적인 키를 지정하세요. 예를 들어, 이는 `gemnasium` 분석기에서 `DS_REMEDIATE`를 비활성화합니다: ```yaml include: - template: Jobs/Dependency-Scanning.gitlab-ci.yml gemnasium-dependency_scanning: variables: DS_REMEDIATE: "false" ``` `dependencies: []` 속성을 재정의하려면 이 속성을 대상으로 하는 오버라이드 작업을 추가하세요: ```yaml include: - template: Jobs/Dependency-Scanning.gitlab-ci.yml gemnasium-dependency_scanning: dependencies: ["build"] ``` ### 사용 가능한 CI/CD 변수 의존성 스캐닝 동작을 [사용자 정의](#customizing-analyzer-behavior)하기 위해 CI/CD 변수를 사용할 수 있습니다. #### 전역 분석기 설정 다음 변수들은 전역 의존성 스캐닝 설정을 구성할 수 있습니다. | CI/CD 변수 | 설명 | | ----------------------------|------------ | | `ADDITIONAL_CA_CERT_BUNDLE` | 신뢰할 수 있는 CA 인증서 번들입니다. 여기에 제공된 인증서 번들은 스캔 프로세스 중 기타 도구들에서도 사용됩니다. 예를 들어 `git`, `yarn`, 또는 `npm`. 자세한 내용은 [사용자 정의 TLS 인증 기관](#custom-tls-certificate-authority)을 참조하세요. | | `DS_EXCLUDED_ANALYZERS` | 의존성 스캐닝에서 제외할 분석기(이름별로)를 지정합니다. 자세한 정보는 [Analyzers](#analyzers)를 참조하세요. | | `DS_EXCLUDED_PATHS` | 경로를 기반으로 스캔에서 파일과 디렉터리를 제외합니다. 쉼표로 구분된 패턴 목록입니다. 패턴은 글로브(지원되는 패턴에 대해서는 [`doublestar.Match`](https://pkg.go.dev/github.com/bmatcuk/doublestar/v4@v4.0.2#Match)를 참조하세요)이나 파일 또는 폴더 경로(예: `doc,spec`)일 수 있습니다. 상위 디렉터리도 패턴에 일치합니다. 기본값: `"spec, test, tests, tmp"`. | | `DS_IMAGE_SUFFIX` | 이미지 이름에 추가되는 접미사입니다. (GitLab 팀원은 이 기밀 이슈에서 자세한 정보를 확인할 수 있습니다: `https://gitlab.com/gitlab-org/gitlab/-/issues/354796`). FIPS 모드가 활성화되면 자동으로 `"-fips"`로 설정됩니다. | | `DS_MAX_DEPTH` | 분석기가 스캔할 지원되는 파일을 검색할 디렉터리 수준을 정의합니다. 값이 `-1`인 경우 깊이에 관계없이 모든 디렉터리를 스캔합니다. 기본값: `2`. | | `SECURE_ANALYZERS_PREFIX` | 공식 기본 이미지를 제공하는 Docker 레지스트리의 이름을 재정의합니다(프록시). #### 분석기별 설정 다음 변수들은 특정 의존성 스캐닝 분석기의 동작을 구성합니다. | CI/CD 변수 | 분석기 | 기본값 | 설명 | |----------------------|--------------------|------------------------------|-------------| | `GEMNASIUM_DB_LOCAL_PATH` | `gemnasium` | `/gemnasium-db` | 로컬 Gemnasium 데이터베이스의 경로입니다. | | `GEMNASIUM_DB_UPDATE_DISABLED` | `gemnasium` | `"false"` | `gemnasium-db` 공지 데이터베이스의 자동 업데이트를 비활성화합니다. 사용법은 [Gemnasium 공지 데이터베이스의 사본 호스팅](#hosting-a-copy-of-the-gemnasium_db-advisory-database)을 참조하세요. | | `GEMNASIUM_DB_REMOTE_URL` | `gemnasium` | `https://gitlab.com/gitlab-org/security-products/gemnasium-db.git` | Gemnasium 데이터베이스를 가져오기 위한 저장소 URL입니다. | | `GEMNASIUM_DB_REF_NAME` | `gemnasium` | `master` | 원격 저장소 데이터베이스의 브랜치 이름입니다. `GEMNASIUM_DB_REMOTE_URL`이 필요합니다. | | `DS_REMEDIATE` | `gemnasium` | FIPS 모드에서는 `"true"`, `"false"` | 취약한 종속성을 자동으로 치료합니다. FIPS 모드에서는 지원되지 않습니다. | | `DS_REMEDIATE_TIMEOUT` | `gemnasium` | `5m` | 자동 치료에 대한 시간 제한입니다. | | `GEMNASIUM_LIBRARY_SCAN_ENABLED` | `gemnasium` | `"true"` | 제이쿼리 라이브러리를 사용하여 취약점을 감지합니다(패키지 관리자로 관리되지 않는 라이브러리 포함). 이 기능을 사용하려면 커밋에 제이쿼리 락 파일이 있어야 하며, 그렇지 않으면 의존성 스캐닝이 실행되지 않고 라이브러리가 스캔되지 않습니다.
    의존성 스캐닝은 제한된 취약성 세트를 감지하기 위해 [Retire.js](https://github.com/RetireJS/retire.js) 스캐너를 사용합니다. 감지되는 취약점에 대한 자세한 내용은 [Retire.js repository](https://github.com/RetireJS/retire.js/blob/master/repository/jsrepository.json)를 참조하세요. (GitLab 14.8에서 [도입](https://gitlab.com/gitlab-org/gitlab/-/issues/350512)). | | `DS_INCLUDE_DEV_DEPENDENCIES` | `gemnasium` | `"true"` | `"false"`로 설정하면 개발 의존성 및 해당 취약성이 보고되지 않습니다. Composer, npm, pnpm, Pipenv 또는 Poetry를 사용하는 프로젝트만 지원됩니다. (GitLab 15.1에서 [도입](https://gitlab.com/gitlab-org/gitlab/-/issues/227861)). | | `GOOS` | `gemnasium` | `"linux"` | Go 코드를 컴파일할 운영 체제입니다. | | `GOARCH` | `gemnasium` | `"amd64"` | Go 코드를 컴파일할 프로세서 아키텍처입니다. | | `GOFLAGS` | `gemnasium` | | `go build` 도구에 전달되는 플래그입니다. | | `GOPRIVATE` | `gemnasium` | | 소스에서 가져올 글로브 패턴 및 접두사 목록입니다. 자세한 내용은 Go private modules [documentation](https://go.dev/ref/mod#private-modules)를 참조하세요. | | `DS_JAVA_VERSION` | `gemnasium-maven` | `17` | Java 버전입니다. 사용 가능한 버전: `8`, `11`, `17`, `21`. | | `MAVEN_CLI_OPTS` | `gemnasium-maven` | `"-DskipTests --batch-mode"` | 분석기가 `maven`으로 전달하는 명령줄 인수 목록입니다. [사용자 지정 Maven 저장소 사용](../index.md#using-private-maven-repositories)의 예제를 참조하세요. | | `GRADLE_CLI_OPTS` | `gemnasium-maven` | | 분석기가 `gradle`로 전달하는 명령줄 인수 목록입니다. | | `SBT_CLI_OPTS` | `gemnasium-maven` | | 분석기가 `sbt`에 전달하는 명령줄 인수 목록입니다. | | `PIP_INDEX_URL` | `gemnasium-python`| `https://pypi.org/simple` | Python 패키지 인덱스의 기본 URL입니다. | | `PIP_EXTRA_INDEX_URL` | `gemnasium-python`| | `PIP_INDEX_URL`에 추가하여 사용할 패키지 인덱스의 [추가 URL](https://pip.pypa.io/en/stable/reference/pip_install/#cmdoption-extra-index-url) 배열입니다. 쉼표로 구분합니다. 이 환경 변수를 사용할 때 [다음 보안 고려 사항](#python-projects)을 참조하세요. | | `PIP_REQUIREMENTS_FILE` | `gemnasium-python`| | 스캔할 pip 요구 사항 파일입니다. 이 환경 변수가 설정된 경우 지정된 파일만 스캔됩니다. | | `PIPENV_PYPI_MIRROR` | `gemnasium-python`| | 설정된 경우, Pipenv가 PyPi 인덱스를 [미러](https://github.com/pypa/pipenv/blob/v2022.1.8/pipenv/environments.py#L263)로 사용합니다. | | `DS_PIP_VERSION` | `gemnasium-python`| | 특정 pip 버전을 설치합니다(예: `"19.3"`). 그렇지 않으면 Docker 이미지에 설치된 pip가 사용됩니다. | | `DS_PIP_DEPENDENCY_PATH` | `gemnasium-python`| | Python pip 종속성을로드할 경로입니다. | #### 기타 변수 이전 표들은 사용할 수 있는 모든 변수들의 체계적인 목록은 아닙니다. 지원 및 테스트하는 GitLab 및 분석기 변수를 모두 포함하고 있습니다. 환경 변수와 같은 많은 변수가 있으며, 이들은 전달하고 작동합니다. 이 리스트는 많고, 우리가 알지 못하는 변수들이 많으며, 이에 따라 문서화되지 않았습니다. 예를 들어, 비-GitLab 환경 변수 `HTTPS_PROXY`를 모든 Dependency Scanning 작업에 전달하려면, 다음과 같이 `.gitlab-ci.yml` 파일의 [CI/CD 변수를 설정](../../../ci/variables/index.md#define-a-cicd-variable-in-the-gitlab-ciyml-file)하세요: ```yaml variables: HTTPS_PROXY: "https://squid-proxy:3128" ``` 참고: Gradle 프로젝트는 [추가 변수](#using-a-proxy-with-gradle-projects) 설정이 필요합니다. 또는 Dependency Scanning과 같이 특정 작업에서 사용할 수 있습니다: ```yaml dependency_scanning: variables: HTTPS_PROXY: $HTTPS_PROXY ``` 우리는 모든 변수를 테스트하지 않았으므로 몇 가지 변수가 작동하고 다른 변수가 작동하지 않을 수 있습니다. 작동하지 않는 변수를 사용해야 하는 경우 [기능 요청을 제출](https://gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=Feature%20proposal%20-%20detailed&issue[title]=Docs%20feedback%20-%20feature%20proposal:%20Write%20your%20title)하거나 [코드 기여](../../../development/index.md)를 하는 것을 권장합니다. ### 사용자 정의 TLS 인증서 Dependency Scanning은 분석기 컨테이너 이미지에 기본으로 제공되는 것 대신 SSL/TLS 연결을 위한 사용자 정의 TLS 인증서를 사용할 수 있게 합니다. 사용자 정의 인증 기관에 대한 지원은 다음 버전에서 소개되었습니다. | 분석기 | 버전 | |--------------------|--------------------------------------------------------------------------------------------------------| | `gemnasium` | [v2.8.0](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium/-/releases/v2.8.0) | | `gemnasium-maven` | [v2.9.0](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium-maven/-/releases/v2.9.0) | | `gemnasium-python` | [v2.7.0](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium-python/-/releases/v2.7.0) | #### 사용자 정의 TLS 인증서 사용 사용자 정의 TLS 인증서를 사용하려면 CI/CD 변수 `ADDITIONAL_CA_CERT_BUNDLE`에 [X.509 PEM 공개 키 인증서의 텍스트 표현](https://www.rfc-editor.org/rfc/rfc7468#section-5.1)를 할당하세요. 예를 들어, 인증서를 `.gitlab-ci.yml` 파일에서 구성하려면: ```yaml variables: ADDITIONAL_CA_CERT_BUNDLE: | -----BEGIN CERTIFICATE----- MIIGqTCCBJGgAwIBAgIQI7AVxxVwg2kch4d56XNdDjANBgkqhkiG9w0BAQsFADCB ... jWgmPqF3vUbZE0EyScetPJquRFRKIesyJuBFMAs= -----END CERTIFICATE----- ``` ### 사설 Maven 저장소 사용 사설 Maven 저장소에 로그인 자격 증명이 필요한 경우 `MAVEN_CLI_OPTS` CI/CD 변수를 사용할 수 있습니다. 사설 Maven 저장소 사용 방법에 대해 자세히 알아보세요: [사설 Maven 저장소 사용](../index.md#using-private-maven-repositories). ### FIPS 활성화된 이미지 > - GitLab 14.10에서 소개. GitLab 팀원은 이 기밀된 이슈에서 더 많은 정보를 볼 수 있습니다: `https://gitlab.com/gitlab-org/gitlab/-/issues/354796` > - GitLab 15.0에서 소개 - FIPS 모드가 활성화되면 Gemnasium은 FIPS 모드의 이미지를 사용합니다. GitLab은 또한 [FIPS 활성화된 Red Hat UBI](https://www.redhat.com/en/blog/introducing-red-hat-universal-base-image) 버전의 Gemnasium 이미지를 제공합니다. GitLab 인스턴스에서 FIPS 모드가 활성화된 경우, Gemnasium 스캔 작업은 자동으로 FIPS 활성화된 이미지를 사용합니다. 수동으로 FIPS 활성화된 이미지로 전환하려면 변수 `DS_IMAGE_SUFFIX`를 `"-fips"`로 설정하세요. Gradle 프로젝트의 Dependency scanning과 Yarn 프로젝트의 자동 보완은 FIPS 모드에서 지원되지 않습니다. ## 결과 Dependency Scanning에서 다음과 같은 결과를 생성합니다: - **Dependency scanning 보고서**: 종속성에서 감지된 모든 취약점의 세부 정보를 포함합니다. - **CycloneDX SBoM(Software Bill of Materials)**: 각 지원되는 잠금 또는 빌드 파일의 SBoM. ### Dependency scanning 보고서 Dependency Scanning은 모든 취약점에 대한 세부 정보를 담은 보고서를 출력합니다. 이 보고서는 내부적으로 처리되며 결과는 UI에 표시됩니다. 또한 보고서는 Dependency Scanning 작업의 artifact로 `gl-dependency-scanning-report.json`라는 이름으로 출력됩니다. Dependency scanning 보고서에 대한 자세한 내용은 다음을 참조하세요: - [보안 스캐너 통합](../../../development/integrations/secure.md). - [Dependency scanning 보고서 스키마](https://gitlab.com/gitlab-org/security-products/security-report-schemas/-/blob/master/dist/dependency-scanning-report-format.json). ### CycloneDX 소프트웨어 자재 목록 > - [소개](https://gitlab.com/gitlab-org/gitlab/-/issues/350509): GitLab 14.8에서 [베타](../../../policy/experiment-beta-support.md#beta)로 소개됨. > - GitLab 15.7에서 일반적으로 사용 가능함. 의존성 스캐닝은 각 지원되는 잠금 또는 빌드 파일에 대해 [CycloneDX](https://cyclonedx.org/) 소프트웨어 자재 목록(SBOM)을 생성합니다. CycloneDX SBOM은 다음과 같습니다: - `gl-sbom--.cdx.json`로 명명됨. - 의존성 스캐닝 작업의 작업 결과물로 이용 가능함. - 감지된 잠금 또는 빌드 파일과 동일한 디렉터리에 저장됨. 예를 들어, 프로젝트가 다음 구조를 갖고 있다면: ```plaintext . ├── ruby-project/ │ └── Gemfile.lock ├── ruby-project-2/ │ └── Gemfile.lock ├── php-project/ │ └── composer.lock └── go-project/ └── go.sum ``` 그러면 Gemnasium 스캐너는 다음과 같은 CycloneDX SBOM을 생성합니다: ```plaintext . ├── ruby-project/ │ ├── Gemfile.lock │ └── gl-sbom-gem-bundler.cdx.json ├── ruby-project-2/ │ ├── Gemfile.lock │ └── gl-sbom-gem-bundler.cdx.json ├── php-project/ │ ├── composer.lock │ └── gl-sbom-packagist-composer.cdx.json └── go-project/ ├── go.sum └── gl-sbom-go-go.cdx.json ``` #### 여러 CycloneDX SBOM 병합 여러 CycloneDX SBOM을 하나의 SBOM으로 병합할 수 있습니다. GitLab은 각 CycloneDX SBOM의 메타데이터에 구현별 세부 정보(빌드 및 잠금 파일의 위치와 같은)를 저장하기 위해 [CycloneDX 속성](https://cyclonedx.org/use-cases/#properties--name-value-store)를 사용합니다. 여러 CycloneDX SBOM이 함께 병합되면 해당 정보는 결과로 나온 병합 파일에서 제거됩니다. 예를 들어, 다음 `.gitlab-ci.yml` 추출은 Cyclone SBOM 파일을 병합하고, 결과 파일을 유효성을 검사하는 방법을 보여줍니다. ```yaml stages: - test - merge-cyclonedx-sboms include: - template: Jobs/Dependency-Scanning.gitlab-ci.yml merge cyclonedx sboms: stage: merge-cyclonedx-sboms image: name: cyclonedx/cyclonedx-cli:0.24.2 entrypoint: [""] script: - apt-get update && apt-get install -y jq - find . -name "gl-sbom-*.cdx.json" -exec cyclonedx merge --output-file gl-sbom-all.cdx.json --input-files "{}" + # 병합된 파일에서 중복을 제거합니다. 자세한 내용은 https://github.com/CycloneDX/cyclonedx-cli/issues/188를 참조하세요. - | jq '. | { "bomFormat": .bomFormat, "specVersion": .specVersion, "serialNumber": .serialNumber, "version": .version, "metadata": { "tools": [ (.metadata.tools | unique[]) ] }, "components": [ (.components | unique[]) ] }' "gl-sbom-all.cdx.json" > gl-sbom-all.cdx.json.tmp && mv gl-sbom-all.cdx.json.tmp gl-sbom-all.cdx.json # 선택 사항: 병합된 sbom을 유효성 검사합니다 - cyclonedx validate --input-version v1_4 --input-file gl-sbom-all.cdx.json artifacts: paths: - gl-sbom-all.cdx.json ``` ## 취약점 데이터베이스 기여 취약점을 찾으려면 [`GitLab 공지 데이터베이스`](https://advisories.gitlab.com/)에서 검색할 수 있습니다. 또한 [새로운 취약점을 제출](https://gitlab.com/gitlab-org/security-products/gemnasium-db/blob/master/CONTRIBUTING.md)할 수 있습니다. ## 오프라인 환경에서 의존성 스캐닝 실행 인터넷을 통한 외부 리소스에 대한 액세스가 제한된 환경에 있는 자체 관리 GitLab 인스턴스의 경우, 의존성 스캐닝 작업이 성공적으로 실행되려면 일부 조정이 필요합니다. 자세한 정보는 [오프라인 환경](../offline_deployments/index.md)을 참조하세요. ### 오프라인 의존성 스캐닝 요구 사항 오프라인 환경에서 의존성 스캐닝을 사용하기 위해 다음이 필요합니다: - `docker` 또는 `kubernetes` 실행자가 있는 GitLab Runner. - 의존성 스캐닝 [분석기](https://gitlab.com/gitlab-org/security-products/analyzers) 이미지의 로컬로 사용 가능한 사본이 있는 Docker 컨테이너 레지스트리. - 액세스를 허용해야 하는 제한된 액세스 환경의 경우, 프록시 사용과 같은 액세스를 허용해야 합니다. `https://gitlab.com/gitlab-org/security-products/gemnasium-db.git`에 대한 CI/CD 변수 `GEMNASIUM_DB_REMOTE_URL`을 이 리포지토리의 URL로 설정해야 할 수도 있습니다. 구성 변수에 대한 자세한 정보는 [분석기 동작 사용자 정의](#customizing-analyzer-behavior)를 참조하세요. 이 공지 데이터베이스는 지속적으로 업데이트되므로 로컬 사본을 GitLab과 주기적으로 동기화해야 합니다. GitLab Runner는 기본적으로 [항상 `pull policy`를 사용](https://docs.gitlab.com/runner/executors/docker.html#using-the-always-pull-policy)하여 GitLab 컨테이너 레지스트리에서 Docker 이미지를 가져오려고 하며, 지역 사본이 있더라도. 오프라인 환경에서는 GitLab Runner의 [`pull_policy`를 `if-not-present`로 설정](https://docs.gitlab.com/runner/executors/docker.html#using-the-if-not-present-pull-policy)할 수 있습니다. 이렇게 하면 로컬로 사용 가능한 Docker 이미지만 사용하게 됩니다. 그러나 CI/CD 파이프라인에서 업데이트된 스캐너를 사용하려면 오프라인 환경이 아니라면 항상 `pull policy` 설정을 유지하는 것이 좋습니다. ### Docker 레지스트리 내부에 GitLab 의존성 스캐닝 분석기 이미지 사용 가능하게 지원되는 언어 및 프레임워크에서 [의존성 스캐닝](#supported-languages-and-package-managers)을 하기 위해서는, `registry.gitlab.com`에서 기본 의존성 스캐닝 분석기 이미지를 다음과 같이 로컬 Docker 컨테이너 레지스트리에 가져와야 합니다: ```plaintext registry.gitlab.com/security-products/gemnasium:4 registry.gitlab.com/security-products/gemnasium-maven:4 registry.gitlab.com/security-products/gemnasium-python:4 ``` 로컬 오프라인 Docker 레지스트리로 Docker 이미지를 가져오는 절차는 **귀하의 네트워크 보안 정책**에 따라 다릅니다. 외부 리소스를 가져오거나 임시로 액세스하는 데 수락되고 승인된 방법을 찾기 위해 IT 직원에게 상의하십시오. 이러한 스캐너들은 [주기적으로 업데이트](../index.md#vulnerability-scanner-maintenance)되며, 가끔씩 귀하도 스스로 업데이트할 수 있을 수도 있습니다. Docker 이미지를 파일로 저장하고 전송하는 세부 정보는 Docker 문서에서 [`docker save`](https://docs.docker.com/reference/cli/docker/image/save/), [`docker load`](https://docs.docker.com/reference/cli/docker/image/load/), [`docker export`](https://docs.docker.com/reference/cli/docker/container/export/), 그리고 [`docker import`](https://docs.docker.com/reference/cli/docker/image/import/)를 참조하세요. ### 로컬 의존성 스캐닝 분석기를 사용하도록 의존성 스캐닝 CI/CD 작업 변수 설정 `.gitlab-ci.yml` 파일에 다음 구성을 추가하세요. `SECURE_ANALYZERS_PREFIX` 값을 로컬 Docker 컨테이너 레지스트리로 지정해야 합니다. 또한 `GEMNASIUM_DB_REMOTE_URL` 값을 오프라인 Git 복사본에 있는 [`gemnasium-db` 고문 데이터](https://gitlab.com/gitlab-org/security-products/gemnasium-db/)의 위치로 변경해야 합니다: ```yaml include: - template: Jobs/Dependency-Scanning.gitlab-ci.yml variables: SECURE_ANALYZERS_PREFIX: "docker-registry.example.com/analyzers" GEMNASIUM_DB_REMOTE_URL: "gitlab.example.com/gemnasium-db.git" ``` 이전 변수에 대한 설명은 [구성 섹션](#customizing-analyzer-behavior)에서 확인하세요. ### `gemnasium_db` 고문 데이터의 복사본 호스팅 [`gemnasium_db`](https://gitlab.com/gitlab-org/security-products/gemnasium-db) Git 리포지토리는 `gemnasium`, `gemnasium-maven`, 그리고 `gemnasium-python`에서 취약성 데이터의 원본으로 사용됩니다. 이 리포지토리는 최신 고문을 가져오기 위해 스캔 시간에 업데이트됩니다. 그러나 제한된 네트워킹 환경으로 인해 이 업데이트를 실행하는 것이 때로는 불가능할 수 있습니다. 이 경우 사용자는 다음 중 하나를 할 수 있습니다: - [고문 데이터의 복사본 호스팅](#host-a-copy-of-the-advisory-database) - [로컬 복제 사용](#use-a-local-clone) #### 고문 데이터의 복사본 호스팅 만약 환경 내에서 [gemnasium-db](https://gitlab.com/gitlab-org/security-products/gemnasium-db)에 접근할 수 없다면, 사용자는 자체 Git 복사본을 호스팅할 수 있습니다. 그런 다음 분석기는 `GEMNASIUM_DB_REMOTE_URL`을 사용하여 사용자의 복사본에서 데이터베이스를 업데이트하도록 지시할 수 있습니다: ```yaml variables: GEMNASIUM_DB_REMOTE_URL: https://users-own-copy.example.com/gemnasium-db/.git ... ``` #### 로컬 복제 사용 호스팅된 복사본이 불가능한 경우, 사용자는 [gemnasium-db](https://gitlab.com/gitlab-org/security-products/gemnasium-db)를 클론하거나 스캔 전에 아카이브를 생성하고 분석기를 디렉토리로 지정할 수 있습니다(`GEMNASIUM_DB_LOCAL_PATH`를 사용). 분석기의 자체 업데이트 메커니즘을 비활성화하세요(`GEMNASIUM_DB_UPDATE_DISABLED`를 사용). 예를 들어, 이 예시에서는 데이터베이스 디렉토리를 `before_script`에서 생성하고 `gemnasium` 분석기의 스캔 작업 직전에 생성합니다: ```yaml ... gemnasium-dependency_scanning: variables: GEMNASIUM_DB_LOCAL_PATH: ./gemnasium-db-local GEMNASIUM_DB_UPDATE_DISABLED: "true" before_script: - mkdir $GEMNASIUM_DB_LOCAL_PATH - tar -xzf gemnasium_db.tar.gz -C $GEMNASIUM_DB_LOCAL_PATH ``` ## Gradle 프로젝트에 Proxy 사용하기 Gradle 래퍼 스크립트는 `HTTP(S)_PROXY` 환경 변수를 읽지 않습니다. [상위 이슈](https://github.com/gradle/gradle/issues/11065)를 참조하세요. Gradle 래퍼 스크립트가 프록시를 사용하도록 하려면 `GRADLE_CLI_OPTS` CI/CD 변수를 사용하여 옵션을 지정할 수 있습니다: ```yaml variables: GRADLE_CLI_OPTS: "-Dhttps.proxyHost=squid-proxy -Dhttps.proxyPort=3128 -Dhttp.proxyHost=squid-proxy -Dhttp.proxyPort=3128 -Dhttp.nonProxyHosts=localhost" ``` ## Maven 프로젝트에 프록시 사용하기 Maven은 `HTTP(S)_PROXY` 환경 변수를 읽지 않습니다. Maven 종속성 스캐너를 프록시를 사용하도록 만들려면 `MAVEN_CLI_OPTS` CI/CD 변수를 사용하여 옵션을 지정할 수 있습니다. ```yaml variables: MAVEN_CLI_OPTS: "-DproxySet=true -Dhttps.proxyHost=squid-proxy -Dhttps.proxyPort=3128 -Dhttp.proxyHost=squid-proxy -Dhttp.proxyPort=3218" ``` ## 언어 및 패키지 관리자에 대한 특정 설정 특정 언어 및 패키지 관리자를 구성하는 방법은 다음 섹션을 참조하세요. ### Python (pip) 분석기가 실행되기 전에 Python 패키지를 설치해야 하는 경우, 스캔 작업의 `before_script`에서 `pip install --user`를 사용해야 합니다. `--user` 플래그는 프로젝트 종속성이 사용자 디렉토리에 설치되도록 합니다. `--user` 옵션을 전달하지 않으면 패키지가 전역적으로 설치되며 스캔되지 않으며 프로젝트 종속성을 나열할 때 나타나지 않습니다. ### Python (setuptools) 분석기가 실행되기 전에 Python 패키지를 설치해야 하는 경우, 스캔 작업의 `before_script`에서 `python setup.py install --user`를 사용해야 합니다. `--user` 플래그는 프로젝트 종속성이 사용자 디렉토리에 설치되도록 합니다. `--user` 옵션을 전달하지 않으면 패키지가 전역적으로 설치되며 스캔되지 않으며 프로젝트 종속성을 나열할 때 나타나지 않습니다. 개인 PyPi 저장소에 대한 자체 서명된 인증서를 사용하는 경우, 템플릿 `.gitlab-ci.yml` 이외의 추가 작업 구성이 필요하지 않습니다. 그러나 프로젝트가 개인 저장소에 도달할 수 있도록 `setup.py`를 업데이트해야 합니다. 다음은 예시 구성입니다: 1. 각 `install_requires` 목록의 종속성마다 개인 저장소를 가리키는 `dependency_links` 속성을 만들도록 `setup.py`를 업데이트하세요. ```python install_requires=['pyparsing>=2.0.3'], dependency_links=['https://pypi.example.com/simple/pyparsing'], ``` 1. 저장소 URL에서 인증서를 가져와 프로젝트에 추가하세요. ```shell printf "\n" | openssl s_client -connect pypi.example.com:443 -servername pypi.example.com | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > internal.crt ``` 1. `setup.py`를 새로 다운로드한 인증서를 가리키도록 하세요. ```python import setuptools.ssl_support setuptools.ssl_support.cert_paths = ['internal.crt'] ``` ### Python (Pipenv) 네트워크 연결이 제한된 환경에서 실행해야 하는 경우, `PIPENV_PYPI_MIRROR` 변수를 구성하여 개인 PyPi 미러를 사용해야 합니다. 이 미러에는 기본 및 개발 종속성이 모두 포함되어야 합니다. ```yaml variables: PIPENV_PYPI_MIRROR: https://pypi.example.com/simple ``` `PIP_EXTRA_INDEX_URL` 환경 변수를 사용해야 하는 경우, [CVE-2018-20225](https://nvd.nist.gov/vuln/detail/CVE-2018-20225)에서 문서화된 가능한 악용으로 인해 추가 주의가 필요합니다.