InfoGrab DocsInfoGrab Docs

커스텀 룰셋 스키마

요약

다양한 종류의 룰셋 커스터마이징을 사용하여 파이프라인 시크릿 감지의 동작을 커스터마이징할 수 있습니다. 파이프라인 시크릿 감지 룰셋의 커스터마이징은 엄격한 스키마를 따라야 합니다. 최상위 섹션에는 TOML 테이블로 정의된 하나 이상의 구성 섹션이 포함됩니다.

다양한 종류의 룰셋 커스터마이징을 사용하여 파이프라인 시크릿 감지의 동작을 커스터마이징할 수 있습니다.

스키마#

파이프라인 시크릿 감지 룰셋의 커스터마이징은 엄격한 스키마를 따라야 합니다. 다음 섹션에서는 사용 가능한 각 옵션과 해당 섹션에 적용되는 스키마를 설명합니다.

최상위 섹션#

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

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

구성 예시:

[secrets]
...

[secrets] 구성 섹션#

[secrets] 섹션에서 분석기의 동작을 커스터마이징할 수 있습니다. 유효한 속성은 만드는 구성의 종류에 따라 다릅니다.

설정 적용 대상 설명
[[secrets.ruleset]] 사전 정의된 규칙 기존 규칙에 대한 수정을 정의합니다.
interpolate 모두 true로 설정하면 구성에서 $VAR를 사용하여 환경 변수를 평가할 수 있습니다. 시크릿이나 토큰이 유출되지 않도록 이 기능을 주의하여 사용하세요. (기본값: false)
description 패스스루 커스텀 룰셋의 설명.
targetdir 패스스루 최종 구성이 유지되어야 할 디렉토리. 비어 있으면 임의의 이름을 가진 디렉토리가 만들어집니다. 디렉토리는 최대 100MB의 파일을 포함할 수 있습니다.
validate 패스스루 true로 설정하면 각 패스스루의 내용이 검증됩니다. 검증은 yaml, xml, json, toml 콘텐츠에 작동합니다. 적절한 검증기는 [[secrets.passthrough]] 섹션의 target 매개변수에서 사용된 확장자를 기반으로 식별됩니다. (기본값: false)
timeout 패스스루 시간 초과 전에 패스스루 체인을 평가하는 데 소비할 최대 시간. 시간 초과는 300초를 초과할 수 없습니다. (기본값: 60)

interpolate#

Warning

시크릿 유출 위험을 줄이려면 이 기능을 주의하여 사용하세요.

