GitHub에는 수많은 보안 관련 설정이 있습니다.
몇몇 중요한 설정만 빠르게 해 두어도 최소한의 보안을 유지할 수 있습니다.
Public 저장소에서는 아래 기능 대부분을 무료로 사용할 수 있습니다. Private/Internal 저장소의 Code Scanning·Dependency Review는 GitHub Code Security, Secret Scanning·Push Protection은 GitHub Secret Protection이 필요할 수 있으므로 저장소와 조직의 플랜을 먼저 확인합니다.
SECURITY.md와 Private Vulnerability Reporting
SECURITY.md에는 지원하는 버전, 취약점 범위, 비공개 신고 방법, 대응 시 기대할 수 있는 내용을 적습니다. 공개 저장소라면 Private Vulnerability Reporting도 활성화해 제보자가 Public Issue 대신 비공개 Security Advisory로 신고할 수 있게 합니다.
Secret Scanning과 Push Protection
Secret Scanning은 Git history와 새 commit에서 알려진 credential 패턴을 탐지합니다. Push Protection은 지원하는 secret이 저장소에 도달하기 전에 push를 차단합니다. Public 저장소에서는 무료로 제공되며, 사용자 단위 Push Protection도 기본 활성화됩니다.
탐지하지 못하는 secret 형식도 있으므로 Gitleaks 같은 별도 scanner를 대체하지는 않습니다. Push Protection은 유입 전 차단, Gitleaks CI는 repository와 history에 들어온 secret 탐지라는 서로 다른 방어 단계로 사용합니다.
CodeQL
CodeQL은 GitHub에서 제공하는 코드 보안 분석 도구입니다.
SQL Injection, XSS 등 OWASP Top 10 취약점을 자동으로 탐지하고, 그에 대한 알림을 제공합니다.
GitHub Actions로 PR 생성 시 또는 주기적으로 실행할 수 있습니다.
Private 저장소에서는 유료 결제가 필요합니다. 저는 Public 저장소에서만 주 단위 또는 main 브랜치 관련 이벤트를 통해 트리거하여 실행하고 있습니다.
Dependabot
Dependabot은 프로젝트 의존성의 보안 취약점을 모니터링합니다.
취약점이 발견되면 알림을 보내고, 자동으로 업데이트 PR을 생성할 수도 있습니다.
자동 업데이트는 사용하지 않아도 취약점 확인과 주기적인 의존성 최신화를 위해 활성화하는 것이 좋습니다.
Dependency Review를 사용할 수 있다면 PR에서 새로 추가되거나 변경된 dependency와 알려진 취약점을 merge 전에 확인합니다.
Branch Protection Rules
main/master 또는 특정 브랜치를 보호할 수 있습니다.
PR 필수, 리뷰 승인 필수, 상태 체크 통과 필수 등의 규칙을 설정할 수 있습니다.
과도한 설정이 부담스럽다면 PR에 대한 최소한의 CI/Validation, main 브랜치 Delete/Force Push 방지 등의 규칙만 설정해도 효과적입니다.