키 유출 대응
API 키가 새었을 때 바로 할 일과 XenoCI가 자동으로 하는 일(공개 유출 자동 폐기, 사용량 급증 알림)을 설명합니다
API 키가 공개 저장소, 로그, 채팅에 노출되었다면 그 키로 누구나 조직 잔액으로 잡을 실행할 수 있습니다, 먼저 폐기하고 그 다음 새 키로 바꿉니다
바로 할 일
- 콘솔 API 키에서 새어 나간 키를 폐기합니다, 폐기는 즉시 적용됩니다
- 같은 워크스페이스에서 키 추가로 새 키를 발급합니다
- 새 키를 CI 시크릿, MCP 설정,
xenocast config set api-key에 넣습니다 - 분석 → 로그에서 그 키의 요청과 잡을 확인합니다, 출처(CLI, MCP, GitHub Actions, API)와 시각이 보입니다
- 모르는 잡이 실행 중이면 실행 → 잡에서 취소합니다, 취소 시점까지 시작된 분은 과금됩니다
- 분석 → 사용량을 API 키별로 묶어 그 키가 쓴 금액을 확인합니다
CLI로 확인하려면
XENOCI_API_KEY=xci_live_… xenocast usage --from 2026-10-01 --by api_key키 폐기로 이미 시작한 잡은 멈추지 않습니다, 잡은 따로 취소해야 합니다
XenoCI가 자동으로 하는 일
공개 유출 자동 폐기
GitHub 시크릿 스캐닝이 공개 저장소에서 xci_live_ 형식의 키를 찾아 XenoCI에 알리면 서버가 그 키를 즉시 폐기합니다
| 단계 | 내용 |
|---|---|
| 확인 | GitHub 서명(ECDSA P-256)을 검증하고 체크섬과 해시로 키를 찾습니다 |
| 폐기 | 살아 있는 키면 revoke_reason = leaked_public으로 폐기하고 감사 로그 api_key.revoke_leaked를 남깁니다(키 원문은 남기지 않음) |
| 알림 | 소유자, 관리자, 키를 만든 사람에게 어느 키가 어디서 언제 발견되었는지 메일을 보냅니다, 이 알림은 끌 수 없습니다 |
| 이후 요청 | 그 키로 오는 요청은 401 api_key_revoked_leaked입니다, 새 키를 발급하세요 |
참고 이 경로는 서버에 준비되어 있고 서버 설정(
XENOCI_RUNNER2_SECRET_SCANNING=1과 GitHub 공개 키)으로 켭니다, 기본은 꺼져 있습니다, 켜져 있지 않은 환경에서는 자동 폐기가 일어나지 않으니 위의 "바로 할 일"을 따르세요
사용량 급증 알림
살아 있는 키마다 10분 창으로 요청 수를 셉니다, 1,000건을 넘는 첫 요청에서 소유자, 관리자, 키를 만든 사람에게 메일이 가고 같은 키는 24시간 안에 다시 보내지 않습니다, 메일에는 마지막 요청의 IP가 들어 있습니다, 요청을 막지는 않습니다
예방
- 키를 저장소에 넣지 마세요, 저장소에는
XENOCI_API_KEY환경 변수 이름만 두고 값은 시크릿으로 넘깁니다 - CLI 출력과 MCP 응답은
xci_live_문자열을 가립니다, 그래도 로그를 공개 채널에 붙여 넣기 전에 확인하세요 - 포크 PR 워크플로에 시크릿을 넘기지 마세요,
pull_request_target에서 PR 코드를 체크아웃하고 키를 넘기면 포크의 코드가 키와 함께 실행됩니다 - 키에 만료(30일, 90일, 1년)를 두고 주기적으로 바꾸세요
다음 단계
- API 키 관리와 폐기
- 보안 서버가 비밀을 다루는 방식
- GitHub 시크릿 스캐닝 수신 엔드포인트 상세