본문으로 건너뛰기

키 유출 대응

API 키가 새었을 때 바로 할 일과 XenoCI가 자동으로 하는 일(공개 유출 자동 폐기, 사용량 급증 알림)을 설명합니다

API 키가 공개 저장소, 로그, 채팅에 노출되었다면 그 키로 누구나 조직 잔액으로 잡을 실행할 수 있습니다, 먼저 폐기하고 그 다음 새 키로 바꿉니다

바로 할 일

  1. 콘솔 API 키에서 새어 나간 키를 폐기합니다, 폐기는 즉시 적용됩니다
  2. 같은 워크스페이스에서 키 추가로 새 키를 발급합니다
  3. 새 키를 CI 시크릿, MCP 설정, xenocast config set api-key에 넣습니다
  4. 분석 → 로그에서 그 키의 요청과 잡을 확인합니다, 출처(CLI, MCP, GitHub Actions, API)와 시각이 보입니다
  5. 모르는 잡이 실행 중이면 실행 → 잡에서 취소합니다, 취소 시점까지 시작된 분은 과금됩니다
  6. 분석 → 사용량을 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년)를 두고 주기적으로 바꾸세요

다음 단계