3줄 요약
- Railway에 앱을 올려 뒀다면 환경변수에 넣은 API 키와 DB 비밀번호를 전부 바꾸세요. 레일웨이는 환경변수 저장 시스템에 외부인이 들어왔을 수 있다며 모든 이용자에게 교체를 권했어요.
- 멈췄던 배포는 엔터프라이즈 요금제부터 차례로 다시 열리는 중이에요. 이전에 발급해 둔 레일웨이 API 토큰은 전부 무효가 됐어요.
- 새 키는 배포가 다시 열려야 앱에 들어가요. 오픈AI·Stripe·AWS처럼 돈이 나가는 키는 배포를 기다리지 말고 발급한 서비스에서 지금 폐기하세요.
10월 21일 오후 4시 24분(한국 시간), 레일웨이 상태 페이지에 "조사 중"이라는 짧은 공지가 떴어요. 저녁 6시 반쯤 업데이트가 하나 더 올라왔는데, 대시보드와 API, CLI를 쓸 수 없고 전 지역에서 새 빌드가 멈췄다는 내용이었어요. 사이드 프로젝트를 올려 둔 사람이라면 이때까지는 흔한 장애로 여겼을 거예요.
장애는 밤새 풀리지 않았어요. 다음 날 아침 6시 59분, 같은 공지 밑에 업데이트가 또 하나 붙었어요. 보안 공지를 따로 올렸다는 소식이었어요.
흔한 장애가 아니라 보안 사고였어요.

레일웨이는 깃허브 저장소를 연결하면 서버를 대신 띄워 주는 클라우드 배포 서비스예요. 백엔드나 봇을 올리는 개인 개발자가 많이 써요. 여기에 앱을 하나라도 올려 뒀다면 이번 공지가 내 얘기예요. 배포가 막힌 상태에서 어떤 키부터 바꿔야 하는지 차례로 볼게요.
🔓 Railway 보안 사고, 무엇이 새어 나갔나
레일웨이 공지에 따르면 고객 환경변수를 보관하는 시스템에서 수상한 움직임이 포착됐어요. 외부인이 암호화된 환경변수에 접근했을 수 있고 그중 일부는 암호가 풀린 상태로 빠져나갔을 수 있다고 했어요.

