AI API 키 유출 후 30분 대응 체크리스트: 삭제보다 먼저 할 일
AI API 키가 GitHub, 로그, 채팅, 문서에 보였다면, 먼저 해당 키를 더 이상 쓰지 못하게 막으면 됩니다. 삭제 커밋은 그다음이고, 키 폐기 또는 비활성화, 새 키 배포, 사용량·비용 로그 확인까지 30분 안에 묶어 보세요.
핵심 요약
- API 키 유출 대응은 “삭제”보다 “권한 차단과 재발급” 순서가 먼저.
- 30분 안에는 노출 위치 확인, 키 폐기, 새 키 발급, 로그 점검, 비용 한도 확인까지 묶어 보기.
- 같은 사고가 반복된다면 GitHub Secret Scanning, push protection, 로그 마스킹, 키 분리 정책을 바로 적용할 상황.
0~5분: 노출된 키를 더 이상 쓰지 못하게 막기
키가 보인 위치를 찾느라 시간을 모두 쓰면 실제 호출은 계속 열려 있을 수 있어요. 첫 5분에는 “어디에 노출됐는지”와 “어떤 키인지”만 빠르게 확인하고, 제공자 콘솔에서 폐기 또는 비활성화부터 처리하는 편이 안전합니다.
아래 표는 사고 티켓에 남길 최소 기록입니다. 키 원문은 적지 말고, 위치와 조치 시각만 남기세요.
| 확인 항목 | 해야 할 일 | 남길 기록 |
|---|---|---|
| 노출 위치 | 저장소, 로그, 문서, 채팅 링크를 적어둠 | URL 또는 파일 경로 |
| 키 종류 | OpenAI, Anthropic, 결제 API, 클라우드 키 등 서비스를 구분함 | 서비스명과 권한 범위 |
| 즉시 조치 | 키 폐기 또는 비활성화 후 새 키를 만듦 | 폐기 시각, 새 키 적용 위치 |
5~15분: 새 키를 넣되, 같은 실수를 반복하지 않게 배치하기
새 키를 만들 때 기존과 같은 이름으로 아무 데나 붙여 넣으면 같은 사고가 다시 납니다. 로컬 개발, 서버 배포, 크론, 워커가 모두 같은 키를 쓰고 있었다면 사고 범위도 넓어집니다. 최소한 운영 키와 개발 키를 나누고, 운영 키는 서버 환경변수나 비밀 저장소에서만 읽게 묶어두세요.
- 로컬
.env는 gitignore 상태까지 확인. - CI/CD에는 repository secret이나 environment secret으로 입력.
- 로그에는 키 원문 대신 앞뒤 일부만 마스킹한 식별자만 남기기.
- 가능하면 프로젝트별, 환경별, 권한별로 키를 분리.
15~30분: 이미 악용됐는지 확인하기
키를 바꿨다고 대응이 끝난 것은 아닙니다. 노출된 시각 이후 호출량, 실패 로그, 비용 증가, 비정상 IP, 평소와 다른 모델·엔드포인트 사용 흔적까지 이어서 봐야 악용 여부가 보입니다.
| 로그 | 보는 이유 | 판단 기준 |
|---|---|---|
| API 사용량 | 비정상 호출 여부 | 평소 대비 급증, 낯선 시간대 호출 |
| 결제/한도 | 금전 피해 여부 | 예상 밖 비용 또는 한도 소진 |
| 애플리케이션 로그 | 실서비스 장애 여부 | 키 교체 후 401, 403, timeout |
재발 방지 체크리스트
응급 조치가 끝났다면 같은 경로로 다시 새지 않게 저장소, 로그, 비용 알림을 바로 점검합니다. 아래 항목은 사고 당일에 최소한으로 확인할 재발 방지 목록입니다.
- GitHub Secret Scanning과 push protection 켜기.
- 로그 마스킹 규칙에
sk-,api_key,Authorization패턴 추가. - 키 발급·폐기 담당자와 기준 기록.
- 월 비용 한도와 알림 설정.
- 사용하지 않는 키 정기 폐기.
실전 예시: GitHub에 키가 올라간 걸 발견했다면
가장 위험한 선택은 커밋만 지우고 끝내는 방식입니다. 공개 저장소에 키가 노출됐다면 누가 복사했는지 알 수 없으므로 키 폐기, 새 키 발급, 사용량 확인, 로그 점검, 재노출 방지 순서로 처리해야 합니다.
- 즉시: 해당 API 키를 비활성화하거나 삭제하고 새 키 발급.
- 10분 안: 결제·사용량 대시보드에서 비정상 호출 여부 확인.
- 30분 안: 저장소 Secret Scanning, 환경변수 분리, 로그 마스킹 규칙까지 점검.
자주 묻는 질문
커밋에서 키를 지우면 안전한가요?
키 원문을 지워도 커밋 기록, 포크, 캐시, 알림에는 흔적이 남았다고 봐야 합니다. 삭제는 필요하지만, 먼저 해당 키를 폐기하고 새 키를 발급한 뒤 기록 정리를 이어가는 순서가 안전합니다.
노출됐지만 호출량이 늘지 않았다면 그냥 써도 되나요?
권장하지 않습니다. 노출 여부를 확인한 순간부터 그 키는 신뢰할 수 없는 키로 보고 교체하는 것이 안전합니다.
출처 및 참고자료
- GitHub Docs: About secret scanning
- GitHub Docs: About push protection
- OpenAI Platform Docs: API keys
기준일: 2026-06-02. 이 글은 일반적인 보안 운영 체크리스트이며 각 서비스의 최신 콘솔 정책을 함께 확인해야 합니다.
API 키 유출 대응 자주 묻는 질문
GitHub Secret Scanning을 켜면 유출 대응이 끝나나요?
끝나지 않습니다. Secret Scanning과 push protection은 노출 가능성을 빨리 발견하고 커밋 단계에서 막는 장치예요. 이미 노출된 키라면 서비스 콘솔에서 폐기·재발급하고, 로그와 비용 한도를 확인한 뒤 저장소 규칙과 환경변수 관리까지 같이 손보는 쪽이 안전합니다.
새 키를 만들 때 가장 먼저 나눌 기준은 무엇인가요?
운영, 개발, 테스트 환경을 먼저 분리하고 필요한 권한만 부여하는 게 좋습니다. 같은 키를 로컬, 서버, 자동 처리 도구에 함께 쓰면 사고 범위가 커집니다. 새 키 적용 뒤에는 예전 키가 실제로 호출되지 않는지 로그로 확인하는 단계까지 남겨두세요.
키를 교체한 뒤에도 저장소 기록을 지워야 하나요?
네, 공개 저장소라면 기록 정리와 접근 범위 점검을 함께 해야 합니다. 다만 기록 삭제만으로는 이미 복사된 키를 회수할 수 없으므로, 먼저 키를 폐기하고 새 키를 배포한 뒤 Secret Scanning 결과, 배포 로그, 비용 한도, 팀 공유 문서를 순서대로 확인하면 됩니다.
팀에 공유할 사고 기록 양식
확인일: 2026년 6월 15일. API 키가 한 번 노출되면 “삭제했다”는 말보다 새 키 배포와 비용 확인 기록이 먼저 필요합니다. 아래 항목을 한 문서에 남겨두면 다음 배포에서 같은 실수가 줄어듭니다.
| 기록 항목 | 예시 | 확인 이유 |
|---|---|---|
| 노출 위치 | 공개 저장소 커밋, 이슈 첨부파일, 로그 | 검색·캐시·포크까지 확인 범위를 정함 |
| 폐기한 키 | 키 이름, 마지막 사용 시간 | 옛 키가 더 이상 호출되지 않는지 대조함 |
| 새 키 권한 | 운영·개발·테스트 분리, 최소 권한 | 다음 사고의 피해 범위를 줄임 |
| 비용·호출량 | 평소 대비 증가 여부, 알림 한도 | 이미 악용됐는지 빠르게 판단함 |
공개 저장소라면 GitHub 보안 알림과 공급사 대시보드를 함께 확인하는 편이 안전합니다. 키 폐기, 새 키 배포, 호출 로그 확인, 팀 공지 순서가 흔들리면 대응 시간이 길어집니다.
새 키를 만들 때 권한을 나누는 예시
새 API 키를 만들 때 예전 키와 같은 권한을 그대로 복사하면 사고 범위도 그대로 남습니다. 운영 서버용 키는 실제 서비스 호출에 필요한 모델과 프로젝트만 허용하고, 개발용 키는 낮은 한도와 별도 프로젝트로 분리하는 편이 좋습니다. 자동 처리 도구가 쓰는 키는 사람 계정의 개인 키와 나누어야 퇴사, 외주, 테스트 저장소 노출 때 끊어낼 지점이 분명해집니다.
팀 문서에는 “누가 만들었는지”, “어디에 배포됐는지”, “언제 폐기할지”를 적어 둡니다. 키 이름에 운영·개발·테스트 구분과 만든 날짜를 넣으면 로그에서 문제 키를 찾기 쉽습니다. 비용 알림은 새 키를 만든 직후 바로 설정하고 첫 24시간 호출량을 평소 배포량과 비교하면 됩니다.
