詳細検索

API 키와 토큰 유출을 방지하는 방법은? GitHub에서 CI/CD 시크릿 관리 연습

아바타
글쓴이 西田
4분 읽기

API 키와 토큰 유출을 방지하는 방법은? GitHub에서 CI/CD 시크릿 관리 연습
日本語에서 번역 • 원문 보기
西田
西田

안녕하세요, Colorkrew Security의 니시다입니다. 비밀(API 키, 비밀번호, 토큰 등) 유출은 끝이 없습니다.

"내 AWS 액세스 키를 GitHub에 밀어냈어"
"CI 환경 변수가 기록되었습니다"
"퇴직자가 사용한 API 키는 여전히 유효했습니다."

종종 '의도치 않은 실수'로 치부되지만, 본질은 다릅니다.
단순히 '누출을 막는다'고 해서 막을 수 없습니다. 누출이 발생할 것이라는 전제를 기반으로 한 메커니즘을 만드는 것이 중요합니다.

1. 비밀이 새는 4가지 방법

경로 (1): Git 저장소에 잘못된 커밋

이것이 가장 흔한 경로입니다.
대표적인 예로는 gitignore에 '.env' 파일을 추가하는 것을 잊거나, 하드코딩 등이 있습니다.

특히 무서운 점은 비밀이 커밋되면 삭제되더라도 git 기록에 남아 있다는 것입니다.

경로 (2): CI/CD 로그 출력

GitHub Actions, Jenkins 등과 함께 Secrets를 사용할 때, 명령어의 출력이 로그에 남아 있을 수 있습니다.

# 위험한 예시들
에코 "토큰으로 연결 중: $API_KEY" 
curl -H "승인: 베어러 $API_KEY" ... 

경로 (3): 컨테이너 이미지에 삽입

빌드 시점에 Secret을 Dockerfile에 전달하고 이미지에 있는 그대로 포함하는 경우입니다.

경로 (4): 슬랙 또는 문서에 붙여넣기

"서둘러 공유"하고 API 키를 Slack DM이나 Notion에 직접 붙여넣는 경우입니다.

2. 예방: 비밀이 "암호에 넣지 않는 방법"

Git 사전 커밋 훅으로 감지

커밋 전에 자동 스캔 도구를 도입하세요.

일반적인 도구:

  • git-secrets (AWS)
  • 탐지-비밀 (Yelp)
  • 트러플호그

# 탐지 비밀 설정 예시
PIP 설치 detect-secrets
.secrets.baseline> detect-secrets scan을
# .git/hooks/pre-commit에 추가하기

비밀 관리 도구 사용

코드에 비밀을 직접 쓰지 말고, 전용 관리 도구에서 얻도록 설계하세요.

일반적인 서비스:

  • AWS 시크릿 매니저
  • Azure Key Vault
  • 하시코프 금고
  • GCP 비밀 관리자

3. 탐지: 유출된 비밀을 신속히 발견하다

예방만으로는 충분하지 않습니다. 누출 시 조기 발견 메커니즘도 필요합니다.

GitHub의 비밀 스캔

GitHub에는 Secret Scanning이라는 기능이 있는데, 이는 푸시 코드에 포함된 비밀(AWS 키, GitHub PAT 등)을 자동으로 감지하고 통지합니다.

개인 저장소에서도 활성화하는 것을 권장합니다(GitHub 고급 보안 필요).

주기적 저장소 스캔

기존 코드베이스를 주기적으로 과거 비밀(Secret)을 스캔하세요.

# truffleHog가 전체 저장소를 스캔하다
트러플호그 녀석 https://github.com/your-org/your-repo.git

4. 회전: 누출 시 즉시 "비활성화"할 수 있는 시스템입니다

비밀 유출 시 가장 중요한 것은 발견 후 대응 속도입니다.

시스템 개발의 핵심 사항:

  • 모든 비밀(어떤 비밀이 어떤 시스템에서 사용되는지) 인벤토리를 관리합니다.
  • 사전에 순환 절차를 설정하세요
  • 정기적인 자동 순환 근무(예: 90일) 설정
  • 비상 비활성화 절차(수동 및 자동) 연습

5. CI/CD에서의 비밀 관리

GitHub Actions의 모범 사례:

야멜

# 좋은 예시: GitHub Secrets의 비밀
단계: 
  - 이름: 배치
    환경: 
      API_KEY: ${{ 비밀. API_KEY }}
    런: |
      # 로그에 출력하지 마세요
      deploy.sh

노트:

  • '에코'가 포함된 비밀 변수를 출력하지 마세요
  • 프로덕션 CI에서 디버그 모드(ACTIONS_STEP_DEBUG)를 활성화하지 마세요
  • 직업별로 비밀 범위를 최소화합니다.

6. 컬러크루 시큐리티의 접근 방식

Secrets 관리 시스템은 '도입 후 종료'가 아니라, 재고 유지보수, 정기적인 순환, 사고 발생 시 즉시 비활성화 등 지속적인 운영 설계가 필요합니다. 환경을 어떻게 관리해야 할지 모르거나 기존 저장소에 누수 위험이 있는지 확인하고 싶다면, 전문가의 설계 검토가 가장 신뢰할 수 있고 빠른 해결책입니다.

Colorkrew Security에서는 DevSecOps에 대한 설계 지원과 보안 검토, 그리고 비밀 관리 등을 제공합니다. 시작을 원하시면 언제든지 연락해 주세요.

Related Articles