본문으로 건너뛰기

키 유출 대응

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

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

바로 할 일

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

CLI로 확인하려면

xenocast usage --from 2026-10-01 --by api_key

실행 중인 잡은 서버가 15초에서 30초마다 그 잡을 시작한 키를 다시 확인해, 키가 폐기되었거나 만료되었으면 잡을 멈추고 VM을 지웁니다, 멈춘 순간까지 실행한 초만 과금합니다 (이 주기 점검은 서버에 적용하는 중이고, 적용 전에는 잡을 따로 취소해야 합니다)

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년)를 두고 주기적으로 바꾸세요

다음 단계