환경변수는 앱이 켜질 때 불러오는 설정값이에요. 비밀번호를 코드에 그대로 박지 않으려고 OPENAI_API_KEY나 DATABASE_URL 같은 이름을 붙여 따로 넣어 둬요. 그러니 환경변수 목록 하나에 그 앱이 쓰는 열쇠가 다 모여 있는 셈이에요. 레일웨이가 노출됐을 수 있다며 꼽은 항목도 API 키, 데이터베이스 접속 정보, 비공개 컨테이너 이미지 저장소 자격증명이에요.
피해는 일부 이용자에 그칠 수 있다고 했지만 교체 권고는 모든 이용자에게 했어요. 피해 계정에는 확인되는 대로 메일을 보낼 테니, 그 메일을 기다리지 말고 지금 환경변수를 바꾸라는 거예요.
메일이 안 왔다고 안심할 일이 아니에요.
레일웨이는 공격 배경도 설명했어요. AI 모델을 API로 파는 추론 업체를 노린 공격이 플랫폼 회사들을 차례로 거쳐 가고 있는데, 이번 사고도 그중 하나로 봤어요. 그렇다면 오픈AI 같은 AI 서비스 키가 첫 번째 표적일 수 있어요. 레일웨이는 그 업체들에 키를 미리 전부 폐기해 달라고 요청했다고도 밝혔어요. 그러니 레일웨이에 넣어 둔 AI 서비스 키는 이미 막혀 있을 수도 있어요. 비슷한 일은 10월 18일에도 있었어요. 코딩 도구 오픈코드는 콘솔에 맡아 두던 AI 서비스 키가 노출됐을 수 있다고 공지했거든요. 두 사건이 같은 공격인지는 레일웨이가 밝히지 않았어요.
⏸️ 배포가 막혔는데 키는 어떻게 바꾸나
걸리는 건 순서예요. 레일웨이 앱은 켜질 때만 환경변수를 읽기 때문에 값을 바꾼 뒤 다시 배포해야 새 값이 들어가요. 그런데 지금은 그 배포가 막혀 있어요. 상태 페이지에도 같은 안내가 올라와 있어요.
빌드는 10월 22일 낮 12시 32분에 엔터프라이즈 요금제부터 다시 열렸어요. Pro, Hobby, 무료·체험 요금제도 차례로 연다고 했는데, 오후 2시 20분 업데이트까지는 이쪽 빌드가 열렸다는 소식이 없어요.
배포가 열릴 때까지 기다렸다가 바꾸면 어떨까요? 돈이 나가는 키라면 그렇게 미루면 안 돼요. 기다리는 동안 남이 그 키로 내 돈을 쓸 수 있거든요. 발급한 서비스에서 옛 키를 지우면 새 키가 들어가기 전까지 앱 일부가 멈추긴 해요. 그래도 남이 내 카드로 GPU를 돌리는 것보다는 손해가 훨씬 작아요.
- 레일웨이 서비스마다 Variables 탭을 열어 어떤 키가 들어 있는지 적어 둬요. 여러 서비스가 함께 쓰는 변수는 프로젝트 설정에 따로 모여 있어요.
- 오픈AI, 앤트로픽, Stripe, AWS, 구글 클라우드처럼 쓴 만큼 돈이 나가는 키는 각 서비스 관리 화면에서 먼저 폐기하고 새로 발급받아요.
- 새 키는 레일웨이 변수에 저장만 해 두고 빌드가 열리면 바로 배포해요.
- 배포가 끝나면 새 키로 요청이 잘 나가는지 로그로 확인해요. 10월 21일 전후로 내가 쓰지 않은 사용 기록이 남아 있는지도 서비스마다 살펴봐요.
🔑 서비스별 키 바꾸는 법
10월 22일에는 레일웨이가 서비스별 대응 가이드도 따로 올렸어요.
오픈AI API 키
오픈AI 대시보드의 API keys 화면에서 해당 프로젝트부터 고른 뒤 노출된 키를 지우고 새 키를 만들어요. 새 키는 만들 때 한 번만 보여 주니 바로 복사해 두세요. 그다음 Usage 화면에서 키별 사용량이 평소와 다른지 보고 Billing에서 그 기간 요금을 확인해요. 모르는 멤버가 프로젝트에 들어와 있지는 않은지도 살펴보세요.
앤트로픽(클로드) API 키
클로드 콘솔의 API keys 화면에서 작업 공간이 맞는지 먼저 확인한 뒤 노출된 키 옆 메뉴에서 Delete API key를 눌러요. 삭제는 바로 적용돼요. 같은 작업 공간에서 Create key로 새 키를 만들어요. 키 값은 다시 보여 주지 않으니 만들자마자 복사해 두세요. 깃허브 시크릿 스캐닝에 걸린 키라면 앤트로픽이 먼저 비활성화하고 메일을 보냈을 수도 있어요. 그런 경우에도 새 키는 넣어야 하고 사용 기록도 봐야 해요. Usage 화면에서 키별로 묶어 평소 안 쓰던 모델이 찍혔는지 살피고 Cost 화면에서 그 기간 요금을 확인해요.
OpenRouter 키
OpenRouter 키는 바로 지우지 말고 먼저 비활성화하라고 레일웨이 가이드에 나와 있어요. 비활성화하면 키는 즉시 막히고 사용 기록은 남아서 나중에 확인할 수 있어요. 새 키에는 지출 한도와 만료일을 함께 걸어 두세요. Activity 화면에서는 노출 기간의 키별·앱별 사용량을 보고 평소 쓰지 않던 모델에 돈이 나갔는지 확인해요. 수상한 기록이 있으면 키를 지우기 전에 CSV로 내보내 두고 OpenRouter 고객지원에 알리면 돼요.
Stripe 키
Stripe 가이드의 원칙은 "먼저 바꾸고, 조사는 그다음"이에요. API keys 화면에서 키를 Rotate하면 옛 키가 언제 만료될지 고를 수 있어요. 유출이 확인됐으면 바로 만료시켜요. 예방 차원이라면 재배포하는 동안만 옛 키를 살려 둘 수 있어요. 배포가 막힌 지금 상황에 잘 맞는 방법이에요. 웹훅 서명 시크릿은 API 키와 별개라서 따로 바꿔야 해요. 바꾼 뒤에는 결제, 환불, 지급 계좌, 웹훅 엔드포인트 가운데 내가 만들지 않은 항목이 있는지 확인해요.
깃허브 토큰
환경변수에 깃허브 개인 액세스 토큰이나 SSH 키를 넣어 뒀다면 깃허브에서 지우고 새로 만들어요. 보안 로그에 모르는 로그인이나 접근 기록이 없는지 보고 연결된 OAuth 앱과 SSH 키도 정리해요. 조직 저장소라면 감사 로그를 먼저 내보내 두세요. 배포 키, 시크릿, 웹훅, 협업자도 저장소마다 확인해야 해요. 공격자가 심어 둔 웹훅이나 시크릿은 비밀번호를 바꿔도 그대로 남거든요.
AWS 액세스 키
IAM 콘솔에서 새 키를 만들되 옛 키는 지우기 전에 먼저 비활성화해요. 그래야 뭔가 깨졌을 때 잠깐 다시 켤 수 있어요. CloudTrail에서 옛 키 ID로 노출 기간 기록을 찾을 때는 리전마다 따로 조회해야 해요. 기록이 리전별로 나뉘어 있거든요. 내가 만들지 않은 EC2 인스턴스나 IAM 사용자, 액세스 키가 새로 생겼는지도 보고 Cost Explorer에서 요금을 지난달과 비교해요.
구글 클라우드 서비스 계정 키
서비스 계정 키는 콘솔에서 비활성화가 안 돼서 CLI로 해야 해요. 키를 비활성화해도 그 키로 이미 받아 둔 토큰은 최대 1시간 동안 더 쓰일 수 있어요. 당장 막아야 하면 서비스 계정을 통째로 꺼 두는 방법이 있어요. 요금은 서비스별로 나눠 지난달과 비교해 보세요. 가이드는 공격자가 Compute, GPU, Vertex AI를 자주 노린다고 짚었어요.
레일웨이 안에 띄운 데이터베이스
레일웨이에 PostgreSQL, MySQL, Redis, MongoDB를 띄워 쓰고 있다면 DB 비밀번호도 바꿔야 해요. 레일웨이는 이 네 가지 DB마다 교체 가이드를 따로 냈어요. PostgreSQL과 MySQL은 Database 탭 Config 화면의 Regenerate 버튼으로 바꿔요. 버튼을 누르면 DB가 재시작되고 열려 있던 연결이 전부 끊겨요. 이 DB를 쓰는 서비스는 재배포해야 다시 연결돼요. 그러니 배포가 막힌 지금보다는 빌드가 열린 뒤에 하는 편이 나아요. 공개 접속은 예외예요. 켜 뒀는데 외부에서 쓸 일이 없다면 지금 바로 꺼 두세요.
🔁 레일웨이 API 토큰을 새로 받고 깃허브도 다시 연결하세요
레일웨이는 10월 22일 오후 1시 17분에 이용자들이 발급해 둔 API 토큰을 모두 무효로 만들었어요. 기존 토큰으로는 더 이상 API를 호출할 수 없어요. 깃허브 액션 같은 곳에 이 토큰으로 자동 배포를 걸어 뒀다면 빌드가 다시 열려도 배포는 실패해요.
계정 토큰과 워크스페이스 토큰은 railway.com/account/tokens에서, 프로젝트 토큰은 프로젝트 설정의 토큰 화면에서 새로 발급받아요. 어떤 토큰이 맞는지는 쓰임새마다 달라요. 레일웨이 문서는 서비스 하나만 자동 배포할 때는 프로젝트 토큰을, 팀이 함께 쓰는 CI에는 워크스페이스 토큰을 권해요. 로그인이 풀렸다면 그것도 이번 대응 때문이에요. 레일웨이가 22일 새벽 로그인 세션을 무효로 만들었고 영향받은 이용자는 다시 로그인해야 한다고 했어요.
깃허브 연결도 봐야 해요. 레일웨이가 계정 연결용으로 보관하던 깃허브 토큰을 무효로 만들었는데, 새 토큰은 대신 만들어 줄 수 없어요. 그래서 이용자가 직접 깃허브 계정을 다시 연결해야 해요. 연결이 끊긴 서비스를 다시 잇고 꺼진 자동 배포도 켜 주세요. 서비스 설정에 비공개 이미지용 깃허브 토큰을 넣어 뒀다면 사정이 달라요. 그 토큰은 깃허브 쪽에서는 아직 살아 있으니 깃허브에서 직접 폐기하고 새로 만들어야 해요.
자주 묻는 질문
railway 장애는 언제 풀리나요
레일웨이가 밝힌 시각은 아직 없어요. 10월 22일 낮 12시 32분에 엔터프라이즈 요금제부터 빌드가 다시 열렸고 Pro, Hobby, 무료·체험 순서로 열 예정이라고 했어요. 어디까지 열렸는지는 레일웨이 상태 페이지에서 바로 확인하세요.
안내 메일을 못 받았는데 railway 환경변수를 다 바꿔야 하나요
네, 바꾸는 게 맞아요. 레일웨이 권고는 모든 이용자 대상이에요. 피해 계정에는 확인되는 대로 메일을 보낸다고 했지만 그 메일을 기다리지 말고 지금 바꾸라고 했어요.
레일웨이 스토리지 버킷 키도 제가 바꿔야 하나요
버킷 키는 레일웨이가 모든 환경에서 직접 새로 만들어 뒀어요. 다만 앱은 다시 배포해야 새 값을 읽으니 빌드가 열리면 배포하세요. 내 컴퓨터나 CI처럼 레일웨이 밖에서 옛 키를 쓰던 곳은 직접 바꿔야 해요. 감사 로그에 레일웨이 직원 이름으로 된 버킷 키 폐기 기록이 보여도 정상이라고 했어요.