Zeabur 보안 사고 후 교체해야 할 키: 체크리스트와 순서

Zeabur에서 8월과 10월에 보안 사고가 있었습니다. 교체해야 할 키와 순서, 그리고 테스트에서 발견한 함정 'Zeabur 백업으로 복원하면 옛 비밀번호도 돌아온다'를 정리했습니다.

핵심 요약

  • Zeabur의 환경 변수는 모두 유출되었다고 가정한다. 결제, AI API, 클라우드 계정, 메일 발송 서비스 키는 오늘 교체한다.
  • 나머지 키는 이전할 때 새 플랫폼에서 새 키를 만들고, 정상 동작을 확인한 뒤 옛 키를 폐기한다.
  • Zeabur의 data.sql로 복원하면 데이터베이스 비밀번호가 옛것으로 돌아간다. 복원 후 비밀번호를 바꾼다.
  • GitHub의 Zeabur App은 이전을 모두 마친 뒤 삭제한다.
이 글은 어떻게 검증했나요? (직접 테스트 1개, 공식 문서 기준 2개)
직접 테스트한 내용
  • Zeabur PostgreSQL 백업 형식(pg_dumpall의 data.sql)에는 ALTER ROLE ... PASSWORD가 들어 있어 복원하면 옛 비밀번호로 돌아간다 (Docker 테스트)
공식 문서를 바탕으로 작성 (직접 실행하지 않음)
  • 두 보안 사고의 세부 내용: 보도와 Zeabur 공지를 따랐으며, Zeabur는 전체 영향 범위를 공개하지 않았습니다
  • 서비스별 키 폐기·재발급 버튼 위치: 화면은 바뀔 수 있으니 각 서비스 관리 화면에서 확인하세요
목차 (4개 섹션)
  1. 전제: 환경 변수는 모두 유출되었다고 본다
  2. 순서: 돈과 직결되는 것부터, 나머지는 이전할 때
  3. 테스트에서 발견한 함정: 백업을 복원하면 옛 비밀번호도 돌아온다
  4. 이전 후 마무리

전제: 환경 변수는 모두 유출되었다고 본다

Zeabur는 8/28, 일부 프로젝트의 환경 변수에 무단 접근이 있었다고 공지했습니다. 여기에는 “API 키, 데이터베이스 접속 문자열, 클라우드 서비스 키” 같은 일반적인 자격 증명이 포함되었습니다(CodeCat이 전한 공지 내용). Zeabur는 9/7에 보안 업그레이드를 했지만, 10/14에 더 큰 보안 사고가 일어났고 이후 서비스 종료를 발표했습니다.

내 데이터가 영향을 받았는지 알 수 없으니, 가장 안전한 방법은 Zeabur 환경 변수에 넣어 둔 키를 모두 교체하는 것입니다.

순서: 돈과 직결되는 것부터, 나머지는 이전할 때

오늘 교체: 유출되면 바로 금전 피해로 이어지는 키.

종류예교체 후 확인할 것
결제Stripe 등 결제 서비스의 시크릿 키최근 거래와 환불 내역
AI APIOpenAI, Anthropic, Gemini API 키청구서에 비정상 사용량이 없는지, 이참에 사용 한도도 설정
클라우드 계정AWS 액세스 키, GCP 서비스 계정 JSON, Cloudflare API 토큰모르는 리소스가 생기지 않았는지
메일 발송 서비스SendGrid, Resend, Mailgun발송 기록 (사기 메일 발송에 악용될 수 있음)

이전할 때 교체: 새 플랫폼에 새 키를 설정하고, 새 서비스가 정상인지 확인한 뒤 옛 키를 폐기합니다. 한 번만 바꾸면 되고 서비스도 멈추지 않습니다.

  • 데이터베이스 비밀번호 (새 DB는 원래 새 비밀번호지만 다음 섹션의 함정에 주의)
  • LINE Channel Secret과 Channel Access Token, Discord·Telegram 봇 토큰
  • Google·Facebook 로그인의 OAuth 클라이언트 시크릿
  • JWT/세션 서명 키: 바꾸면 모든 사용자가 한 번 로그아웃되는데, 정상입니다
  • n8n에 저장된 각 서비스의 credentials (n8n 편 참고)

테스트에서 발견한 함정: 백업을 복원하면 옛 비밀번호도 돌아온다

Zeabur의 PostgreSQL 백업은 pg_dumpall로 만든 data.sql입니다. 같은 형식으로 테스트해 보니 파일 앞부분에 다음 두 줄이 있었습니다.

CREATE ROLE root;
ALTER ROLE root WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS PASSWORD 'SCRAM-SHA-256$4096:...';

psql로 새 데이터베이스에 복원하면 root 비밀번호가 Zeabur의 옛 비밀번호로 돌아갑니다. 그 비밀번호가 보안 사고로 유출되었다면 새 데이터베이스도 안전하지 않습니다.

해결 방법 (둘 중 하나):

  • 복원 전에 data.sql에서 CREATE ROLE과 ALTER ROLE 두 줄을 지우기
  • 복원 후 바로 비밀번호 바꾸기: ALTER ROLE root WITH PASSWORD '새로운-긴-비밀번호';

더 좋은 방법은 pg_dump로 데이터베이스 자체만 백업하는 것입니다. 역할과 비밀번호가 따라오지 않습니다. 자세한 방법은 데이터베이스 편을 참고하세요.

이전 후 마무리

  • GitHub의 Zeabur App 삭제: GitHub → Settings → Applications → Installed GitHub Apps → Zeabur → Uninstall. 모두 옮긴 뒤에 삭제하세요. 먼저 지우면 Zeabur의 서비스를 다시 배포할 수 없습니다
  • 전용 서버의 SSH 키: Zeabur 전용 서버에 SSH 공개 키를 등록했다면 새 서버에서는 새 키 쌍을 쓰기
  • Zeabur의 데이터 삭제: 백업이 내 손에 있는지 확인한 뒤 서비스, 볼륨, 프로젝트를 삭제하기. 환불을 신청할 때 계정 데이터 삭제도 함께 요청하고 서면 기록을 남기기
  • 증거 남기기: 비정상 청구가 있는 명세서 스크린샷을 저장해 두세요. Zeabur에 보안 사고 보상을 신청할 때 필요합니다 (이전 가이드의 환불 섹션 참고)