시크릿 감지
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
이 가이드는 전역 수준에서 시크릿 감지 정책을 구현하는 데 도움을 줍니다. 다음 단계로 사용자 정의 규칙셋을 설정할 수 있습니다: 이 사용자 정의 규칙셋은 GitLab 사전 빌드 규칙을 확장합니다. 사용자 정의 규칙셋은 .gitlab/secret-detection-ruleset.toml에 정의됩니다.
시작하기#
솔루션 컴포넌트 다운로드#
- 계정 팀에서 초대 코드를 받으세요.
- 초대 코드를 사용하여 솔루션 컴포넌트 웹스토어에서 솔루션 컴포넌트를 다운로드하세요.
사전 요구 사항#
- GitLab Ultimate 티어
- GitLab 인스턴스 또는 그룹에 대한 관리자 액세스
- 프로젝트에 시크릿 감지가 활성화되어 있어야 합니다
시크릿 감지 사용자 정의 규칙 구성#
이 가이드는 전역 수준에서 시크릿 감지 정책을 구현하는 데 도움을 줍니다. 이 솔루션은 기본 시크릿 감지 규칙을 확장하여 사회 보장 번호와 같은 PII 데이터 요소 및 평문 비밀번호 감지를 포함합니다. 규칙 확장은 원격 규칙셋으로 간주됩니다.
사용자 정의 규칙셋 구성#
다음 단계로 사용자 정의 규칙셋을 설정할 수 있습니다:
- 최상위 그룹
Secret Detection을 만드세요. - 다운로드한 컴포넌트에서 프로젝트
Secret Detection Custom Ruleset을 새로 만든Secret Detection그룹으로 복사하세요.
이 사용자 정의 규칙셋은 GitLab 사전 빌드 규칙을 확장합니다. 확장을 통해 다음을 포함한 시크릿을 감지하고 알림을 보낼 수 있습니다:
- PII 데이터 요소: 사회 보장 번호
- 평문 비밀번호
사용자 정의 규칙셋 파일#
사용자 정의 규칙셋은 .gitlab/secret-detection-ruleset.toml에 정의됩니다.
규칙은 regex를 사용하여 정의할 수 있습니다.
PII 데이터 요소 감지#
PII 데이터 요소 감지를 위한 확장 규칙:
[[rules]]
id = "ssn"
description = "Social Security Number"
regex = "[0-9]{3}-[0-9]{2}-[0-9]{4}"
tags = ["ssn", "social-security-number"]
keywords = ["ssn"]
평문 비밀번호#
평문 비밀번호에 대한 확장 규칙:
[[rules]]
id = "password-secret"
description = "Detect secrets starting with Password or PASSWORD"
regex = "(?i)Password[:=]\\s*['\"]?[^'\"]+['\"]?"
tags = ["password", "secret"]
keywords = ["password", "PASSWORD"]
정의된 사용자 정의 규칙셋 접근#
사용자 정의 규칙셋에 접근하려면 봇 사용자를 생성하는 그룹 액세스 토큰을 만들어야 합니다. 봇 사용자는 글로벌 정책을 통해 시크릿 감지를 실행하는 모든 프로젝트에서 사용자 정의 규칙셋을 인증하고 접근하는 데 사용할 수 있습니다.
액세스 및 인증을 설정하려면 다음 단계를 따르세요:
- 그룹 토큰 만들기:
Secret Detection그룹에서Settings메뉴 옵션 아래에 그룹 액세스 토큰Secret Detection Group Token을 만들고, 토큰에read_repository액세스가 있는reporter역할을 부여하세요.

- 그룹 변수 만들기: 토큰 값을 복사하고 안전하게 저장하세요.
Settings메뉴 옵션 아래에 키가SECRET_DETECTION_GROUP_TOKEN이고 값이 토큰 값인 그룹 변수를 추가하세요. - 그룹 토큰 봇 사용자 가져오기: 동일한 그룹에서
manage메뉴 옵션으로 이동하여member를 선택하고 그룹 액세스 토큰Secrete Detection Group Token에 해당하는 봇 사용자를 찾아@group_[group_id]_bot_[random_number]형식으로 그룹의 봇 사용자를 나타내는 값을 복사하세요.

