커스텀 룰셋 스키마
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#
시크릿 유출 위험을 줄이려면 이 기능을 주의하여 사용하세요.
아래 예시는 비공개 리포지터리에 접근하기 위해 $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 |
message는 여전히 분석기에 의해 채워지지만 사용 중단되어 name과 description으로 대체되었습니다.
구성 예시:
[secrets]
[[secrets.ruleset]]
[secrets.ruleset.override]
severity = "Medium"
name = "systemd machine-id"
...
커스텀 규칙 형식#
히스토리
- GitLab 17.9에서 도입.
커스텀 규칙을 만들 때 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를 사용하여 구성을 가져옵니다. |
