보안 구성 프로필 관리
GitLab v19.2Offering: 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라는 기능 플래그와 함께 도입됨. 기본적으로 활성화됨.
보안 구성 프로필은 프로젝트 전반에서 보안 스캐너가 실행되는 방법과 시기를 정의하는 중앙화된 설정입니다. 보안 구성 프로필을 사용하여 조직 전반의 보안 스캐너를 효율적으로 관리합니다. 프로필 기반 접근 방식은 최소한의 수동 설정으로 모범 사례를 적용합니다.
개요는 보안 구성 프로필 소개를 참조하세요.
프로필을 그룹에 적용하면 해당 그룹 내의 각 개별 프로젝트에 적용됩니다. 프로필은 그룹 자체에 연결되지 않으며 프로필이나 하위 그룹 간에 상속이 없습니다.
기본 프로필을 사용하면 최소한의 구성으로 몇 분 안에 사전 구성된 보안 스캐닝을 활성화할 수 있습니다.
보안 스캐너 구성#
프로필을 평가하고 관리하려면 그룹의 보안 인벤토리를 중앙 대시보드로 사용합니다.
테스트 커버리지 검토#
SAST, 종속성 스캐닝, 시크릿 탐지 등 그룹의 스캐너에 대한 높은 수준의 상태(Enabled, Not Enabled 또는 Failed)를 보려면:
-
상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
-
왼쪽 사이드바에서 Secure > Security inventory를 선택합니다.
-
보안 인벤토리에서 Test Coverage 열을 검토합니다.
개별 프로젝트 커버리지 변경#
특정 프로젝트를 구성하려면:
-
상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
-
왼쪽 사이드바에서 Secure > Security inventory를 선택합니다.
-
프로젝트 옆의 세로 줄임표( ellipsis_v )를 선택하고 Manage tool coverage를 선택합니다.
-
개별 스캐너를 켜거나 끕니다.
여러 프로젝트에 프로필 적용#
시간을 절약하려면 여러 프로젝트에 한 번에 보안 설정을 적용할 수 있습니다:
-
상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
-
왼쪽 사이드바에서 Secure > Security inventory를 선택합니다.
-
설정을 적용할 여러 프로젝트 또는 전체 하위 그룹을 선택합니다.
-
Bulk Action 드롭다운을 선택하고 Manage security scanners를 선택합니다.
-
선택 항목 전체에서 보안 상태를 표준화하려면 Apply default profile to all을 선택합니다.
기본 프로필 {#default-profiles}#
GitLab은 최소한의 구성으로 보안 스캐닝을 활성화할 수 있도록 사전 구성된 스캐너 설정인 기본 프로필을 제공합니다.
시크릿 탐지 프로필#
시크릿 탐지 프로필을 적용하면 전체 개발 워크플로에서 시크릿에 대한 권장 기준 보호를 활성화합니다. 프로필은 다음 스캔 트리거를 활성화합니다:
-
Push protection: 모든 Git push 이벤트를 스캔하고 시크릿이 탐지된 push를 차단하여 시크릿이 코드베이스에 들어오는 것을 방지합니다.
-
Merge Request Pipelines: 열린 머지 리퀘스트가 있는 브랜치에 새 커밋이 push될 때마다 자동으로 스캔을 실행합니다. 결과는 머지 리퀘스트에서 도입된 새로운 취약점으로 범위가 지정됩니다. 대상: 모든 브랜치.
-
Branch Pipelines (default only): 변경 사항이 기본 브랜치에 머지되거나 push될 때 자동으로 실행되어 기본 브랜치의 시크릿 탐지 상태에 대한 전체적인 그림을 제공합니다. 대상: 모든 브랜치.
SAST 프로필#
SAST 프로필을 적용하면 권장 구성을 사용하여 프로젝트 전반에서 정적 애플리케이션 보안 테스팅을 활성화합니다. 프로필은 다음 스캔 트리거를 활성화합니다:
-
Merge Request Pipelines: 열린 머지 리퀘스트가 있는 브랜치에 새 커밋이 push될 때마다 자동으로 SAST 스캔을 실행합니다. 결과에는 머지 리퀘스트에서 도입된 새로운 취약점만 포함됩니다. 대상: 모든 브랜치.
-
Branch Pipelines (default only): 변경 사항이 기본 브랜치에 머지되거나 push될 때 자동으로 실행되어 기본 브랜치의 SAST 상태에 대한 전체적인 그림을 제공합니다. 대상: 기본 브랜치.
종속성 스캐닝 프로필#
종속성 스캐닝 프로필을 활성화하면 권장 구성을 사용하여 알려진 취약점에 대해 프로젝트의 종속성을 스캔합니다. 프로필은 다음 스캔 트리거를 활성화합니다:
-
Merge Request Pipelines: 열린 머지 리퀘스트가 있는 브랜치에 새 커밋이 push될 때마다 자동으로 종속성 스캔을 실행합니다. 결과에는 머지 리퀘스트에서 도입된 새로운 취약점만 포함됩니다. 대상: 모든 브랜치.
-
Branch Pipelines (default only): 변경 사항이 기본 브랜치에 머지되거나 push될 때 자동으로 실행되어 기본 브랜치의 종속성 취약점 상태에 대한 전체적인 그림을 제공합니다. 대상: 기본 브랜치.
종속성 스캐닝 자동 교정 프로필#
종속성 스캐닝 자동 교정 프로필을 활성화하면 GitLab이 취약한 종속성을 취약하지 않은 버전으로 올리는 머지 리퀘스트를 엽니다. 이 기능에 대한 자세한 내용은 종속성 스캐닝 자동 교정을 참조하세요.
사전 요건:
- 프로젝트의 루트 네임스페이스에 대해
security_remediation_profiles기능 플래그가 활성화되어 있어야 합니다. 이 플래그는 GitLab 19.2에서 기본적으로 활성화되어 있습니다.
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
프로필 세부 정보 보기#
시크릿 탐지 프로필에 대한 기술적 세부 정보를 보려면:
-
상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
-
왼쪽 사이드바에서 Secure > Security inventory를 선택합니다.
-
Secret Detection 프로필을 선택합니다.
-
다음 정보를 검토합니다:
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 역할이 필요합니다.
보안 구성 프로필을 적용하려면:
- 그룹에 사용 가능한 프로필과 해당 ID를 가져옵니다:
query {
group(fullPath: "my-group") {
availableSecurityScanProfiles {
id
name
scanType
}
}
}
아직 저장되지 않은 기본 프로필은 해당 스캔 유형을 기반으로 하는 가상 ID를 반환합니다.
예: gid://gitlab/Security::ScanProfile/dependency_scanning_post_processing.
자세한 내용은
Group.availableSecurityScanProfiles 필드를 참조하세요.
securityScanProfileAttach뮤테이션을 사용하여, 원하는 프로필의 가상 ID 또는 실제 ID로 프로필을 적용합니다:
mutation {
securityScanProfileAttach(input: {
securityScanProfileId: "gid://gitlab/Security::ScanProfile/dependency_scanning_post_processing",
projectIds: ["gid://gitlab/Project/123"]
}) {
errors
}
}
자세한 내용은
securityScanProfileAttach 뮤테이션을 참조하세요.
- 프로필이 적용될 위치를 선택하려면 다음 인수 중 하나 또는 둘 다를 설정합니다:
projectIds: 프로필을 특정 프로젝트에 적용합니다.
groupIds: 프로필을 하나 이상의 그룹에 있는 모든 프로젝트에 적용합니다.
지정된 모든 프로젝트와 그룹은 동일한 최상위 그룹에 속해야 합니다. 단일 뮤테이션은 프로젝트 ID와 그룹 ID를 합쳐 최대 100개의 ID를 허용합니다.
- 응답의
errors필드를 확인하여 프로필이 적용되었는지 확인합니다.
커버리지 상태 표시기#
시스템은 인벤토리에서 시각적 신호를 사용하여 프로젝트가 보호되고 있는지 나타냅니다:
-
초록색 실선 바: 스캐너가 완전히 활성화되어 있고 동작 중입니다.
-
회색/빈 바: 스캐너가 아직 구성되거나 활성화되지 않았습니다.
-
부분 바: 일부 보호가 활성화되어 있습니다(예: 프로필에서 사용 가능한 일부 트리거는 활성화되어 있지만 다른 트리거는 활성화되어 있지 않습니다).
-
툴팁: 커버리지 바 위에 마우스를 올리면 파이프라인 기반 스캔의 마지막 스캔 날짜와 특정 파이프라인 상태를 볼 수 있습니다.
파이프라인 기반 스캔과 달리 push 보호는 push 프로세스 중에 실시간으로 실행되기 때문에 마지막 스캔 날짜가 없습니다.
문제 해결#
보안 구성 프로필로 작업할 때 다음 문제가 발생할 수 있습니다.
push 보호에 마지막 스캔 날짜가 나타나지 않음#
push 보호는 일정 기반이 아닌 이벤트 기반입니다. git push 프로세스 중에 실시간으로 시크릿을 가로챕니다. push 명령 시점에 활성화되기 때문에 파이프라인 기반 스캐너에서 예상하는 것과 같은 마지막 스캔 날짜가 없습니다.
스캐너 상태가 대시보드에서는 활성이지만 인벤토리 툴팁에서 활성화되지 않음#
이는 프로젝트가 새 프로필이 할당되어 있으면서 레거시 설정을 사용할 때 발생할 수 있습니다.
이 문제를 해결하려면:
-
현재 프로필 상태에 대한 가장 정확한 정보를 위해 Security Configuration 페이지를 확인합니다.
-
필요한 경우
.gitlab-ci.yml파일에서 레거시 스캐너 구성을 제거하여 프로필 기반 구성에만 의존합니다.
인벤토리 툴팁은 레거시 설정과 프로필 기반 설정의 결합된 상태를 반영하도록 개선 중입니다.
레거시 구성과 프로필 기반 구성의 차이#
레거시 스캐너 구성에서 프로필 기반 구성으로 마이그레이션하는 경우 다음 차이점에 유의하세요:
-
레거시 구성: 스캐너를 활성화하려면 YAML 파일이나 개별 프로젝트 설정을 수동으로 편집해야 합니다.
-
프로필 기반 구성: 코드를 수정하지 않고도 여러 프로젝트에 한 번에 기본 프로필을 적용할 수 있는 중앙화된 시스템을 사용합니다.
프로필 기반 구성은 더 쉬운 관리와 프로젝트 전반의 일관성을 위해 권장됩니다.