InfoGrab DocsInfoGrab Docs

보안 구성 프로필 관리

요약

보안 구성 프로필은 프로젝트 전반에서 보안 스캐너가 실행되는 방법과 시점을 정의하는 중앙화된 설정입니다. 개요는 보안 구성 프로필 소개를 참고합니다. 프로필을 그룹에 적용하면 해당 그룹 내 개별 프로젝트마다 적용됩니다.

히스토리
  • GitLab 18.9에서 security_scan_profiles_feature라는 기능 플래그와 함께 도입됨. 기본적으로 활성화됨.
  • 시크릿 탐지 프로필이 GitLab 18.10에서 추가됨.
  • SAST 프로필이 GitLab 18.11에서 추가됨.
  • 의존성 스캐닝 프로필이 GitLab 19.0에서 security_scan_profiles_dependency_scanning이라는 기능 플래그와 함께 도입됨. 기본적으로 활성화됨.
  • 의존성 스캐닝 자동 교정 프로필이 GitLab 19.2에서 security_remediation_profiles라는 기능 플래그와 함께 도입됨. 기본적으로 활성화됨.
  • 시크릿 탐지 스캔 프로필 구성이 GitLab 19.3에서 실험으로 도입됨. GraphQL API 로만 사용 가능.
  • 기능 플래그 security_scan_profiles_feature가 GitLab 19.4에서 제거됨.
  • 기능 플래그 security_remediation_profiles가 GitLab 19.4에서 제거됨.
  • SAST 스캔 프로필 구성이 GitLab 19.4에서 실험으로 도입됨. GraphQL API 로만 사용 가능.
  • 의존성 스캐닝 스캔 프로필 구성이 GitLab 19.5에서 실험 기능으로 도입되었으며, GraphQL API로만 사용할 수 있습니다.
  • UI의 사용자 지정 프로필이 GitLab 19.4에서 custom_scan_profiles_ui라는 기능 플래그와 함께 도입되었습니다. 기본적으로 비활성화되어 있습니다.
  • GitLab 19.5에서 GitLab.com, GitLab Self-Managed, GitLab Dedicated에서 활성화되었습니다.

보안 구성 프로필은 프로젝트 전반에서 보안 스캐너가 실행되는 방법과 시점을 정의하는 중앙화된 설정입니다. 보안 구성 프로필을 사용하면 조직 전반의 보안 스캐너를 효율적으로 관리할 수 있습니다. 프로필 기반 접근 방식은 최소한의 수동 설정으로 모범 사례를 적용합니다.

개요는 보안 구성 프로필 소개를 참고합니다.

프로필을 그룹에 적용하면 해당 그룹 내 개별 프로젝트마다 적용됩니다. 프로필은 그룹 자체에 연결되지 않으며, 프로필 사이나 하위 그룹 사이에 상속은 없습니다.

기본 프로필을 사용하면 최소한의 구성으로 몇 분 만에 사전 구성된 보안 스캐닝을 활성화할 수 있습니다.

보안 스캐너 구성#

프로필을 평가하고 관리하려면 그룹의 보안 인벤토리를 중앙 대시보드로 사용합니다.

테스트 커버리지 검토#

SAST, 의존성 스캐닝, 시크릿 탐지 등 그룹 내 스캐너의 대략적인 상태(Enabled, Not Enabled, Failed)를 확인하려면 다음과 같이 합니다:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Security inventory를 선택합니다.
  3. 보안 인벤토리에서 Test Coverage 칼럼을 검토합니다.

개별 프로젝트 커버리지 변경#

특정 프로젝트를 구성하려면 다음과 같이 합니다:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Security inventory를 선택합니다.
  3. 프로젝트 옆의 세로 줄임표(⋮)를 선택한 다음 Manage tool coverage를 선택합니다.
  4. 개별 스캐너를 켜거나 끕니다.

여러 프로젝트에 프로필 적용#

시간을 절약하려면 여러 프로젝트에 보안 설정을 한 번에 적용할 수 있습니다:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Security inventory를 선택합니다.
  3. 설정을 적용할 여러 프로젝트 또는 하위 그룹 전체를 선택합니다.
  4. Bulk Action 드롭다운을 선택하고 Manage security scanners를 선택합니다.
  5. 선택한 대상 전반의 보안 상태를 표준화하려면 Apply default profile to all을 선택합니다.

기본 프로필#

GitLab은 최소한의 구성으로 보안 스캐닝을 활성화할 수 있도록 스캐너 설정이 미리 구성된 기본 프로필을 제공합니다.

시크릿 탐지 프로필#

시크릿 탐지 프로필을 적용하면 개발 워크플로 전반에서 시크릿에 대한 권장 기준 보호가 활성화됩니다. 이 프로필은 다음 스캔 트리거를 활성화합니다:

  • Push protection: 모든 Git 푸시 이벤트를 스캔하고 시크릿이 탐지된 푸시를 차단하여, 시크릿이 코드베이스에 들어오는 것을 방지합니다.
  • Merge Request Pipelines: 열린 머지 리퀘스트가 있는 브랜치에 새 커밋이 푸시될 때마다 스캔을 자동으로 실행합니다. 결과는 해당 머지 리퀘스트가 새로 유입시킨 취약점으로 범위가 한정됩니다. 모든 브랜치가 대상입니다.
  • Branch Pipelines (default only): 변경 사항이 기본 브랜치에 머지되거나 푸시될 때 자동으로 실행되어, 기본 브랜치의 시크릿 탐지 상태를 전체적으로 보여 줍니다. 모든 브랜치가 대상입니다.

SAST 프로필#

SAST 프로필을 적용하면 권장 구성으로 프로젝트 전반에서 정적 애플리케이션 보안 테스트가 활성화됩니다. 이 프로필은 다음 스캔 트리거를 활성화합니다:

  • Merge Request Pipelines: 열린 머지 리퀘스트가 있는 브랜치에 새 커밋이 푸시될 때마다 SAST 스캔을 자동으로 실행합니다. 결과에는 해당 머지 리퀘스트가 새로 유입시킨 취약점만 포함됩니다. 모든 브랜치가 대상입니다.
  • Branch Pipelines (default only): 변경 사항이 기본 브랜치에 머지되거나 푸시될 때 자동으로 실행되어, 기본 브랜치의 SAST 상태를 전체적으로 보여 줍니다. 기본 브랜치가 대상입니다.

의존성 스캐닝 프로필#

의존성 스캐닝 프로필을 활성화하면 권장 구성으로 프로젝트의 의존성에서 알려진 취약점을 스캔합니다. 이 프로필은 다음 스캔 트리거를 활성화합니다:

  • Merge Request Pipelines: 열린 머지 리퀘스트가 있는 브랜치에 새 커밋이 푸시될 때마다 의존성 스캔을 자동으로 실행합니다. 결과에는 해당 머지 리퀘스트가 새로 유입시킨 취약점만 포함됩니다. 모든 브랜치가 대상입니다.
  • Branch Pipelines (default only): 변경 사항이 기본 브랜치에 머지되거나 푸시될 때 자동으로 실행되어, 기본 브랜치의 의존성 취약점 상태를 전체적으로 보여 줍니다. 기본 브랜치가 대상입니다.

의존성 스캐닝 자동 교정 프로필#

히스토리
  • 자동 교정에 대한 심사 및 교정 프로필 지원이 GitLab 19.4에서 triage_and_remediation_profile이라는 기능 플래그와 함께 도입됨. 기본적으로 활성화됨.

의존성 스캐닝 자동 교정 프로필을 활성화하면 GitLab 이 취약한 의존성을 취약하지 않은 버전으로 올리는 머지 리퀘스트를 엽니다. 이 기능에 대한 자세한 내용은 의존성 스캐닝 자동 교정을 참고합니다.

프로젝트에 프로필을 연결하려면 GitLab CLI(glab)를 사용합니다:

glab security config enable dependency_scanning_post_processing -R <project-path>

예를 들어 my-group/my-project에 프로필을 활성화하려면 다음과 같이 합니다:

glab security config enable dependency_scanning_post_processing -R my-group/my-project
Note

한 프로젝트에 두 프로필을 동시에 연결할 수 있습니다. 그런 경우 GitLab은 먼저 적용된 프로필만 사용합니다. 다른 프로필의 구성은 무시됩니다.

