사용자 지정 규칙 집합 스키마

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

파이프라인 비밀 감지의 동작을 사용자 정의하는 여러 종류의 규칙 집합을 사용하여 분석기 규칙 집합을 사용자 정의할 수 있습니다.

스키마

파이프라인 비밀 감지 규칙 집합의 사용자 정의는 엄격한 스키마를 준수해야 합니다. 다음 섹션에서는 각 옵션과 해당 섹션에 적용되는 스키마를 설명합니다.

최상위 섹션

최상위 섹션에는 TOML 테이블로 정의된 하나 이상의 _구성 섹션_이 포함됩니다.

설정 설명
[secrets] 분석기를 위한 구성 섹션을 선언합니다.

구성 예시:

[secrets]
...

[secrets] 구성 섹션

[secrets] 섹션을 사용하여 분석기의 동작을 사용자 정의할 수 있습니다. 유효한 속성은 수행 중인 구성의 종류에 따라 달라집니다.

설정 적용 대상 설명
[[secrets.ruleset]] 미리 정의된 규칙 기존 규칙을 수정합니다.
interpolate 모든 true로 설정하면 구성에서 환경 변수를 평가할 수 있습니다. 비밀이나 토큰이 노출되지 않도록 주의해서 사용하세요. (기본값: false)
description 통과 사용자 정의 규칙 집합의 설명입니다.
targetdir 통과 최종 구성이 유지되어야 하는 디렉터리입니다. 비어 있는 경우 무작위 이름의 디렉터리가 생성됩니다. 디렉터리에는 최대 100MB의 파일이 포함될 수 있습니다.
validate 통과 true로 설정하면 각 통과의 내용이 유효성이 검사됩니다. 유효성 검사는 yaml, xml, json, toml 내용에 대해 동작합니다. 올바른 유효성 검사기는 [[secrets.passthrough]] 섹션의 target 매개변수에 사용된 확장자에 따라 식별됩니다. (기본값: false)
timeout 통과 시간이 초과하기 전에 통과 체인을 평가하는 데 소요되는 최대 시간입니다. 제한 시간은 300초를 초과할 수 없습니다. (기본값: 60)

interpolate

경고: 비밀이 노출되는 위험을 줄이려면 이 기능을 주의해서 사용하세요.

