안녕하세요. 인포그랩에서 Solution Architect(SA)이자 DevOps 엔지니어로 일하는 Steve입니다. 저는 인포그랩에 입사하기 전 GitLab에서 4년 동안 SA로 일했는데요. 그때 가장 많이 들었던 질문이 “GitLab과 GitHub은 뭐가 다른가요?”, “GitHub 데이터를 GitLab으로 마이그레이션 하는 절차나 이슈는 뭐가 있을까요?” 였습니다.
GitLab과 GitHub은 보안, 클라우드 전략, 도입 편의성 등 여러 측면에서 차이점이 많은데요. 그중에서도 핵심 차이점은 보안 기능의 지원 범위와 다양성입니다. GitLab은 플랫폼 전체에 보안이 통합됐고, 다채로운 보안 기능을 기본으로 제공하죠. GitHub도 좋은 보안 기능을 지원하지만 주요 보안 검사 기능이 GitLab만큼 많지 않습니다. GitLab의 동적 애플리케이션 보안 테스트(DAST), 컨테이너 스캐닝, Fuzz 테스트 같은 보안 점검 기능은 GitHub에는 없죠.
GitLab은 이러한 단독 보안 기능뿐만 아니라 GitHub Advanced Security의 고급 보안 기능도 지원하는데요. GitHub에서 GitLab으로 마이그레이션 하면 이러한 기능을 두루 누릴 수 있습니다. 이 글에서는 GitLab 최고 등급 라이선스인 Ultimate에서 지원하는 GitLab 고급 보안 기능을 알아보고요. GitHub Advanced Security의 고급 보안 기능을 GitLab Ultimate에서 사용하는 방법도 소개하겠습니다.
GitLab Ultimate의 고급 보안 기능
GitLab Ultimate는 GitLab의 최고 등급 라이선스입니다. 이는 기업이 소프트웨어를 빠르고 안전하게 개발, 배포하는 데 도움이 되는 고급 보안 기능을 다수 제공하죠. 정적 애플리케이션 보안 테스트(SAST), 시크릿(Secret) 스캐닝, 의존성 스캐닝 기능이 그 예고요. 컨텍스트 기반 취약점 정보와 해결 방법도 알려줍니다. 의존성 목록과 소프트웨어 자재 명세서(SBOM), 보안 메트릭, 인사이트도 지원하고요.
위 기능은 GitHub Enterprise의 애드온 서비스인 GitHub Advanced Security에서도 지원해 GitLab만의 장점은 아닐 수 있는데요. 이와 별개로 GitLab Ultimate는 GitHub Advanced Security에서 누리기 어려운 독보적인 고급 보안 기능도 많이 지원합니다. 주요 내용은 아래와 같은데요.
- DAST, 컨테이너 스캐닝, Web API Fuzz 테스트 등 추가 코드 스캐너를 제공합니다. 이러한 스캐너는 최적화된 독점 기술과 오픈 소스 기술, 맞춤형 룰셋을 적용해 사용하죠.
- 안전하지 않은 코드가 승인 없이 merge 되지 않도록 세부 보안 가이드라인을 제공합니다.
- GitLab 보안 스캐너는 폐쇄망 또는 제한된 인터넷 연결 환경에서도 실행할 수 있습니다.
- 조직 전체 컴플라이언스 위반 사항을 감독하는 컴플라이언스 센터가 있습니다.
GitLab Ultimate의 고급 보안 기능은 보안 스캐너, 정책, 역할·권한 설정 등으로 구분할 수 있는데요. 항목별로 자세히 살펴보겠습니다.
보안 스캐너
GitLab Ultimate는 소프트웨어 개발 라이프사이클 전반에 걸쳐 아래와 같이 보안 스캐너를 제공합니다. 아울러 서드파티 스캐너와 맞춤형 스캐너를 GitLab에 통합할 수 있는데요. 통합한 뒤, 스캐너 결과는 GitLab 파이프라인 뷰, Merge Request(MR) 위젯, 보안 대시보드 등에 자동 표시돼 쉽게 확인할 수 있습니다.
스캐너 이름 | 스캔 항목 | 스캔 대상 언어/파일 |
---|---|---|
정적 애플리케이션 보안 테스트 (SAST) | 정적 소스 코드 | C/C++, Java, Python, Go, JavaScript, C# 등 |
동적 애플리케이션 보안 테스트 (DAST) | 실행 중인 웹 애플리케이션, 라이브 API | 언어 무관 |
코드형 인프라(IaC) 스캐닝 | IaC 파일 | Terraform, AWS CloudFormation, Ansible 등 |
컨테이너 스캐닝 | 정적, 실행 중인 컨테이너 이미지 | Dockerfile |
의존성 스캐닝, 라이선스 스캐닝 | 애플리케이션 의존성 | Requirements.txt, Yarn, Gradle, Npm 등 |
웹 API Fuzz 테스트 | 웹 API에 무작위/잘못된 데이터 전송 | OpenAPI, GraphQL, HAR, Postman Collection |
커버리지 기반 Fuzz 테스트 | 함수에 무작위/잘못된 데이터 전송 | C/C++, Go, Swift, Python, Rust, Java, JavaScript, AFL |
보안·컴플라이언스 정책
GitLab Ultimate에서는 정책으로 보안·컴플라 이언스 팀이 조직 전체에 보안 관련 통제를 시행하도록 할 수 있습니다. 이로써 개발팀 파이프라인에서 적절한 구성으로 보안 스캐너를 강제 적용할 수 있고요. 모든 스캔 작업이 변경 없이 실행되도록 할 수 있죠. 또 모든 MR에 여러 승인자를 중앙에서 강제할 수 있고요. 조직의 요구 사항 범위 안에서 프로젝트의 다양한 설정(예: MR, 리포지터리 설정 활성화 또는 잠금)이 활성화되도록 할 수 있습니다.
GitLab 보안·컴플라이언스 정책 선택 화면. 출처=GitLab맞춤형 역할, 세부 권한 설정
GitLab Ultimate는 Custom Roles로 조직 필요에 맞는 권한, 권한이 있는 사용자 역할을 생성하도록 지원합니다. 예를 들면, 시스템의 보안 취약점을 보는 권한은 있지만 소스 코드를 볼 수 없고, 리포지터리 안에서 아무 변경도 할 수 없는 "보안 감사자(Security Auditor)" 역할을 생성할 수 있죠. 이렇게 권한을 세부적으로 설정하면 업무를 명확하게 분리할 수 있습니다.