자동 심사 및 교정 프로필#

히스토리
  • 심사 및 교정 프로필이 GitLab 19.4에서 triage_and_remediation_profile이라는 기능 플래그와 함께 도입되었습니다. 기본적으로 활성화되어 있습니다.
Feature flag

이 기능의 사용 가능 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

심사 및 교정 프로필을 사용하면 프로젝트와 그룹 전반에서 GitLab Duo 심사 플로와 의존성 스캐닝 자동 교정을 켤 수 있습니다. GitLab Duo 플로는 AI를 사용해 발견 사항을 평가하고 해결합니다. 프로필은 플로를 단독으로 활성화할 수도 있고, 프로젝트별 설정이 있는 경우 그 설정을 대체할 수도 있습니다.

GitLab은 Conservative, Standard, Proactive 세 가지 프리셋을 제공합니다. 각 프리셋은 모든 플로에 서로 다른 구성을 적용하므로, 플로가 얼마나 넓은 범위에서 얼마나 자주 트리거되고 실행될지 선택할 수 있습니다. 프로필을 직접 만들어 구성할 수도 있습니다.

사전 요구 사항:

Note

이 플로는 대부분 AI 기반이며 GitLab Credits를 소비합니다. 소비량은 발견 사항 수에 비례해 늘어납니다.

프리셋#

플로 Conservative Standard Proactive
SAST 거짓 양성 탐지 high 이상, 온디맨드 medium 이상, 자동 info 이상, 자동
SAST 취약점 해결 high 이상, 온디맨드, 열린 머지 리퀘스트 최대 5개 medium 이상, 자동, 열린 머지 리퀘스트 최대 15개 info 이상, 자동, 머지 리퀘스트 제한 없음
시크릿 탐지 거짓 양성 탐지 high 이상, 온디맨드 medium 이상, 자동 info 이상, 자동
의존성 스캐닝 자동 교정 high 이상, 마이너 버전 업그레이드, 열린 머지 리퀘스트 최대 5개, 최근 7일 이내의 수정 버전은 건너뜀 high 이상, 마이너 버전 업그레이드, 열린 머지 리퀘스트 최대 10개, 최근 7일 이내의 수정 버전은 건너뜀 info 이상, 메이저 버전 업그레이드, 열린 머지 리퀘스트 최대 10개, 최근 7일 이내의 수정 버전은 건너뜀

프리셋을 적용하려면 GraphQL API를 사용합니다. 프리셋의 이름은 Triage and Remediation (Conservative), Triage and Remediation (Standard), Triage and Remediation (Proactive)입니다.

관련 주제#

비즈니스 로직 프로필#

히스토리
  • GitLab 19.5에서 bl_security_analyzer라는 기능 플래그와 함께 도입되었습니다. 기본적으로 비활성화되어 있습니다.
Feature flag

이 기능의 사용 가능 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

비즈니스 로직 프로필은 AI 에이전트를 사용해 인가 누락, 객체 수준 액세스 오류, 대량 할당 같은 비즈니스 로직 취약점을 찾습니다. 프로필을 프로젝트에 연결하면 해당 프로젝트에서 스캔이 켜집니다.

머지 리퀘스트의 헤드 파이프라인이 성공하면 스캔은 머지 리퀘스트가 추가하거나 수정한 파일에 대해 실행됩니다. 기본 브랜치 파이프라인에서는 실행되지 않습니다. 기본 브랜치를 포함하려면 GitLab Duo Chat에서 스캔을 시작합니다. 프로젝트에 CI/CD 파이프라인이 없으면 머지 리퀘스트 스캔은 실행되지 않습니다.

최상위 그룹에 대해 Allow flow execution, Allow foundational flows, Business Logic Security Scan 플로를 켭니다.

사전 요구 사항과 스캔이 찾는 항목에 대한 자세한 내용은 비즈니스 로직 스캔을 참고합니다.

프로필 세부 정보 보기#

시크릿 탐지 프로필의 기술적 세부 정보를 보려면 다음과 같이 합니다:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Security inventory를 선택합니다.
  3. Secret Detection 프로필을 선택합니다.
  4. 다음 정보를 검토합니다:
    • Analyzer type: 프로필 유형입니다(예: Secret Detection, SAST, Dependency Scanning).
    • Scan triggers: 프로필이 지원하는 트리거입니다(예: Push Protection, Merge Request Pipelines, Branch Pipelines).
    • Status: 커버리지 상태 표시기를 사용해 현재 컨텍스트에서 프로필이 Active 인지 Disabled 인지 보여 줍니다.

Scanner Enablement Wizard로 스캐너 활성화#

스캐너 커버리지가 없는 프로젝트에 프로필을 적용하려면 Scanner Enablement Wizard를 사용합니다. 이 마법사는 커버리지가 없는 프로젝트를 찾아내고 그룹 전반에 기본 프로필이나 사용자 지정 프로필을 적용하게 해 줍니다.

GraphQL API로 프로필 적용#

GraphQL API를 사용하면 아직 UI에서 제공되지 않는 프로필을 포함해 모든 보안 구성 프로필을 적용할 수 있습니다. 이러한 쿼리는 대화형 GraphQL 탐색기로 실행하거나, /api/graphql 엔드포인트로 요청을 직접 보내 실행할 수 있습니다.

쿼리 실행, 인증, 페이지네이션에 대한 자세한 내용은 GraphQL API 쿼리 및 뮤테이션 실행을 참고합니다.

사전 요구 사항:

  • 연관된 프로젝트 또는 그룹에 대해 최소한 Maintainer 권한 또는 Security Manager 권한이 필요합니다.

보안 구성 프로필을 적용하려면 다음과 같이 합니다:

  1. 그룹에서 사용할 수 있는 프로필과 해당 ID를 가져옵니다:
   query {
     group(fullPath: "my-group") {
       availableSecurityScanProfiles {
         id
         name
         scanType
       }
     }
   }

아직 저장되지 않은 기본 프로필은 스캔 유형을 기반으로 하는 가상 ID를 반환합니다. 예: gid://gitlab/Security::ScanProfile/dependency_scanning_post_processing.

자세한 내용은 Group.availableSecurityScanProfiles 필드를 참고합니다.

  1. 원하는 프로필의 가상 ID 또는 실제 ID를 사용해 securityScanProfileAttach 뮤테이션으로 프로필을 적용합니다:
   mutation {
     securityScanProfileAttach(input: {
       securityScanProfileId: "gid://gitlab/Security::ScanProfile/dependency_scanning_post_processing",
       projectIds: ["gid://gitlab/Project/123"]
     }) {
       errors
     }
   }

자세한 내용은 securityScanProfileAttach 뮤테이션을 참고합니다.

  1. 프로필이 적용될 범위를 선택하려면 다음 인수 중 하나 또는 둘 다를 설정합니다:

    • projectIds: 특정 프로젝트에 프로필을 적용합니다.
    • groupIds: 하나 이상의 그룹에 속한 모든 프로젝트에 프로필을 적용합니다.

    지정한 프로젝트와 그룹은 모두 같은 최상위 그룹에 속해야 합니다. 뮤테이션 한 번에 프로젝트 ID와 그룹 ID를 합쳐 최대 100개의 ID를 지정할 수 있습니다.

  2. 응답의 errors 필드를 확인해 프로필이 적용되었는지 확인합니다.

시크릿 탐지 프로필 사용자 지정#

Feature flag

이 기능의 사용 가능 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

시크릿 탐지 프로필을 사용자 지정하면 스캐너가 실행될 때 사용하는 구성을 재정의할 수 있습니다. 각 설정은 기존 시크릿 탐지 CI/CD 변수에 대응합니다.

UI 또는 GraphQL API로 시크릿 탐지 프로필을 사용자 지정할 수 있습니다.

사전 요구 사항:

  • 연관된 그룹에 대한 Maintainer 권한 또는 Security Manager 권한이 필요합니다.

UI에서 시크릿 탐지 프로필을 사용자 지정하려면 다음과 같이 합니다.

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Security configuration을 선택합니다.
  3. Scanners 탭을 선택합니다.
  4. Secret detection 행에서 Manage profiles를 선택합니다.
  5. Create new profile을 선택합니다.
  6. Name과 Description을 입력합니다.
  7. Scan triggers에서 원하는 트리거를 켭니다.
  8. 선택 사항. Advanced configuration에서 재정의할 설정을 추가합니다.
  9. Create profile을 선택합니다.