아래 예시는 구성에서 $GITURL 환경 변수를 사용하여 개인 리포지토리에 액세스하는 구성을 보여줍니다. 변수에는 사용자 이름과 토큰 (예: https://user:token@url)이 포함되어 있어서 구성 파일에 명시적으로 저장되지 않습니다.

[secrets]
  description = "내 개인 원격 규칙 집합"
  interpolate = true

  [[secrets.passthrough]]
    type  = "git"
    value = "$GITURL"
    ref = "main"

[[secrets.ruleset]] 섹션

[[secrets.ruleset]] 섹션은 단일 미리 정의된 규칙을 대상으로 수정합니다. 분석기에 대해 이러한 섹션을 하나 이상 정의할 수 있습니다.

설정 설명
disable 규칙을 비활성화해야 하는지 여부. (기본값: false)
[secrets.ruleset.identifier] 수정할 미리 정의된 규칙을 선택합니다.
[secrets.ruleset.override] 규칙에 대한 재정의를 정의합니다.

구성 예시:

[secrets]
  [[secrets.ruleset]]
    disable = true
    ...

[secrets.ruleset.identifier] 섹션

[secrets.ruleset.identifier] 섹션에는 수정하려는 미리 정의된 규칙의 식별자가 정의됩니다.

설정 설명
type 미리 정의된 규칙에서 사용된 식별자의 유형.
value 미리 정의된 규칙에서 사용된 식별자의 값.

typevalue에 대한 올바른 값은 분석기의 CI 작업에서 생성된 gl-secret-detection-report.json을 확인하여 결정할 수 있습니다. 이 파일은 분석기의 작업 결과물로써 작업 아티팩트로 다운로드할 수 있습니다.

예를 들어, 아래 스니펫은 gitlab_personal_access_token 규칙에서 하나의 식별자를 가진 결과를 보여줍니다. JSON 객체의 typevalue 키는 이 섹션에서 제공해야 하는 값과 일치합니다.

...
  "vulnerabilities": [
    {
      "id": "fccb407005c0fb58ad6cfcae01bea86093953ed1ae9f9623ecc3e4117675c91a",
      "category": "secret_detection",
      "name": "GitLab personal access token",
      "description": "커밋 5c124166에서 GitLab 개인 액세스 토큰을 찾았습니다.",
      ...
      "identifiers": [
        {
          "type": "gitleaks_rule_id",
          "name": "Gitleaks rule ID gitlab_personal_access_token",
          "value": "gitlab_personal_access_token"
        }
      ]
    }
    ...
  ]
...

구성 예시:

[secrets]
  [[secrets.ruleset]]
    [secrets.ruleset.identifier]
      type = "gitleaks_rule_id"
      value = "gitlab_personal_access_token"
    ...

[secrets.ruleset.override] 섹션

[secrets.ruleset.override] 섹션을 사용하여 미리 정의된 규칙의 속성을 재정의할 수 있습니다.

설정 설명
description 문제에 대한 상세한 설명.
message (사용되지 않음) 문제에 대한 설명.
name 규칙의 이름.
severity 규칙의 심각도. 유효한 옵션: Critical, High, Medium, Low, Unknown, Info

참고: message는 분석기에서 여전히 채워지지만 사용되지 않게 되었습니다 (영문) 그리고 namedescription 로 대체되었습니다.

구성 예시:

[secrets]
  [[secrets.ruleset]]
    [secrets.ruleset.override]
      severity = "Medium"
      name = "systemd machine-id"
    ...

[[secrets.passthrough]] 섹션

[[secrets.passthrough]] 섹션을 사용하면 사용자 지정 구성을 합성할 수 있습니다.

분석기당 최대 20개의 이러한 섹션을 정의할 수 있습니다. 그런 다음 Passthrough는 완전한 구성으로 평가되는 _passthrough chain_으로 결합되어 분석기의 사전 정의된 규칙을 대체하거나 확장하는 데 사용할 수 있습니다.

Passthrough는 순서대로 평가됩니다. 연쇄에서 나중에 나오는 Passthroughs는 우선 순위가 높으며(모드에 따라) 이전의 Passthroughs에 의해 생성된 데이터를 덮어쓰거나 추가할 수 있습니다. 기존 구성을 사용하거나 수정해야 할 때 Passthrough를 사용하세요.

단일 Passthrough에 의해 생성된 구성의 크기는 10MB로 제한됩니다.

설정 적용 대상 설명
type 모든 file, raw, git, 또는 url 중 하나입니다.
target 모든 Passthrough 평가에 의해 작성된 데이터를 포함할 대상 파일입니다. 비어 있으면 무작위 파일 이름이 사용됩니다.
mode 모든 overwrite이면 target 파일이 덮어씌워집니다. append이면 새 콘텐츠가 target 파일에 추가됩니다. git 유형은 overwrite만 지원합니다. (기본값: overwrite)
ref type = "git" 풀할 브랜치, 태그 또는 SHA의 이름을 포함합니다.
subdir type = "git" 구성 소스로 Git 리포지토리의 하위 디렉터리를 선택하는 데 사용됩니다.
auth type = "git" 비공개 Git 리포지토리에 저장된 구성을 사용하는 경우]에 사용됩니다.
value 모든 file, url, 및 git 유형의 경우 파일 또는 Git 리포지토리의 위치를 정의합니다. raw 유형의 경우 인라인 구성을 포함합니다.
validator 모든 Passthrough를 평가한 후 대상 파일에 명시적으로 유효성 검사기(xml, yaml, json, toml)를 호출하는 데 사용됩니다.

Passthrough 유형

유형 설명
file 동일한 Git 저장소에 저장된 파일을 사용합니다.
raw 규칙 집합 구성을 인라인으로 제공합니다.
git 원격 Git 저장소에서 구성을 풀어옵니다.
url HTTP를 사용하여 구성을 가져옵니다.