몇 분 만에 코드베이스 전체의 보안 스캐너 검사 완료 (새 탭에서 열림)
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 환경에서 사용할 수 있다. - 적용 절차: 1. 그룹에서 **Secure > Security inventory**로 이동한다. 2. 적용할 프로젝트를 선택하거나 전체 프로젝트를 선택한다. 3. **Bulk Action > Manage security scanners**를 선택한다. 4. **Apply default profile to all**을 선택한다. - 적용 후 **Tool Coverage** 열에서 상태를 확인할 수 있다. - 녹색 막대: 스캐너가 완전히 활성화됨 - 부분 막대: 일부 트리거만 활성화됨 - 회색 막대: 아직 설정되지 않음 - 기존 `.gitlab-ci.yml` 설정과 프로필 기반 설정은 함께 사용할 수 있다. - 두 설정이 병존하는 전환 기간에는 보안 인벤토리의 상태 표시가 실제 결합 상태를 정확히 반영하지 않을 수 있으므로, 개별 프로젝트의 **Security Configuration** 페이지에서 프로필 상태를 확인하는 것이 권장된다. 조직 규모가 크거나 프로젝트 생성 속도가 빠르다면, 프로젝트별 YAML 관리보다 보안 구성 프로필을 기본값으로 적용하는 편이 효율적이다. 우선 보안 인벤토리에서 적용 누락 프로젝트를 확인한 뒤 기본 프로필을 일괄 적용하고, 이후 부분 적용·실패 상태를 정기적으로 점검하는 방식이 실용적이다.