나중에 프로필을 변경하려면 프로필을 선택한 다음 세로 줄임표(⋮) > Edit를 선택하고 Save changes를 선택합니다. 변경 사항은 해당 프로필을 사용하는 모든 프로젝트에 적용됩니다.

GraphQL API로 시크릿 탐지 프로필을 사용자 지정하려면 securityScanProfileCreate 또는 securityScanProfileUpdate 뮤테이션을 사용합니다. 사용자 지정하려는 트리거에 configuration.secretDetection 객체를 설정합니다.

필드 UI 설정 설명 대응하는 CI/CD 변수
secureAnalyzersPrefix Analyzer image registry 분석기 이미지를 가져올 컨테이너 레지스트리의 접두사입니다. SECURE_ANALYZERS_PREFIX
imageSuffix Image variant (Default, FIPS) 분석기 이미지 이름에 덧붙일 접미사입니다. DEFAULT 또는 FIPS로 설정합니다. SECRET_DETECTION_IMAGE_SUFFIX
historicScan Historic scan 현재 상태만이 아니라 Git 히스토리 전체를 스캔할지 여부입니다. SECRET_DETECTION_HISTORIC_SCAN
logOptions Log options 스캔할 커밋 범위를 제어하기 위해 git log에 전달하는 옵션입니다. SECRET_DETECTION_LOG_OPTIONS
excludedPaths Paths to exclude 스캔에서 제외할 글로브 경로입니다. SECRET_DETECTION_EXCLUDED_PATHS
rulesetGitReference Ruleset Git reference 사용할 원격 룰셋 구성의 Git 참조입니다. SECRET_DETECTION_RULESET_GIT_REFERENCE

예를 들어 머지 리퀘스트 파이프라인 트리거를 사용자 지정한 시크릿 탐지 프로필을 만들려면 다음과 같이 합니다:

mutation {
  securityScanProfileCreate(input: {
    namespaceId: "gid://gitlab/Group/123",
    scanType: SECRET_DETECTION,
    name: "Custom secret detection profile",
    description: "Secret detection profile with a historic scan and path exclusions",
    triggers: [
      {
        triggerType: MERGE_REQUEST_PIPELINE,
        configuration: {
          secretDetection: {
            historicScan: true,
            excludedPaths: ["spec/**/*", "test/**/*"]
          }
        }
      }
    ]
  }) {
    scanProfile {
      id
      name
    }
    errors
  }
}

기본적으로 stripDefaults 인수는 프로필을 저장하기 전에 기본값과 일치하는 트리거 구성 값을 제거하므로, 재정의한 값만 유지됩니다.

전체 인수 목록은 securityScanProfileCreate 뮤테이션을 참고합니다.

SAST 프로필 사용자 지정#

Feature flag

이 기능의 사용 가능 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

SAST 프로필을 사용자 지정하면 프로필이 실행될 때 사용하는 스캐너 구성을 재정의할 수 있습니다. 각 설정은 기존 SAST CI/CD 변수에 대응합니다.

이 기능은 실험입니다. UI 또는 GraphQL API로 SAST 프로필을 사용자 지정할 수 있습니다.

사전 요구 사항:

  • 연관된 그룹에 대한 Maintainer 권한 또는 Security Manager 권한이 필요합니다.

UI에서 SAST 프로필을 사용자 지정하려면 다음과 같이 합니다.

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Security configuration을 선택합니다.
  3. Scanners 탭을 선택합니다.
  4. Static application security testing (SAST) 행에서 Manage profiles를 선택합니다.
  5. Create new profile을 선택합니다.
  6. Name과 Description을 입력합니다.
  7. Scan triggers에서 원하는 트리거를 켭니다.
  8. 선택 사항. Advanced configuration에서 재정의할 설정을 추가합니다.
  9. Create profile을 선택합니다.

나중에 프로필을 변경하려면 프로필을 선택한 다음 세로 줄임표(⋮) > Edit를 선택하고 Save changes를 선택합니다. 변경 사항은 해당 프로필을 사용하는 모든 프로젝트에 적용됩니다.

GraphQL API로 SAST 프로필을 사용자 지정하려면 securityScanProfileCreate 또는 securityScanProfileUpdate 뮤테이션을 사용합니다. 사용자 지정하려는 트리거에 configuration.sast 객체를 설정합니다.

필드 UI 설정 설명 대응하는 CI/CD 변수
secureAnalyzersPrefix Analyzer image registry 분석기 이미지를 가져올 컨테이너 레지스트리의 접두사입니다. SECURE_ANALYZERS_PREFIX
imageSuffix Image variant (Default, FIPS) 분석기 이미지 이름에 덧붙일 접미사입니다. DEFAULT 또는 FIPS로 설정합니다. SAST_IMAGE_SUFFIX
analyzerImageTag Analyzer image tag 사용할 분석기 이미지의 태그입니다. 모든 SAST 분석기에 고정된 이미지 태그를 재정의하므로, 특정 버전이 필요한 경우 분석기 실패를 유발할 수 있습니다. SAST_ANALYZER_IMAGE_TAG
excludedAnalyzers Analyzers to skip 스캔에서 제외할 분석기입니다. SAST_EXCLUDED_ANALYZERS
excludedPaths Paths to exclude 스캔에서 제외할 글로브 경로입니다. SAST_EXCLUDED_PATHS
advancedSastPartialScan Advanced SAST partial scanning (Enabled, Disabled) GitLab Advanced SAST의 diff 기반 스캐닝을 제어합니다. DIFFERENTIAL 또는 DISABLED로 설정합니다. ADVANCED_SAST_PARTIAL_SCAN
gitlabAdvSastIncrScan Advanced SAST incremental scanning GitLab Advanced SAST에 증분 스캐닝이 활성화되어 있는지 여부입니다. GITLAB_ADV_SAST_INCR_SCAN

예를 들어 머지 리퀘스트 파이프라인 트리거를 사용자 지정한 SAST 프로필을 만들려면 다음과 같이 합니다:

mutation {
  securityScanProfileCreate(input: {
    namespaceId: "gid://gitlab/Group/123",
    scanType: SAST,
    name: "Custom SAST profile",
    description: "SAST profile with custom analyzer exclusions and Advanced SAST settings",
    triggers: [
      {
        triggerType: MERGE_REQUEST_PIPELINE,
        configuration: {
          sast: {
            excludedAnalyzers: ["eslint"],
            excludedPaths: ["spec/**/*", "test/**/*"],
            advancedSastPartialScan: DIFFERENTIAL,
            gitlabAdvSastIncrScan: true
          }
        }
      }
    ]
  }) {
    scanProfile {
      id
      name
    }
    errors
  }
}

트리거마다 구성 멤버는 하나만 설정할 수 있으며, 프로필의 스캔 유형과 일치해야 합니다. SAST 프로필에서 그 멤버는 sast 입니다.

기본적으로 stripDefaults 인수는 프로필을 저장하기 전에 기본값과 일치하는 트리거 구성 값을 제거하므로, 재정의한 값만 유지됩니다.

전체 인수 목록은 securityScanProfileCreate 뮤테이션을 참고합니다.

의존성 스캐닝 프로필 사용자 지정#

의존성 스캐닝 프로필을 사용자 지정하면 스캐너가 실행될 때 사용하는 구성을 재정의할 수 있습니다. 각 설정은 기존 의존성 스캐닝 CI/CD 변수에 대응합니다.

이 기능은 GraphQL API로만 사용할 수 있습니다.

사전 요구 사항:

  • 최상위 그룹에 대한 Security Manager, Maintainer 또는 Owner 권한이 필요합니다.

의존성 스캐닝 프로필을 사용자 지정하려면 다음과 같이 합니다.

  • securityScanProfileCreate 또는 securityScanProfileUpdate 뮤테이션에서 사용자 지정하려는 각 트리거에 configuration.dependencyScanning 객체를 설정합니다.

dependencyScanning 객체는 다음 필드를 지원합니다.

