시크릿 스캔

시크릿 스캔 (Scan secrets)

Grafana에 커밋되거나 저장된 시크릿(비밀번호, API 키, 토큰 등)을 탐지해 보안 위험을 줄이는 방법을 설명해요. 시크릿은 로그, 구성 파일, 대시보드 JSON, 데이터 소스 설정 등에 실수로 노출될 수 있어요.

출처: 문서

본문

시크릿 노출의 일반적인 원인

  • 구성 파일(grafana.ini)에 클라이언트 시크릿·API 키를 평문으로 저장
  • 대시보드 JSON에 데이터 소스 자격 증명이나 토큰 포함
  • 소스 제어(Git)에 실수로 시크릿 커밋
  • 오류 로그에 시크릿이 평문으로 기록

시크릿 보호 모범 사례

Grafana에서 시크릿을 안전하게 다루는 기본 원칙:

  • 환경 변수 사용: 구성 파일 대신 환경 변수로 시크릿을 설정. 예: GF_SECURITY_ADMIN_PASSWORD, GF_AUTH_GITHUB_CLIENT_SECRET. Grafana는 환경 변수를 구성값보다 우선해요.
  • 시크릿 참조: Grafana 구성에서 ${VAR} 또는 참조 문법으로 외부 시크릿 매니저 값 참조.
  • 대시보드에 자격 증명 평문 금지: 데이터 소스 자격 증명을 대시보드 JSON에 넣지 말고, 프로비저닝된 데이터 소스의 secureJsonData를 사용.
  • 버전 관리에서 제외: 시크릿을 담은 파일을 .gitignore에 추가하고 커밋 전 스캔.
  • 로테이션: 유출이 의심되면 시크릿을 즉시 교체.

데이터 소스 시크릿

데이터 소스의 민감한 필드(비밀번호, API 키, 토큰)는 secureJsonData에 저장되며, 이 값은 Grafana 데이터베이스에 암호화되어 저장되고 API 응답에서 마스킹돼요. 암호화는 secret_key로 수행돼요.

프로비저닝에서 시크릿

프로비저닝 YAML에서는 secureJsonData를 사용하고, 가능하면 ${VAR} 참조나 환경 변수로 값을 주입해 시크릿이 파일에 평문으로 남지 않게 해요.

스캔 도구

  • Git 시크릿 스캐너: gitleaks, trufflehog 같은 도구로 저장소에서 시크릿을 스캔.
  • CI 통합: 커밋·푸시 시 시크릿 스캔을 CI 파이프라인에 통합해 유출을 조기에 차단.

시크릿 보호 설정

구성 파일의 [security] 섹션에서 관련 옵션:

[security]
# 데이터 소스 시크릿 암호화에 쓰는 키
secret_key = ...

# API 키 등

secret_key는 반드시 안전하게 관리하고, 배포 전에 변경해야 해요.

더 알아보기 (Learn more)