wan의 개발일기

GitHub Security (Secrets, Dependabot) 본문

Git, Github/Github 심화

GitHub Security (Secrets, Dependabot)

wan_ 2026. 5. 4. 23:25

들어가며

보안 관련 설정은 프로젝트 초반에 제대로 잡아두지 않으면 나중에 문제가 생긴다.
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