필드 설명 대응하는 CI/CD 변수
secureAnalyzersPrefix 분석기 이미지를 가져올 컨테이너 레지스트리의 접두사입니다. SECURE_ANALYZERS_PREFIX
additionalCaCertBundle 신뢰할 CA 인증서 번들입니다. 이 번들은 시스템 인증서에 추가되며 스캔 중 다른 도구가 사용합니다. ADDITIONAL_CA_CERT_BUNDLE
secureLogLevel 분석기가 사용하는 로깅 수준입니다. FATAL, ERROR, WARN, INFO, DEBUG 중 하나로 설정합니다. SECURE_LOG_LEVEL
excludedPaths 스캔에서 제외할 글로브 경로입니다. DS_EXCLUDED_PATHS
includeDevDependencies 지원되는 파일을 스캔할 때 개발 및 테스트 의존성을 포함할지 여부입니다. DS_INCLUDE_DEV_DEPENDENCIES
maxDepth 분석기가 스캔하는 디렉터리 깊이입니다. 값이 -1이면 모든 디렉터리를 스캔합니다. DS_MAX_DEPTH
pipDependencyPath 분석을 위해 Python 패키지를 설치하는 데 사용하는 경로입니다. DS_PIP_DEPENDENCY_PATH
staticReachabilityEnabled 정적 도달 가능성을 활성화할지 여부입니다. DS_STATIC_REACHABILITY_ENABLED
enableManifestFallback 잠금 파일이나 의존성 그래프 내보내기를 사용할 수 없을 때 매니페스트 파일을 스캔할지 여부입니다. 자세한 내용은 매니페스트 대체를 참고합니다. DS_ENABLE_MANIFEST_FALLBACK
pipcompileLockfileFileNamePattern 처리할 pip-compile 잠금 파일을 선택하는 글로브 패턴입니다. 이 패턴은 디렉터리 경로가 아니라 파일 이름만 일치시킵니다. DS_PIPCOMPILE_LOCKFILE_FILE_NAME_PATTERN
pipManifestFileNamePattern 의존성 해석과 매니페스트 스캔을 위해 처리할 pip 매니페스트 파일을 선택하는 글로브 패턴입니다. 이 패턴은 디렉터리 경로가 아니라 파일 이름만 일치시킵니다. DS_PIP_MANIFEST_FILE_NAME_PATTERN
enableVulnerabilityScan 생성된 SBOM의 취약점 분석을 활성화할지 여부입니다. DS_ENABLE_VULNERABILITY_SCAN
apiTimeout 취약점 스캔 API 요청 타임아웃(초)이며 5에서 300 사이입니다. DS_API_TIMEOUT
apiScanDownloadDelay 스캔 결과를 다운로드하기 전 취약점 스캔 API의 초기 지연(초)이며 1에서 120 사이입니다. DS_API_SCAN_DOWNLOAD_DELAY
mavenDependencyPluginVersion 해석 중 사용하는 maven-dependency-plugin의 버전입니다. DS_MAVEN_DEPENDENCY_PLUGIN_VERSION
mavenArgs 의존성 해석 중 Maven에 전달하는 추가 인수입니다. MAVEN_ARGS
gradleCliOpts 의존성 해석 중 Gradle에 전달하는 추가 명령줄 옵션입니다. GRADLE_CLI_OPTS
disabledResolutionJobs 비활성화할 해석 작업의 목록입니다. 유효한 값은 MAVEN, GRADLE, PYTHON입니다. 기본적으로 사용 가능한 모든 해석 작업이 활성화됩니다. DS_DISABLED_RESOLUTION_JOBS
mavenResolutionImage Maven 의존성 해석 작업이 사용하는 이미지입니다. DS_MAVEN_RESOLUTION_IMAGE
gradleResolutionImage Gradle 의존성 해석 작업이 사용하는 이미지입니다. DS_GRADLE_RESOLUTION_IMAGE
pythonResolutionImage Python 의존성 해석 작업이 사용하는 이미지입니다. DS_PYTHON_RESOLUTION_IMAGE
pipIndexUrl Python Package Index의 기본 URL입니다. PIP_INDEX_URL
pipExtraIndexUrl pipIndexUrl에 더해 사용할 Python 패키지 인덱스의 추가 URL입니다. PIP_EXTRA_INDEX_URL
searchIgnoreHiddenDirs 분석기가 지원되는 파일을 검색할 때 숨김 디렉터리를 무시할지 여부입니다. SEARCH_IGNORE_HIDDEN_DIRS

예를 들어 머지 리퀘스트 파이프라인 트리거를 사용자 지정한 의존성 스캐닝 프로필을 만들려면 다음과 같이 합니다:

mutation {
  securityScanProfileCreate(input: {
    namespaceId: "gid://gitlab/Group/123",
    scanType: DEPENDENCY_SCANNING,
    name: "Custom dependency scanning profile",
    description: "Dependency scanning profile that excludes development dependencies and scans all directories",
    triggers: [
      {
        triggerType: MERGE_REQUEST_PIPELINE,
        configuration: {
          dependencyScanning: {
            includeDevDependencies: false,
            excludedPaths: ["spec/**/*", "test/**/*"],
            maxDepth: -1,
            staticReachabilityEnabled: true
          }
        }
      }
    ]
  }) {
    scanProfile {
      id
      name
    }
    errors
  }
}

트리거마다 구성 멤버는 하나만 설정할 수 있으며, 프로필의 스캔 유형과 일치해야 합니다. 의존성 스캐닝 프로필에서 그 멤버는 dependencyScanning입니다.

전체 인수 목록은 securityScanProfileCreate 뮤테이션을 참고합니다.

커버리지 상태 표시기#

시스템은 인벤토리에서 시각적 신호로 프로젝트가 보호되고 있는지 나타냅니다:

  • 초록색 실선 바: 스캐너가 완전히 활성화되어 동작 중입니다.
  • 회색 또는 빈 바: 스캐너가 아직 구성되거나 활성화되지 않았습니다.
  • 부분 바: 일부 보호만 동작 중입니다(예: 프로필에서 제공하는 트리거 중 일부만 활성화된 경우).
  • 툴팁: 커버리지 바 위에 마우스를 올리면 파이프라인 기반 스캔의 마지막 스캔 날짜와 파이프라인 상태를 볼 수 있습니다.

파이프라인 기반 스캔과 달리 푸시 보호는 푸시 과정에서 실시간으로 실행되므로 마지막 스캔 날짜가 없습니다.

문제 해결#

보안 구성 프로필을 사용할 때 다음 문제가 발생할 수 있습니다.

푸시 보호에 마지막 스캔 날짜가 표시되지 않음#

푸시 보호는 일정 기반이 아니라 이벤트 기반입니다. git push 과정에서 실시간으로 시크릿을 가로챕니다. push 명령 시점에 동작하기 때문에, 파이프라인 기반 스캐너에서 볼 수 있는 마지막 스캔 날짜가 없습니다.

대시보드에서는 스캐너 상태가 활성이지만 인벤토리 툴팁에서는 활성화되지 않음#

프로젝트가 레거시 설정을 사용하면서 새 프로필도 함께 할당된 경우 발생할 수 있습니다.

이 문제를 해결하려면 다음과 같이 합니다:

  1. 가장 정확한 현재 프로필 상태는 Security Configuration 페이지에서 확인합니다.
  2. 필요하다면 .gitlab-ci.yml 파일에서 레거시 스캐너 구성을 제거해 프로필 기반 구성만 사용합니다.
Note

인벤토리 툴팁은 레거시 설정과 프로필 기반 설정을 합한 상태를 반영하도록 개선 중입니다.

레거시 구성과 프로필 기반 구성의 차이#

레거시 스캐너 구성에서 프로필 기반 구성으로 마이그레이션하는 경우 다음 차이에 유의합니다:

  • 레거시 구성: 스캐너를 활성화하려면 YAML 파일이나 개별 프로젝트 설정을 수동으로 편집해야 합니다.
  • 프로필 기반 구성: 코드를 수정하지 않고도 여러 프로젝트에 기본 프로필을 한 번에 적용할 수 있는 중앙화된 시스템을 사용합니다.

프로필 기반 구성은 관리가 더 쉽고 프로젝트 전반의 일관성이 높아 권장됩니다.

보안 구성 프로필 관리