구현 가이드#
이 가이드에서는 중앙화된 사용자 정의 규칙셋을 사용하여 모든 프로젝트에 대한 시크릿 감지를 실행하도록 정책을 구성하는 단계를 다룹니다.
시크릿 감지 정책 구성#
강제 적용되는 전역 정책으로 파이프라인에서 시크릿 감지를 자동으로 실행하려면 가장 높은 수준(이 경우 최상위 그룹)에서 정책을 설정하세요. 새 시크릿 감지 정책을 만들려면:
-
정책 만들기: 동일한 그룹
Secret Detection에서 해당 그룹의 Secure > Policies 페이지로 이동하세요. -
New policy를 선택하세요.
-
Scan execution policy를 선택하세요.
-
정책 구성: 정책 이름을
Secret Detection Policy로 지정하고 설명을 입력하고Secret Detection스캔을 선택하세요. -
"이 그룹의 모든 프로젝트" (선택적으로 예외 설정 가능)나 "특정 프로젝트" (드롭다운에서 프로젝트 선택)를 선택하여 Policy scope를 설정하세요.
-
Actions 섹션에서 시크릿 감지가 기본으로 표시됩니다.
-
Conditions 섹션에서 매 커밋이 아닌 일정에 따라 스캔을 실행하려면 "Triggers:"를 "Schedules:"로 선택적으로 변경할 수 있습니다.
-
사용자 정의 규칙셋에 대한 액세스 설정: 봇 사용자의 값, 그룹 변수, 사용자 정의 규칙셋 프로젝트 URL로 CI 변수를 추가하세요.
사용자 정의 규칙셋은 다른 프로젝트에 호스팅되어 원격 규칙셋으로 간주되므로
SECRET_DETECTION_RULESET_GIT_REFERENCE를 사용해야 합니다.variables: SECRET_DETECTION_RULESET_GIT_REFERENCE: "group_[group_id]_bot_[random_number]:$SECRET_DETECTION_GROUP_TOKEN@[custom ruleset project URL]" SECRET_DETECTION_HISTORIC_SCAN: "true"
UI 구성은 이 화면에서 확인할 수 있습니다:
이 CI 변수에 대한 자세한 정보는 이 문서의 세부 내용을 참조하세요.
- Create policy를 클릭하세요.
전체 정책 구성#
정책을 만든 후 참조용으로 전체 정책 구성은 다음과 같습니다:
---
scan_execution_policy:
- name: Scan execution for secret detection with custom rules
description: ''
enabled: true
policy_scope:
projects:
excluding: []
rules:
- type: pipeline
branches:
- "*"
actions:
- scan: secret_detection
variables:
SECRET_DETECTION_RULESET_GIT_REFERENCE: "@group_[group_id]_bot_[random_number]:$SECRET_DETECTION_GROUP_TOKEN@gitlab.com/example_group/secret-detection/secret-detection-custom-ruleset"
SECRET_DETECTION_HISTORIC_SCAN: 'true'
skip_ci:
allowed: true
allowlist:
users: []
approval_policy: []
작동 방식#
정책이 실행되면 전역 정책과 연결된 모든 프로젝트의 파이프라인에서 secret detect 작업이 secret_detection_0 작업으로 자동 실행됩니다.

시크릿이 감지되어 표시됩니다. 머지 요청이 있는 경우 새로 발견된 시크릿이 MR 위젯에 표시됩니다. 기본 브랜치가 병합된 경우 다음과 같이 보안 취약점 보고서에 표시됩니다:

다음은 평문 비밀번호의 예입니다:

문제 해결#
정책이 적용되지 않는 경우#
수정한 보안 정책 프로젝트가 그룹에 올바르게 연결되어 있는지 확인하세요. 자세한 내용은 보안 정책 프로젝트에 연결을 참조하세요.
