몇 분 만에 코드베이스 전체의 보안 스캐너 검사 완료 (새 탭에서 열림)
GitLab 19.0의 보안 구성 프로필은 프로젝트별 .gitlab-ci.yml 수정 없이 조직 전체에 보안 스캐너를 중앙에서 적용할 수 있게 한다. 이를 통해 SAST, 의존성 스캐닝, 비밀 탐지를 수백~수천 개 프로젝트에 몇 분 안에 배포하고, AI로 빨라진 개발 속도에 따른 보안 적용 누락을 줄일 수 있다. GitLab Ultimate 사용자는 보안 인벤토리에서 여러 프로젝트에 기본 프로필을 일괄 적용해 일관된 보안 검사 범위를 확보할 수 있다.
수동 스캐너 설정의 한계
- 프로젝트마다
.gitlab-ci.yml을 직접 수정하는 방식은 규모가 작을 때만 관리하기 쉽다. - 조직과 저장소가 늘어나면 다음과 같은 설정 드리프트가 발생한다.
- 팀마다 서로 다른 SAST 규칙을 사용한다.
- 새 프로젝트에는 의존성 스캐닝을 추가하지만 기존 프로젝트에는 적용하지 않는다.
- 파이프라인 수정 과정에서 실수로 보안 스캐너 설정이 삭제된다.
- 중앙 현황판이 없으면 어떤 프로젝트가 검사 중인지, 어떤 프로젝트가 누락됐는지 파악하기 어렵다.
- AI를 활용한 코드 생성과 빠른 배포로 프로젝트·파이프라인 수가 증가하면서 보안 적용 범위의 격차가 더 커지고 있다.
보안 구성 프로필의 개념
- 보안 구성 프로필은 스캐너의 종류와 실행 조건을 중앙에서 정의하는 설정 묶음이다.
- 그룹 수준에서 프로필을 한 번 설정한 뒤 여러 프로젝트에 일괄 적용할 수 있다.
- 프로젝트별 YAML 파일에 SAST, 비밀 탐지, 의존성 스캐닝을 각각 추가할 필요가 없다.
- GitLab은 권장 설정을 반영한 스캐너별 기본 프로필을 제공한다.
- 따라서 YAML을 직접 작성하지 않고도 몇 분 안에 조직 전체의 스캐닝을 시작할 수 있다.
스캔 트리거와 보안 범위
기본 프로필은 스캐너별로 여러 실행 트리거를 활성화한다.
머지 리퀘스트 파이프라인
- 열린 머지 리퀘스트 브랜치에 새 커밋이 푸시될 때 자동 실행된다.
- 해당 머지 리퀘스트에서 새로 유입된 취약점에 초점을 맞춘 결과를 제공한다.
- 기존 취약점으로 인한 불필요한 경고를 줄이고 개발자가 수정해야 할 문제를 명확히 한다.
기본 브랜치 파이프라인
- 변경 사항이 기본 브랜치에 병합되거나 직접 푸시될 때 실행된다.
- 보안 팀이 기본 브랜치의 전체적인 보안 상태를 지속적으로 확인할 수 있다.
비밀 탐지의 푸시 보호
- 비밀 탐지는 위 두 트리거에 더해 푸시 보호를 제공한다.
- 파이프라인 완료를 기다리지 않고
git push과정에서 API 키나 토큰 등을 실시간으로 검사한다. - 비밀이 저장소에 들어가기 전에 푸시를 차단한다.
- 이벤트 기반 기능이므로 보안 인벤토리에 일반적인 스캔 날짜가 표시되지 않는다.
실제 활용 사례
대규모 프로젝트의 검사 범위 표준화
- 보안 팀은 보안 인벤토리에서 모든 프로젝트의 스캐너 적용 여부와 실패 상태를 한눈에 확인할 수 있다.
- 여러 프로젝트를 선택한 뒤 기본 프로필을 일괄 적용할 수 있다.
- 개별
.gitlab-ci.yml을 수정하지 않고도 머지 리퀘스트와 기본 브랜치에서 SAST, 비밀 탐지, 의존성 스캐닝을 실행할 수 있다.
코드 취약점의 조기 발견
- 개발자가 API 구현 중 안전하지 않은 역직렬화 패턴을 추가하면 SAST가 머지 리퀘스트 파이프라인에서 이를 탐지한다.
- 코드가 승인·배포되기 전에 수정할 수 있어 사고 대응보다 훨씬 적은 비용으로 문제를 해결할 수 있다.
감염된 의존성 차단
- 잠금 파일에서 의존성 버전을 업데이트하면 의존성 스캐닝이 변경된 패키지를 검사한다.
- 악성 코드가 포함된 패키지 버전을 병합 전에 탐지해 빌드 서버나 운영 환경에 확산되는 것을 막는다.
비밀 정보의 저장소 유입 방지
- 개발자가 디버깅 중 API 키를 커밋하려 하면 푸시 보호가 실시간으로 푸시를 차단한다.
- 보안 티켓 생성이나 사후 자격 증명 교체가 필요해지기 전에 문제를 해결할 수 있다.
적용 방법과 상태 확인
- 보안 구성 프로필은 GitLab Ultimate의 GitLab.com, Self-Managed, Dedicated 환경에서 사용할 수 있다.
- 적용 절차:
- 그룹에서 Secure > Security inventory로 이동한다.
- 적용할 프로젝트를 선택하거나 전체 프로젝트를 선택한다.
- Bulk Action > Manage security scanners를 선택한다.
- Apply default profile to all을 선택한다.
- 적용 후 Tool Coverage 열에서 상태를 확인할 수 있다.
- 녹색 막대: 스캐너가 완전히 활성화됨
- 부분 막대: 일부 트리거만 활성화됨
- 회색 막대: 아직 설정되지 않음
- 기존
.gitlab-ci.yml설정과 프로필 기반 설정은 함께 사용할 수 있다. - 두 설정이 병존하는 전환 기간에는 보안 인벤토리의 상태 표시가 실제 결합 상태를 정확히 반영하지 않을 수 있으므로, 개별 프로젝트의 Security Configuration 페이지에서 프로필 상태를 확인하는 것이 권장된다.
조직 규모가 크거나 프로젝트 생성 속도가 빠르다면, 프로젝트별 YAML 관리보다 보안 구성 프로필을 기본값으로 적용하는 편이 효율적이다. 우선 보안 인벤토리에서 적용 누락 프로젝트를 확인한 뒤 기본 프로필을 일괄 적용하고, 이후 부분 적용·실패 상태를 정기적으로 점검하는 방식이 실용적이다.