GitLab v19.5
Tier: Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

보안 구성 프로필은 프로젝트 전반에서 보안 스캐너가 실행되는 방법과 시점을 정의하는 중앙화된 설정입니다. 개요는 보안 구성 프로필 소개를 참고합니다. 프로필을 그룹에 적용하면 해당 그룹 내 개별 프로젝트마다 적용됩니다.

히스토리
  • GitLab 18.9에서 security_scan_profiles_feature라는 기능 플래그와 함께 도입됨. 기본적으로 활성화됨.
  • 시크릿 탐지 프로필이 GitLab 18.10에서 추가됨.
  • SAST 프로필이 GitLab 18.11에서 추가됨.
  • 의존성 스캐닝 프로필이 GitLab 19.0에서 security_scan_profiles_dependency_scanning이라는 기능 플래그와 함께 도입됨. 기본적으로 활성화됨.
  • 의존성 스캐닝 자동 교정 프로필이 GitLab 19.2에서 security_remediation_profiles라는 기능 플래그와 함께 도입됨. 기본적으로 활성화됨.
  • 시크릿 탐지 스캔 프로필 구성이 GitLab 19.3에서 실험으로 도입됨. GraphQL API 로만 사용 가능.
  • 기능 플래그 security_scan_profiles_feature가 GitLab 19.4에서 제거됨.
  • 기능 플래그 security_remediation_profiles가 GitLab 19.4에서 제거됨.
  • SAST 스캔 프로필 구성이 GitLab 19.4에서 실험으로 도입됨. GraphQL API 로만 사용 가능.
  • 의존성 스캐닝 스캔 프로필 구성이 GitLab 19.5에서 실험 기능으로 도입되었으며, GraphQL API로만 사용할 수 있습니다.
  • UI의 사용자 지정 프로필이 GitLab 19.4에서 custom_scan_profiles_ui라는 기능 플래그와 함께 도입되었습니다. 기본적으로 비활성화되어 있습니다.
  • GitLab 19.5에서 GitLab.com, GitLab Self-Managed, GitLab Dedicated에서 활성화되었습니다.

보안 구성 프로필은 프로젝트 전반에서 보안 스캐너가 실행되는 방법과 시점을 정의하는 중앙화된 설정입니다. 보안 구성 프로필을 사용하면 조직 전반의 보안 스캐너를 효율적으로 관리할 수 있습니다. 프로필 기반 접근 방식은 최소한의 수동 설정으로 모범 사례를 적용합니다.

개요는 보안 구성 프로필 소개를 참고합니다.

프로필을 그룹에 적용하면 해당 그룹 내 개별 프로젝트마다 적용됩니다. 프로필은 그룹 자체에 연결되지 않으며, 프로필 사이나 하위 그룹 사이에 상속은 없습니다.

기본 프로필을 사용하면 최소한의 구성으로 몇 분 만에 사전 구성된 보안 스캐닝을 활성화할 수 있습니다.

보안 스캐너 구성#

프로필을 평가하고 관리하려면 그룹의 보안 인벤토리를 중앙 대시보드로 사용합니다.

테스트 커버리지 검토#

SAST, 의존성 스캐닝, 시크릿 탐지 등 그룹 내 스캐너의 대략적인 상태(Enabled, Not Enabled, Failed)를 확인하려면 다음과 같이 합니다:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Security inventory를 선택합니다.
  3. 보안 인벤토리에서 Test Coverage 칼럼을 검토합니다.

개별 프로젝트 커버리지 변경#

특정 프로젝트를 구성하려면 다음과 같이 합니다:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Security inventory를 선택합니다.
  3. 프로젝트 옆의 세로 줄임표(⋮)를 선택한 다음 Manage tool coverage를 선택합니다.
  4. 개별 스캐너를 켜거나 끕니다.

여러 프로젝트에 프로필 적용#

시간을 절약하려면 여러 프로젝트에 보안 설정을 한 번에 적용할 수 있습니다:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Security inventory를 선택합니다.
  3. 설정을 적용할 여러 프로젝트 또는 하위 그룹 전체를 선택합니다.
  4. Bulk Action 드롭다운을 선택하고 Manage security scanners를 선택합니다.
  5. 선택한 대상 전반의 보안 상태를 표준화하려면 Apply default profile to all을 선택합니다.

기본 프로필#

GitLab은 최소한의 구성으로 보안 스캐닝을 활성화할 수 있도록 스캐너 설정이 미리 구성된 기본 프로필을 제공합니다.

시크릿 탐지 프로필#

시크릿 탐지 프로필을 적용하면 개발 워크플로 전반에서 시크릿에 대한 권장 기준 보호가 활성화됩니다. 이 프로필은 다음 스캔 트리거를 활성화합니다:

  • Push protection: 모든 Git 푸시 이벤트를 스캔하고 시크릿이 탐지된 푸시를 차단하여, 시크릿이 코드베이스에 들어오는 것을 방지합니다.
  • Merge Request Pipelines: 열린 머지 리퀘스트가 있는 브랜치에 새 커밋이 푸시될 때마다 스캔을 자동으로 실행합니다. 결과는 해당 머지 리퀘스트가 새로 유입시킨 취약점으로 범위가 한정됩니다. 모든 브랜치가 대상입니다.
  • Branch Pipelines (default only): 변경 사항이 기본 브랜치에 머지되거나 푸시될 때 자동으로 실행되어, 기본 브랜치의 시크릿 탐지 상태를 전체적으로 보여 줍니다. 모든 브랜치가 대상입니다.

SAST 프로필#

SAST 프로필을 적용하면 권장 구성으로 프로젝트 전반에서 정적 애플리케이션 보안 테스트가 활성화됩니다. 이 프로필은 다음 스캔 트리거를 활성화합니다:

  • Merge Request Pipelines: 열린 머지 리퀘스트가 있는 브랜치에 새 커밋이 푸시될 때마다 SAST 스캔을 자동으로 실행합니다. 결과에는 해당 머지 리퀘스트가 새로 유입시킨 취약점만 포함됩니다. 모든 브랜치가 대상입니다.
  • Branch Pipelines (default only): 변경 사항이 기본 브랜치에 머지되거나 푸시될 때 자동으로 실행되어, 기본 브랜치의 SAST 상태를 전체적으로 보여 줍니다. 기본 브랜치가 대상입니다.

의존성 스캐닝 프로필#

의존성 스캐닝 프로필을 활성화하면 권장 구성으로 프로젝트의 의존성에서 알려진 취약점을 스캔합니다. 이 프로필은 다음 스캔 트리거를 활성화합니다:

  • Merge Request Pipelines: 열린 머지 리퀘스트가 있는 브랜치에 새 커밋이 푸시될 때마다 의존성 스캔을 자동으로 실행합니다. 결과에는 해당 머지 리퀘스트가 새로 유입시킨 취약점만 포함됩니다. 모든 브랜치가 대상입니다.
  • Branch Pipelines (default only): 변경 사항이 기본 브랜치에 머지되거나 푸시될 때 자동으로 실행되어, 기본 브랜치의 의존성 취약점 상태를 전체적으로 보여 줍니다. 기본 브랜치가 대상입니다.

의존성 스캐닝 자동 교정 프로필#

히스토리
  • 자동 교정에 대한 심사 및 교정 프로필 지원이 GitLab 19.4에서 triage_and_remediation_profile이라는 기능 플래그와 함께 도입됨. 기본적으로 활성화됨.

의존성 스캐닝 자동 교정 프로필을 활성화하면 GitLab 이 취약한 의존성을 취약하지 않은 버전으로 올리는 머지 리퀘스트를 엽니다. 이 기능에 대한 자세한 내용은 의존성 스캐닝 자동 교정을 참고합니다.

프로젝트에 프로필을 연결하려면 GitLab CLI(glab)를 사용합니다:

glab security config enable dependency_scanning_post_processing -R <project-path>

예를 들어 my-group/my-project에 프로필을 활성화하려면 다음과 같이 합니다:

glab security config enable dependency_scanning_post_processing -R my-group/my-project
Note

한 프로젝트에 두 프로필을 동시에 연결할 수 있습니다. 그런 경우 GitLab은 먼저 적용된 프로필만 사용합니다. 다른 프로필의 구성은 무시됩니다.