아래 예시는 비공개 리포지터리에 접근하기 위해 $GITURL 환경 변수를 사용하는 구성을 보여줍니다. 변수는 사용자 이름과 토큰을 포함하므로(예: https://user:token@url) 구성 파일에 명시적으로 저장하지 않습니다.

[secrets]
  description = "My private remote ruleset"
  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 사전 정의된 규칙에서 사용하는 식별자 값.

type과 value의 올바른 값을 결정하려면 분석기가 생성한 gl-secret-detection-report.json을 봅니다. 이 파일은 분석기의 CI/CD 작업에서 작업 아티팩트로 다운로드할 수 있습니다.

예를 들어 아래 스니펫은 하나의 식별자가 있는 gitlab_personal_access_token 규칙에서 발견된 내용을 보여줍니다. JSON 객체의 type과 value 키는 이 섹션에서 제공해야 할 값에 해당합니다.

...
  "vulnerabilities": [
    {
      "id": "fccb407005c0fb58ad6cfcae01bea86093953ed1ae9f9623ecc3e4117675c91a",
      "category": "secret_detection",
      "name": "GitLab personal access token",
      "description": "GitLab personal access token has been found in commit 5c124166",
      ...
      "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
Note

message는 여전히 분석기에 의해 채워지지만 사용 중단되어 name과 description으로 대체되었습니다.

구성 예시:

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

커스텀 규칙 형식#

히스토리

커스텀 규칙을 만들 때 Gitleaks의 표준 규칙 형식과 추가 GitLab 전용 필드를 모두 사용할 수 있습니다. 각 규칙에 사용할 수 있는 설정은 다음과 같습니다:

설정 필수 여부 설명
title 아니요 규칙의 커스텀 제목을 설정하는 GitLab 전용 필드.
description 예 규칙이 감지하는 내용에 대한 자세한 설명.
remediation 아니요 규칙이 트리거될 때 수정 지침을 제공하는 GitLab 전용 필드.
regex 예 시크릿을 감지하는 데 사용되는 정규 표현식 패턴.
keywords 아니요 정규 표현식을 적용하기 전에 콘텐츠를 사전 필터링하기 위한 키워드 목록.
id 예 규칙의 고유 식별자.

모든 사용 가능한 필드를 포함하는 커스텀 규칙 예시:

[[rules]]
  title = "API Key Detection Rule"
  description = "Detects potential API keys in the codebase"
  remediation = "Rotate the exposed API key and store it in a secure credential manager"
  id = "custom_api_key"
  keywords = ["apikey", "api_key"]
  regex = '''api[_-]key[_-][a-zA-Z0-9]{16,}'''

확장 룰셋의 규칙과 동일한 ID를 공유하는 커스텀 규칙을 만들면 커스텀 규칙이 우선합니다. 커스텀 규칙의 모든 속성이 확장 규칙의 해당 값을 대체합니다.

커스텀 규칙으로 기본 규칙을 확장하는 예시:

title = "Extension of GitLab's default Gitleaks config"

[extend]
  path = "/gitleaks.toml"

[[rules]]
  title = "Custom API Key Rule"
  description = "Detects custom API key format"
  remediation = "Rotate the exposed API key"
  id = "custom_api_123"
  keywords = ["testing"]
  regex = '''testing-key-[1-9]{3}'''

[[secrets.passthrough]] 섹션#

[[secrets.passthrough]] 섹션에서 분석기에 대한 커스텀 구성을 합성할 수 있습니다.

분석기당 최대 20개의 이 섹션을 정의할 수 있습니다. 패스스루는 그런 다음 분석기의 사전 정의된 규칙을 대체하거나 확장하는 데 사용할 수 있는 완전한 구성으로 평가되는 패스스루 체인으로 구성됩니다.

패스스루는 순서대로 평가됩니다. 체인의 뒤에 나열된 패스스루는 우선 순위가 높으며 이전 패스스루에서 생성된 데이터를 덮어쓰거나 추가할 수 있습니다(mode에 따라 다름). 기존 구성을 사용하거나 수정해야 할 때 패스스루를 사용합니다.

단일 패스스루에서 생성된 구성의 크기는 10MB로 제한됩니다.

설정 적용 대상 설명
type 모두 file, raw, git, url 중 하나.
target 모두 패스스루 평가로 작성된 데이터를 포함할 대상 파일. 비어 있으면 임의의 파일 이름이 사용됩니다.
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 모두 패스스루 평가 후 대상 파일에 대해 검증기(xml, yaml, json, toml)를 명시적으로 호출하는 데 사용됩니다.

패스스루 유형#

유형 설명
file 동일한 Git 리포지터리에 저장된 파일을 사용합니다.
raw 룰셋 구성을 인라인으로 제공합니다.
git 원격 Git 리포지터리에서 구성을 가져옵니다.
url HTTP를 사용하여 구성을 가져옵니다.

커스텀 룰셋 스키마

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

요약

다양한 종류의 룰셋 커스터마이징을 사용하여 파이프라인 시크릿 감지의 동작을 커스터마이징할 수 있습니다. 파이프라인 시크릿 감지 룰셋의 커스터마이징은 엄격한 스키마를 따라야 합니다. 최상위 섹션에는 TOML 테이블로 정의된 하나 이상의 구성 섹션이 포함됩니다.

다양한 종류의 룰셋 커스터마이징을 사용하여 파이프라인 시크릿 감지의 동작을 커스터마이징할 수 있습니다.

스키마#

파이프라인 시크릿 감지 룰셋의 커스터마이징은 엄격한 스키마를 따라야 합니다. 다음 섹션에서는 사용 가능한 각 옵션과 해당 섹션에 적용되는 스키마를 설명합니다.

최상위 섹션#

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

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

구성 예시:

[secrets]
...

[secrets] 구성 섹션#

[secrets] 섹션에서 분석기의 동작을 커스터마이징할 수 있습니다. 유효한 속성은 만드는 구성의 종류에 따라 다릅니다.

설정 적용 대상 설명
[[secrets.ruleset]] 사전 정의된 규칙 기존 규칙에 대한 수정을 정의합니다.
interpolate 모두 true로 설정하면 구성에서 $VAR를 사용하여 환경 변수를 평가할 수 있습니다. 시크릿이나 토큰이 유출되지 않도록 이 기능을 주의하여 사용하세요. (기본값: false)
description 패스스루 커스텀 룰셋의 설명.
targetdir 패스스루 최종 구성이 유지되어야 할 디렉토리. 비어 있으면 임의의 이름을 가진 디렉토리가 만들어집니다. 디렉토리는 최대 100MB의 파일을 포함할 수 있습니다.
validate 패스스루 true로 설정하면 각 패스스루의 내용이 검증됩니다. 검증은 yaml, xml, json, toml 콘텐츠에 작동합니다. 적절한 검증기는 [[secrets.passthrough]] 섹션의 target 매개변수에서 사용된 확장자를 기반으로 식별됩니다. (기본값: false)
timeout 패스스루 시간 초과 전에 패스스루 체인을 평가하는 데 소비할 최대 시간. 시간 초과는 300초를 초과할 수 없습니다. (기본값: 60)

interpolate#

Warning

시크릿 유출 위험을 줄이려면 이 기능을 주의하여 사용하세요.

아래 예시는 비공개 리포지터리에 접근하기 위해 $GITURL 환경 변수를 사용하는 구성을 보여줍니다. 변수는 사용자 이름과 토큰을 포함하므로(예: https://user:token@url) 구성 파일에 명시적으로 저장하지 않습니다.

[secrets]
  description = "My private remote ruleset"
  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 사전 정의된 규칙에서 사용하는 식별자 값.

type과 value의 올바른 값을 결정하려면 분석기가 생성한 gl-secret-detection-report.json을 봅니다. 이 파일은 분석기의 CI/CD 작업에서 작업 아티팩트로 다운로드할 수 있습니다.

예를 들어 아래 스니펫은 하나의 식별자가 있는 gitlab_personal_access_token 규칙에서 발견된 내용을 보여줍니다. JSON 객체의 type과 value 키는 이 섹션에서 제공해야 할 값에 해당합니다.

...
  "vulnerabilities": [
    {
      "id": "fccb407005c0fb58ad6cfcae01bea86093953ed1ae9f9623ecc3e4117675c91a",
      "category": "secret_detection",
      "name": "GitLab personal access token",
      "description": "GitLab personal access token has been found in commit 5c124166",
      ...
      "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
Note

message는 여전히 분석기에 의해 채워지지만 사용 중단되어 name과 description으로 대체되었습니다.

구성 예시:

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

커스텀 규칙 형식#

히스토리

커스텀 규칙을 만들 때 Gitleaks의 표준 규칙 형식과 추가 GitLab 전용 필드를 모두 사용할 수 있습니다. 각 규칙에 사용할 수 있는 설정은 다음과 같습니다:

설정 필수 여부 설명
title 아니요 규칙의 커스텀 제목을 설정하는 GitLab 전용 필드.
description 예 규칙이 감지하는 내용에 대한 자세한 설명.
remediation 아니요 규칙이 트리거될 때 수정 지침을 제공하는 GitLab 전용 필드.
regex 예 시크릿을 감지하는 데 사용되는 정규 표현식 패턴.
keywords 아니요 정규 표현식을 적용하기 전에 콘텐츠를 사전 필터링하기 위한 키워드 목록.
id 예 규칙의 고유 식별자.

모든 사용 가능한 필드를 포함하는 커스텀 규칙 예시:

[[rules]]
  title = "API Key Detection Rule"
  description = "Detects potential API keys in the codebase"
  remediation = "Rotate the exposed API key and store it in a secure credential manager"
  id = "custom_api_key"
  keywords = ["apikey", "api_key"]
  regex = '''api[_-]key[_-][a-zA-Z0-9]{16,}'''

확장 룰셋의 규칙과 동일한 ID를 공유하는 커스텀 규칙을 만들면 커스텀 규칙이 우선합니다. 커스텀 규칙의 모든 속성이 확장 규칙의 해당 값을 대체합니다.

커스텀 규칙으로 기본 규칙을 확장하는 예시:

title = "Extension of GitLab's default Gitleaks config"

[extend]
  path = "/gitleaks.toml"

[[rules]]
  title = "Custom API Key Rule"
  description = "Detects custom API key format"
  remediation = "Rotate the exposed API key"
  id = "custom_api_123"
  keywords = ["testing"]
  regex = '''testing-key-[1-9]{3}'''

[[secrets.passthrough]] 섹션#

[[secrets.passthrough]] 섹션에서 분석기에 대한 커스텀 구성을 합성할 수 있습니다.

분석기당 최대 20개의 이 섹션을 정의할 수 있습니다. 패스스루는 그런 다음 분석기의 사전 정의된 규칙을 대체하거나 확장하는 데 사용할 수 있는 완전한 구성으로 평가되는 패스스루 체인으로 구성됩니다.

패스스루는 순서대로 평가됩니다. 체인의 뒤에 나열된 패스스루는 우선 순위가 높으며 이전 패스스루에서 생성된 데이터를 덮어쓰거나 추가할 수 있습니다(mode에 따라 다름). 기존 구성을 사용하거나 수정해야 할 때 패스스루를 사용합니다.

단일 패스스루에서 생성된 구성의 크기는 10MB로 제한됩니다.

설정 적용 대상 설명
type 모두 file, raw, git, url 중 하나.
target 모두 패스스루 평가로 작성된 데이터를 포함할 대상 파일. 비어 있으면 임의의 파일 이름이 사용됩니다.
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 모두 패스스루 평가 후 대상 파일에 대해 검증기(xml, yaml, json, toml)를 명시적으로 호출하는 데 사용됩니다.

패스스루 유형#

유형 설명
file 동일한 Git 리포지터리에 저장된 파일을 사용합니다.
raw 룰셋 구성을 인라인으로 제공합니다.
git 원격 Git 리포지터리에서 구성을 가져옵니다.
url HTTP를 사용하여 구성을 가져옵니다.