본문으로 건너뛰기
NEW · Blast Radius: 유출된 API 키 대응 플레이북 (AWS·GCP·Azure)
블로그로 돌아가기

CI/CD 파이프라인에서 키가 남는 세 곳

키는 Git 기록, 빌드 출력, 게시 이미지에 남을 수 있습니다. 각 경계에 맞는 검사를 하고 실제 노출은 발급처에서 확인해야 합니다.

김동현
작성자
김동현
발행
수정
5 분385 어절
Share:
코드 기록, 빌드 실행 환경과 로그, 게시 GHCR 이미지의 서로 다른 자격증명 점검 범위

파이프라인은 소스 코드를 빌드와 게시 아티팩트로 옮깁니다. 자격증명은 그 과정의 어느 경계에나 복사될 수 있습니다. 한 가지 “상시 스캔”으로 모두 볼 수는 없습니다. 이 글의 이전 버전은 Cremit이 모든 커밋·빌드·환경 변수를 검사하고 배포 전 유출을 막는 것처럼 설명했습니다. 실제 확인 범위를 넘어선 표현이므로 검사를 나눠 정리했습니다.

1. 코드와 저장소 기록

한 번 커밋한 키는 최신 파일에서 지워도 Git 기록에 남을 수 있습니다. 저장소 검사기가 실제로 읽는 브랜치와 기록, 관련 PR과 공유 문서를 확인하세요. GitHub의 자체 시크릿 스캐닝은 기록과 협업 영역의 범위를 설명하지만, 사용 가능 기능과 검사 방식은 저장소 유형과 설정에 따라 달라집니다.

Gitleaks 같은 로컬·CI 검사기는 푸시 전에 파일이나 Git 변경을 검사하도록 구성할 수 있습니다. 제공자의 푸시 보호는 지원하는 패턴을 차단할 수 있습니다. 팀의 파이프라인에서 명령과 실행 시점을 정하고 무해한 테스트 문자열로 확인한 뒤 읽지 않은 경로·커밋을 기록하세요. Cremit의 연결 저장소 검사는 별도 소스 검사이며 모든 로컬 훅이나 CI 작업이 실행됐다는 뜻은 아닙니다.

2. 빌드 실행 환경과 로그

빌드가 의존성을 가져오거나 서비스에 접속하려면 토큰이 필요할 수 있습니다. Docker 빌드 인수나 일반 환경 변수로 넘기면 이미지에 남을 수 있으므로 Docker는 빌드 시크릿·SSH 마운트를 안내합니다. 명령 출력, 디버그 로그, 업로드한 로그에도 값이 찍히지 않는지 확인하세요.

저장소에서 키를 발견했다는 사실만으로 모든 CI 실행 환경을 조사한 것은 아닙니다. Cremit은 저장소 연결만으로 실행 중인 빌드 환경이나 모든 CI 로그를 검사하지 않습니다. 실행 시 자격증명 주입, 로그 마스킹, 로그 접근 권한과 CI 제공자의 권한 설정은 별도 통제로 다뤄야 합니다.

3. 게시된 컨테이너 이미지

이미지를 게시한 뒤에는 최신 파일에 키가 보이지 않아도 이미지 계층에 남을 수 있습니다. GitHub Packages 소스에는 연결한 지원 대상의 GHCR/OCI 컨테이너 이미지를 제한된 범위에서 검사하는 경로가 있습니다. 이미지를 실행하지 않고 계층을 가져와 내용을 읽습니다. 대상, 태그나 다이제스트, 플랫폼, 검사 상태와 제한을 확인하세요. 모든 레지스트리나 과거 이미지를 검사했다고 단정할 수는 없습니다.

키를 발견했다면

키 값을 티켓에 붙이지 말고 발견 위치를 기록하세요. 지원하는 유형은 발급처에서 아직 작동하는지 확인하고, 가능한 접근·활동 정보를 검토합니다. 담당자를 정해 발급처에서 키를 교체하거나 폐기하고 의존 서비스를 테스트한 뒤, 보존 규칙에 따라 코드·로그·아티팩트의 복사본을 정리합니다. 파일이나 이미지만 지워도 활성 키는 계속 작동할 수 있습니다.

Cremit의 범위

Cremit은 지원하는 연결 저장소·협업 소스·클라우드 스토리지·GitHub Packages 이미지에서 자격증명 패턴을 찾습니다. 발급처 유효성 확인과 AWS·GCP 권한 정보는 지원하는 유형과 연동에 한합니다. 빌드 실행 환경의 메모리, 모든 CI 로그, 임의의 로컬 이미지, 일반 취약점 검사와 푸시 전 자동 차단은 각각 별도 통제가 필요합니다.

공식 자료

GitHub 시크릿 스캐닝 범위

GitHub 푸시 보호

Gitleaks 명령과 CI 예제

Docker 빌드 시크릿

GitHub Container registry

네트워크에 공유해보세요LinkedInX

이어서 읽기

다음 글을 메일로 받아보세요

Cremit의 월간 자격증명 보안 브리프. 한 통에 핵심만 담습니다.

이메일을 판매하거나 외부에 넘기지 않으며, 언제든 수신거부할 수 있습니다.