자동 심사 및 교정 프로필#

히스토리
  • 심사 및 교정 프로필이 GitLab 19.4에서 triage_and_remediation_profile이라는 기능 플래그와 함께 도입되었습니다. 기본적으로 활성화되어 있습니다.
Feature flag

이 기능의 사용 가능 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

심사 및 교정 프로필을 사용하면 프로젝트와 그룹 전반에서 GitLab Duo 심사 플로와 의존성 스캐닝 자동 교정을 켤 수 있습니다. GitLab Duo 플로는 AI를 사용해 발견 사항을 평가하고 해결합니다. 프로필은 플로를 단독으로 활성화할 수도 있고, 프로젝트별 설정이 있는 경우 그 설정을 대체할 수도 있습니다.

GitLab은 Conservative, Standard, Proactive 세 가지 프리셋을 제공합니다. 각 프리셋은 모든 플로에 서로 다른 구성을 적용하므로, 플로가 얼마나 넓은 범위에서 얼마나 자주 트리거되고 실행될지 선택할 수 있습니다. 프로필을 직접 만들어 구성할 수도 있습니다.

사전 요구 사항:

Note

이 플로는 대부분 AI 기반이며 GitLab Credits를 소비합니다. 소비량은 발견 사항 수에 비례해 늘어납니다.

프리셋#

플로 Conservative Standard Proactive
SAST 거짓 양성 탐지 high 이상, 온디맨드 medium 이상, 자동 info 이상, 자동
SAST 취약점 해결 high 이상, 온디맨드, 열린 머지 리퀘스트 최대 5개 medium 이상, 자동, 열린 머지 리퀘스트 최대 15개 info 이상, 자동, 머지 리퀘스트 제한 없음
시크릿 탐지 거짓 양성 탐지 high 이상, 온디맨드 medium 이상, 자동 info 이상, 자동
의존성 스캐닝 자동 교정 high 이상, 마이너 버전 업그레이드, 열린 머지 리퀘스트 최대 5개, 최근 7일 이내의 수정 버전은 건너뜀 high 이상, 마이너 버전 업그레이드, 열린 머지 리퀘스트 최대 10개, 최근 7일 이내의 수정 버전은 건너뜀 info 이상, 메이저 버전 업그레이드, 열린 머지 리퀘스트 최대 10개, 최근 7일 이내의 수정 버전은 건너뜀

프리셋을 적용하려면 GraphQL API를 사용합니다. 프리셋의 이름은 Triage and Remediation (Conservative), Triage and Remediation (Standard), Triage and Remediation (Proactive)입니다.

관련 주제#

비즈니스 로직 프로필#

히스토리
  • GitLab 19.5에서 bl_security_analyzer라는 기능 플래그와 함께 도입되었습니다. 기본적으로 비활성화되어 있습니다.
Feature flag

이 기능의 사용 가능 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

비즈니스 로직 프로필은 AI 에이전트를 사용해 인가 누락, 객체 수준 액세스 오류, 대량 할당 같은 비즈니스 로직 취약점을 찾습니다. 프로필을 프로젝트에 연결하면 해당 프로젝트에서 스캔이 켜집니다.

머지 리퀘스트의 헤드 파이프라인이 성공하면 스캔은 머지 리퀘스트가 추가하거나 수정한 파일에 대해 실행됩니다. 기본 브랜치 파이프라인에서는 실행되지 않습니다. 기본 브랜치를 포함하려면 GitLab Duo Chat에서 스캔을 시작합니다. 프로젝트에 CI/CD 파이프라인이 없으면 머지 리퀘스트 스캔은 실행되지 않습니다.

최상위 그룹에 대해 Allow flow execution, Allow foundational flows, Business Logic Security Scan 플로를 켭니다.

사전 요구 사항과 스캔이 찾는 항목에 대한 자세한 내용은 비즈니스 로직 스캔을 참고합니다.

프로필 세부 정보 보기#

시크릿 탐지 프로필의 기술적 세부 정보를 보려면 다음과 같이 합니다:

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Security inventory를 선택합니다.
  3. Secret Detection 프로필을 선택합니다.
  4. 다음 정보를 검토합니다:
    • Analyzer type: 프로필 유형입니다(예: Secret Detection, SAST, Dependency Scanning).
    • Scan triggers: 프로필이 지원하는 트리거입니다(예: Push Protection, Merge Request Pipelines, Branch Pipelines).
    • Status: 커버리지 상태 표시기를 사용해 현재 컨텍스트에서 프로필이 Active 인지 Disabled 인지 보여 줍니다.

Scanner Enablement Wizard로 스캐너 활성화#

스캐너 커버리지가 없는 프로젝트에 프로필을 적용하려면 Scanner Enablement Wizard를 사용합니다. 이 마법사는 커버리지가 없는 프로젝트를 찾아내고 그룹 전반에 기본 프로필이나 사용자 지정 프로필을 적용하게 해 줍니다.

GraphQL API로 프로필 적용#

GraphQL API를 사용하면 아직 UI에서 제공되지 않는 프로필을 포함해 모든 보안 구성 프로필을 적용할 수 있습니다. 이러한 쿼리는 대화형 GraphQL 탐색기로 실행하거나, /api/graphql 엔드포인트로 요청을 직접 보내 실행할 수 있습니다.

쿼리 실행, 인증, 페이지네이션에 대한 자세한 내용은 GraphQL API 쿼리 및 뮤테이션 실행을 참고합니다.

사전 요구 사항:

  • 연관된 프로젝트 또는 그룹에 대해 최소한 Maintainer 권한 또는 Security Manager 권한이 필요합니다.

보안 구성 프로필을 적용하려면 다음과 같이 합니다:

  1. 그룹에서 사용할 수 있는 프로필과 해당 ID를 가져옵니다:
   query {
     group(fullPath: "my-group") {
       availableSecurityScanProfiles {
         id
         name
         scanType
       }
     }
   }

아직 저장되지 않은 기본 프로필은 스캔 유형을 기반으로 하는 가상 ID를 반환합니다. 예: gid://gitlab/Security::ScanProfile/dependency_scanning_post_processing.

자세한 내용은 Group.availableSecurityScanProfiles 필드를 참고합니다.

  1. 원하는 프로필의 가상 ID 또는 실제 ID를 사용해 securityScanProfileAttach 뮤테이션으로 프로필을 적용합니다:
   mutation {
     securityScanProfileAttach(input: {
       securityScanProfileId: "gid://gitlab/Security::ScanProfile/dependency_scanning_post_processing",
       projectIds: ["gid://gitlab/Project/123"]
     }) {
       errors
     }
   }

자세한 내용은 securityScanProfileAttach 뮤테이션을 참고합니다.

  1. 프로필이 적용될 범위를 선택하려면 다음 인수 중 하나 또는 둘 다를 설정합니다:

    • projectIds: 특정 프로젝트에 프로필을 적용합니다.
    • groupIds: 하나 이상의 그룹에 속한 모든 프로젝트에 프로필을 적용합니다.

    지정한 프로젝트와 그룹은 모두 같은 최상위 그룹에 속해야 합니다. 뮤테이션 한 번에 프로젝트 ID와 그룹 ID를 합쳐 최대 100개의 ID를 지정할 수 있습니다.

  2. 응답의 errors 필드를 확인해 프로필이 적용되었는지 확인합니다.

시크릿 탐지 프로필 사용자 지정#

Feature flag

이 기능의 사용 가능 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

시크릿 탐지 프로필을 사용자 지정하면 스캐너가 실행될 때 사용하는 구성을 재정의할 수 있습니다. 각 설정은 기존 시크릿 탐지 CI/CD 변수에 대응합니다.

UI 또는 GraphQL API로 시크릿 탐지 프로필을 사용자 지정할 수 있습니다.

사전 요구 사항:

  • 연관된 그룹에 대한 Maintainer 권한 또는 Security Manager 권한이 필요합니다.

UI에서 시크릿 탐지 프로필을 사용자 지정하려면 다음과 같이 합니다.

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Security configuration을 선택합니다.
  3. Scanners 탭을 선택합니다.
  4. Secret detection 행에서 Manage profiles를 선택합니다.
  5. Create new profile을 선택합니다.
  6. Name과 Description을 입력합니다.
  7. Scan triggers에서 원하는 트리거를 켭니다.
  8. 선택 사항. Advanced configuration에서 재정의할 설정을 추가합니다.
  9. Create profile을 선택합니다.

