wan의 개발일기
GitHub Security (Secrets, Dependabot) 본문
들어가며
보안 관련 설정은 프로젝트 초반에 제대로 잡아두지 않으면 나중에 문제가 생긴다.
GitHub에서 제공하는 Secrets 관리와 Dependabot을 정리해둔다.
GitHub Secrets
Secrets란?
API 키, 데이터베이스 비밀번호, 토큰 등 민감한 정보를 저장소 코드에 포함시키지 않고 안전하게 관리하는 기능이다.
절대 하면 안 되는 것:
- .env 파일을 저장소에 커밋
- 소스코드에 API 키 하드코딩
- 커밋 메시지에 비밀번호 포함
Secrets 종류
| 종류 | 범위 | 설정 위치 |
|---|---|---|
| Repository secrets | 특정 저장소에서만 사용 | 저장소 Settings |
| Environment secrets | 특정 배포 환경에서만 사용 | 저장소 Environments |
| Organization secrets | 조직 내 여러 저장소에서 공유 | 조직 Settings |
Secrets 등록
저장소 → Settings → Secrets and variables → Actions → New repository secret
Name: AWS_ACCESS_KEY_ID
Secret: AKIAIOSFODNN7EXAMPLE
Secrets 사용 (GitHub Actions)
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: 배포
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
DATABASE_URL: ${{ secrets.DATABASE_URL }}
run: ./deploy.sh
Secrets 보안 규칙
- Secrets는 로그에 자동으로 마스킹됨 (***로 표시)
- fork된 저장소의 PR에서는 Secrets에 접근 불가
- Secrets 값은 등록 후 다시 볼 수 없음 (덮어쓰기만 가능)
- 불필요한 Secrets는 주기적으로 삭제
.env 파일 관리
.gitignore에 반드시 추가
# .gitignore
.env
.env.local
.env.*.local
.env.production
.env.example 활용
실제 값 없이 필요한 환경 변수 목록만 저장소에 포함한다.
# .env.example (저장소에 포함)
DATABASE_URL=
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
JWT_SECRET=
실수로 커밋한 경우
# 1. .gitignore에 추가
echo ".env" >> .gitignore
# 2. 추적 해제
git rm --cached .env
# 3. 커밋
git commit -m "chore: .env 추적 제거"
# 4. 이미 push했다면 해당 API 키/비밀번호를 즉시 재발급
# git 이력에서 완전히 제거하려면 git filter-repo 사용
실수로 민감한 정보를 push했다면 이력에서 제거하는 것만으로는 부족하다. 해당 키와 비밀번호를 즉시 재발급해야 한다.
Dependabot
Dependabot이란?
의존성 패키지의 보안 취약점과 버전 업데이트를 자동으로 감지하고 PR을 생성해주는 GitHub 기능이다.
Dependabot 기능 두 가지
| 기능 | 설명 |
|---|---|
| Security updates | 보안 취약점이 있는 패키지 자동 업데이트 PR 생성 |
| Version updates | 최신 버전으로 업데이트 PR 자동 생성 |
Security updates 활성화
저장소 → Settings → Security → Dependabot alerts → Enable
저장소 → Settings → Security → Dependabot security updates → Enable
활성화하면 취약점 발견 시 자동으로 PR이 생성된다.
Version updates 설정
# .github/dependabot.yml
version: 2
updates:
# npm 패키지 업데이트
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly" # daily, weekly, monthly
open-pull-requests-limit: 10
reviewers:
- "팀원계정"
labels:
- "dependencies"
# GitHub Actions 업데이트
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
Dependabot PR 처리
자동 생성된 PR 확인 → 변경 내용 검토 → CI 통과 확인 → merge
충돌이 있거나 breaking change가 있으면 수동으로 처리
GitHub Security 탭 활용
저장소 → Security 탭
- Security advisories : 보안 취약점 비공개 보고
- Dependabot alerts : 취약한 의존성 목록
- Code scanning : 코드 내 보안 취약점 분석 (CodeQL)
- Secret scanning : 코드에 노출된 시크릿 감지
Secret scanning
실수로 API 키가 코드에 포함되면 GitHub이 자동으로 감지하고 알림을 보낸다.
저장소 → Settings → Security → Secret scanning → Enable
정리
| 항목 | 설명 |
|---|---|
| Repository secrets | 저장소 단위 민감 정보 저장 |
${{ secrets.NAME }} |
Actions에서 Secrets 참조 |
| .env.example | 환경 변수 목록만 저장소에 포함 |
| Dependabot alerts | 취약한 의존성 자동 감지 |
| dependabot.yml | 버전 업데이트 자동화 설정 |
| Secret scanning | 코드에 노출된 키 자동 감지 |
'Git, Github > Github 심화' 카테고리의 다른 글
| Submodule & Monorepo 개념 (0) | 2026.05.04 |
|---|---|
| Git Hooks 활용하기 (0) | 2026.05.03 |
| 오픈소스 기여하기 (fork, PR) (0) | 2026.05.03 |
| GitHub Pages로 정적 사이트 배포 (0) | 2026.05.03 |
| GitHub Issues & Projects로 일감 관리 (0) | 2026.05.03 |