나중에 프로필을 변경하려면 프로필을 선택한 다음 세로 줄임표(⋮) > Edit를 선택하고 Save changes를 선택합니다. 변경 사항은 해당 프로필을 사용하는 모든 프로젝트에 적용됩니다.

GraphQL API로 시크릿 탐지 프로필을 사용자 지정하려면 securityScanProfileCreate 또는 securityScanProfileUpdate 뮤테이션을 사용합니다. 사용자 지정하려는 트리거에 configuration.secretDetection 객체를 설정합니다.

필드 UI 설정 설명 대응하는 CI/CD 변수
secureAnalyzersPrefix Analyzer image registry 분석기 이미지를 가져올 컨테이너 레지스트리의 접두사입니다. SECURE_ANALYZERS_PREFIX
imageSuffix Image variant (Default, FIPS) 분석기 이미지 이름에 덧붙일 접미사입니다. DEFAULT 또는 FIPS로 설정합니다. SECRET_DETECTION_IMAGE_SUFFIX
historicScan Historic scan 현재 상태만이 아니라 Git 히스토리 전체를 스캔할지 여부입니다. SECRET_DETECTION_HISTORIC_SCAN
logOptions Log options 스캔할 커밋 범위를 제어하기 위해 git log에 전달하는 옵션입니다. SECRET_DETECTION_LOG_OPTIONS
excludedPaths Paths to exclude 스캔에서 제외할 글로브 경로입니다. SECRET_DETECTION_EXCLUDED_PATHS
rulesetGitReference Ruleset Git reference 사용할 원격 룰셋 구성의 Git 참조입니다. SECRET_DETECTION_RULESET_GIT_REFERENCE

예를 들어 머지 리퀘스트 파이프라인 트리거를 사용자 지정한 시크릿 탐지 프로필을 만들려면 다음과 같이 합니다:

mutation {
  securityScanProfileCreate(input: {
    namespaceId: "gid://gitlab/Group/123",
    scanType: SECRET_DETECTION,
    name: "Custom secret detection profile",
    description: "Secret detection profile with a historic scan and path exclusions",
    triggers: [
      {
        triggerType: MERGE_REQUEST_PIPELINE,
        configuration: {
          secretDetection: {
            historicScan: true,
            excludedPaths: ["spec/**/*", "test/**/*"]
          }
        }
      }
    ]
  }) {
    scanProfile {
      id
      name
    }
    errors
  }
}

기본적으로 stripDefaults 인수는 프로필을 저장하기 전에 기본값과 일치하는 트리거 구성 값을 제거하므로, 재정의한 값만 유지됩니다.

전체 인수 목록은 securityScanProfileCreate 뮤테이션을 참고합니다.

SAST 프로필 사용자 지정#

Feature flag

이 기능의 사용 가능 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다.

SAST 프로필을 사용자 지정하면 프로필이 실행될 때 사용하는 스캐너 구성을 재정의할 수 있습니다. 각 설정은 기존 SAST CI/CD 변수에 대응합니다.

이 기능은 실험입니다. UI 또는 GraphQL API로 SAST 프로필을 사용자 지정할 수 있습니다.

사전 요구 사항:

  • 연관된 그룹에 대한 Maintainer 권한 또는 Security Manager 권한이 필요합니다.

UI에서 SAST 프로필을 사용자 지정하려면 다음과 같이 합니다.

  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
  2. 왼쪽 사이드바에서 Secure > Security configuration을 선택합니다.
  3. Scanners 탭을 선택합니다.
  4. Static application security testing (SAST) 행에서 Manage profiles를 선택합니다.
  5. Create new profile을 선택합니다.
  6. Name과 Description을 입력합니다.
  7. Scan triggers에서 원하는 트리거를 켭니다.
  8. 선택 사항. Advanced configuration에서 재정의할 설정을 추가합니다.
  9. Create profile을 선택합니다.

나중에 프로필을 변경하려면 프로필을 선택한 다음 세로 줄임표(⋮) > Edit를 선택하고 Save changes를 선택합니다. 변경 사항은 해당 프로필을 사용하는 모든 프로젝트에 적용됩니다.

GraphQL API로 SAST 프로필을 사용자 지정하려면 securityScanProfileCreate 또는 securityScanProfileUpdate 뮤테이션을 사용합니다. 사용자 지정하려는 트리거에 configuration.sast 객체를 설정합니다.

필드 UI 설정 설명 대응하는 CI/CD 변수
secureAnalyzersPrefix Analyzer image registry 분석기 이미지를 가져올 컨테이너 레지스트리의 접두사입니다. SECURE_ANALYZERS_PREFIX
imageSuffix Image variant (Default, FIPS) 분석기 이미지 이름에 덧붙일 접미사입니다. DEFAULT 또는 FIPS로 설정합니다. SAST_IMAGE_SUFFIX
analyzerImageTag Analyzer image tag 사용할 분석기 이미지의 태그입니다. 모든 SAST 분석기에 고정된 이미지 태그를 재정의하므로, 특정 버전이 필요한 경우 분석기 실패를 유발할 수 있습니다. SAST_ANALYZER_IMAGE_TAG
excludedAnalyzers Analyzers to skip 스캔에서 제외할 분석기입니다. SAST_EXCLUDED_ANALYZERS
excludedPaths Paths to exclude 스캔에서 제외할 글로브 경로입니다. SAST_EXCLUDED_PATHS
advancedSastPartialScan Advanced SAST partial scanning (Enabled, Disabled) GitLab Advanced SAST의 diff 기반 스캐닝을 제어합니다. DIFFERENTIAL 또는 DISABLED로 설정합니다. ADVANCED_SAST_PARTIAL_SCAN
gitlabAdvSastIncrScan Advanced SAST incremental scanning GitLab Advanced SAST에 증분 스캐닝이 활성화되어 있는지 여부입니다. GITLAB_ADV_SAST_INCR_SCAN

예를 들어 머지 리퀘스트 파이프라인 트리거를 사용자 지정한 SAST 프로필을 만들려면 다음과 같이 합니다:

mutation {
  securityScanProfileCreate(input: {
    namespaceId: "gid://gitlab/Group/123",
    scanType: SAST,
    name: "Custom SAST profile",
    description: "SAST profile with custom analyzer exclusions and Advanced SAST settings",
    triggers: [
      {
        triggerType: MERGE_REQUEST_PIPELINE,
        configuration: {
          sast: {
            excludedAnalyzers: ["eslint"],
            excludedPaths: ["spec/**/*", "test/**/*"],
            advancedSastPartialScan: DIFFERENTIAL,
            gitlabAdvSastIncrScan: true
          }
        }
      }
    ]
  }) {
    scanProfile {
      id
      name
    }
    errors
  }
}

트리거마다 구성 멤버는 하나만 설정할 수 있으며, 프로필의 스캔 유형과 일치해야 합니다. SAST 프로필에서 그 멤버는 sast 입니다.

기본적으로 stripDefaults 인수는 프로필을 저장하기 전에 기본값과 일치하는 트리거 구성 값을 제거하므로, 재정의한 값만 유지됩니다.

전체 인수 목록은 securityScanProfileCreate 뮤테이션을 참고합니다.

의존성 스캐닝 프로필 사용자 지정#

의존성 스캐닝 프로필을 사용자 지정하면 스캐너가 실행될 때 사용하는 구성을 재정의할 수 있습니다. 각 설정은 기존 의존성 스캐닝 CI/CD 변수에 대응합니다.

이 기능은 GraphQL API로만 사용할 수 있습니다.

사전 요구 사항:

  • 최상위 그룹에 대한 Security Manager, Maintainer 또는 Owner 권한이 필요합니다.

의존성 스캐닝 프로필을 사용자 지정하려면 다음과 같이 합니다.

  • securityScanProfileCreate 또는 securityScanProfileUpdate 뮤테이션에서 사용자 지정하려는 각 트리거에 configuration.dependencyScanning 객체를 설정합니다.

dependencyScanning 객체는 다음 필드를 지원합니다.

필드 설명 대응하는 CI/CD 변수
secureAnalyzersPrefix 분석기 이미지를 가져올 컨테이너 레지스트리의 접두사입니다. SECURE_ANALYZERS_PREFIX
additionalCaCertBundle 신뢰할 CA 인증서 번들입니다. 이 번들은 시스템 인증서에 추가되며 스캔 중 다른 도구가 사용합니다. ADDITIONAL_CA_CERT_BUNDLE
secureLogLevel 분석기가 사용하는 로깅 수준입니다. FATAL, ERROR, WARN, INFO, DEBUG 중 하나로 설정합니다. SECURE_LOG_LEVEL
excludedPaths 스캔에서 제외할 글로브 경로입니다. DS_EXCLUDED_PATHS
includeDevDependencies 지원되는 파일을 스캔할 때 개발 및 테스트 의존성을 포함할지 여부입니다. DS_INCLUDE_DEV_DEPENDENCIES
maxDepth 분석기가 스캔하는 디렉터리 깊이입니다. 값이 -1이면 모든 디렉터리를 스캔합니다. DS_MAX_DEPTH
pipDependencyPath 분석을 위해 Python 패키지를 설치하는 데 사용하는 경로입니다. DS_PIP_DEPENDENCY_PATH
staticReachabilityEnabled 정적 도달 가능성을 활성화할지 여부입니다. DS_STATIC_REACHABILITY_ENABLED
enableManifestFallback 잠금 파일이나 의존성 그래프 내보내기를 사용할 수 없을 때 매니페스트 파일을 스캔할지 여부입니다. 자세한 내용은 매니페스트 대체를 참고합니다. DS_ENABLE_MANIFEST_FALLBACK
pipcompileLockfileFileNamePattern 처리할 pip-compile 잠금 파일을 선택하는 글로브 패턴입니다. 이 패턴은 디렉터리 경로가 아니라 파일 이름만 일치시킵니다. DS_PIPCOMPILE_LOCKFILE_FILE_NAME_PATTERN
pipManifestFileNamePattern 의존성 해석과 매니페스트 스캔을 위해 처리할 pip 매니페스트 파일을 선택하는 글로브 패턴입니다. 이 패턴은 디렉터리 경로가 아니라 파일 이름만 일치시킵니다. DS_PIP_MANIFEST_FILE_NAME_PATTERN
enableVulnerabilityScan 생성된 SBOM의 취약점 분석을 활성화할지 여부입니다. DS_ENABLE_VULNERABILITY_SCAN
apiTimeout 취약점 스캔 API 요청 타임아웃(초)이며 5에서 300 사이입니다. DS_API_TIMEOUT
apiScanDownloadDelay 스캔 결과를 다운로드하기 전 취약점 스캔 API의 초기 지연(초)이며 1에서 120 사이입니다. DS_API_SCAN_DOWNLOAD_DELAY
mavenDependencyPluginVersion 해석 중 사용하는 maven-dependency-plugin의 버전입니다. DS_MAVEN_DEPENDENCY_PLUGIN_VERSION
mavenArgs 의존성 해석 중 Maven에 전달하는 추가 인수입니다. MAVEN_ARGS
gradleCliOpts 의존성 해석 중 Gradle에 전달하는 추가 명령줄 옵션입니다. GRADLE_CLI_OPTS
disabledResolutionJobs 비활성화할 해석 작업의 목록입니다. 유효한 값은 MAVEN, GRADLE, PYTHON입니다. 기본적으로 사용 가능한 모든 해석 작업이 활성화됩니다. DS_DISABLED_RESOLUTION_JOBS
mavenResolutionImage Maven 의존성 해석 작업이 사용하는 이미지입니다. DS_MAVEN_RESOLUTION_IMAGE
gradleResolutionImage Gradle 의존성 해석 작업이 사용하는 이미지입니다. DS_GRADLE_RESOLUTION_IMAGE
pythonResolutionImage Python 의존성 해석 작업이 사용하는 이미지입니다. DS_PYTHON_RESOLUTION_IMAGE
pipIndexUrl Python Package Index의 기본 URL입니다. PIP_INDEX_URL
pipExtraIndexUrl pipIndexUrl에 더해 사용할 Python 패키지 인덱스의 추가 URL입니다. PIP_EXTRA_INDEX_URL
searchIgnoreHiddenDirs 분석기가 지원되는 파일을 검색할 때 숨김 디렉터리를 무시할지 여부입니다. SEARCH_IGNORE_HIDDEN_DIRS

예를 들어 머지 리퀘스트 파이프라인 트리거를 사용자 지정한 의존성 스캐닝 프로필을 만들려면 다음과 같이 합니다:

mutation {
  securityScanProfileCreate(input: {
    namespaceId: "gid://gitlab/Group/123",
    scanType: DEPENDENCY_SCANNING,
    name: "Custom dependency scanning profile",
    description: "Dependency scanning profile that excludes development dependencies and scans all directories",
    triggers: [
      {
        triggerType: MERGE_REQUEST_PIPELINE,
        configuration: {
          dependencyScanning: {
            includeDevDependencies: false,
            excludedPaths: ["spec/**/*", "test/**/*"],
            maxDepth: -1,
            staticReachabilityEnabled: true
          }
        }
      }
    ]
  }) {
    scanProfile {
      id
      name
    }
    errors
  }
}

트리거마다 구성 멤버는 하나만 설정할 수 있으며, 프로필의 스캔 유형과 일치해야 합니다. 의존성 스캐닝 프로필에서 그 멤버는 dependencyScanning입니다.

전체 인수 목록은 securityScanProfileCreate 뮤테이션을 참고합니다.

커버리지 상태 표시기#

시스템은 인벤토리에서 시각적 신호로 프로젝트가 보호되고 있는지 나타냅니다:

  • 초록색 실선 바: 스캐너가 완전히 활성화되어 동작 중입니다.
  • 회색 또는 빈 바: 스캐너가 아직 구성되거나 활성화되지 않았습니다.
  • 부분 바: 일부 보호만 동작 중입니다(예: 프로필에서 제공하는 트리거 중 일부만 활성화된 경우).
  • 툴팁: 커버리지 바 위에 마우스를 올리면 파이프라인 기반 스캔의 마지막 스캔 날짜와 파이프라인 상태를 볼 수 있습니다.

파이프라인 기반 스캔과 달리 푸시 보호는 푸시 과정에서 실시간으로 실행되므로 마지막 스캔 날짜가 없습니다.

문제 해결#

보안 구성 프로필을 사용할 때 다음 문제가 발생할 수 있습니다.

푸시 보호에 마지막 스캔 날짜가 표시되지 않음#

푸시 보호는 일정 기반이 아니라 이벤트 기반입니다. git push 과정에서 실시간으로 시크릿을 가로챕니다. push 명령 시점에 동작하기 때문에, 파이프라인 기반 스캐너에서 볼 수 있는 마지막 스캔 날짜가 없습니다.

대시보드에서는 스캐너 상태가 활성이지만 인벤토리 툴팁에서는 활성화되지 않음#

프로젝트가 레거시 설정을 사용하면서 새 프로필도 함께 할당된 경우 발생할 수 있습니다.

이 문제를 해결하려면 다음과 같이 합니다:

  1. 가장 정확한 현재 프로필 상태는 Security Configuration 페이지에서 확인합니다.
  2. 필요하다면 .gitlab-ci.yml 파일에서 레거시 스캐너 구성을 제거해 프로필 기반 구성만 사용합니다.
Note

인벤토리 툴팁은 레거시 설정과 프로필 기반 설정을 합한 상태를 반영하도록 개선 중입니다.

레거시 구성과 프로필 기반 구성의 차이#

레거시 스캐너 구성에서 프로필 기반 구성으로 마이그레이션하는 경우 다음 차이에 유의합니다:

  • 레거시 구성: 스캐너를 활성화하려면 YAML 파일이나 개별 프로젝트 설정을 수동으로 편집해야 합니다.
  • 프로필 기반 구성: 코드를 수정하지 않고도 여러 프로젝트에 기본 프로필을 한 번에 적용할 수 있는 중앙화된 시스템을 사용합니다.

프로필 기반 구성은 관리가 더 쉽고 프로젝트 전반의 일관성이 높아 권장됩니다.