클라우드 ·
Cloudflare, 데이터베이스 권한 설정 오류로 6년 만 최대 장애...봇 관리 시스템 기능 파일 크기 초과가 원인
글로벌 CDN 기업 Cloudflare가 11월 18일 데이터베이스 권한 변경으로 인한 대규모 네트워크 장애를 겪었다.
[한국정보기술신문] 세계 최대 콘텐츠 전송 네트워크 및 보안 서비스 제공업체인 Cloudflare가 11월 18일 오후 8시 20분(한국시간, UTC 11:20)부터 약 6시간에 걸쳐 대규모 서비스 장애를 겪었다. 이번 장애는 2019년 이후 6년 만에 발생한 최악의 사태로, 전 세계 수백만 웹사이트와 서비스가 영향을 받았다.
Cloudflare는 19일 공식 블로그를 통해 장애 원인과 복구 과정을 상세히 공개하며, 사이버 공격이나 악의적 활동이 아닌 내부 데이터베이스 시스템의 권한 설정 변경이 직접적인 원인이었다고 밝혔다.
장애는 ClickHouse 데이터베이스 시스템의 권한 관리 개선 작업 중 발생했다. 오전 11시 5분 배포된 데이터베이스 접근 제어 변경으로 인해 봇 관리 시스템에서 사용하는 기능 파일이 평소보다 2배 이상 커지면서 문제가 시작됐다. 이 파일은 Cloudflare의 봇 관리 시스템이 자동화된 트래픽과 정상 사용자를 구별하는 데 사용하는 머신러닝 모델의 입력 데이터다.
데이터베이스 메타데이터 중복으로 파일 크기 급증
문제의 핵심은 데이터베이스 메타데이터 조회 쿼리에 있었다. ClickHouse 클러스터는 분산 테이블과 기본 테이블로 구성되는데, 기존에는 사용자가 기본 데이터베이스의 테이블 메타데이터만 볼 수 있었다. 하지만 보안과 안정성 개선을 위해 기본 테이블에 대한 명시적 접근 권한을 부여하면서, 테이블 컬럼 정보를 조회하는 쿼리가 중복된 결과를 반환하기 시작했다.
봇 관리 시스템의 기능 파일 생성 로직은 데이터베이스 이름으로 필터링하지 않고 테이블 컬럼을 조회했기 때문에, 권한 변경 후 같은 컬럼이 기본 데이터베이스와 기본 테이블에서 각각 반환되면서 파일 크기가 2배로 증가했다. 평소 약 60개의 기능을 사용하던 파일이 200개를 초과하게 된 것이다.
소프트웨어 한계치 초과로 시스템 패닉 발생
Cloudflare의 프록시 서비스는 성능 최적화를 위해 메모리를 미리 할당하며, 봇 관리 모듈의 경우 최대 200개의 머신러닝 기능까지만 처리하도록 설정돼 있었다. 200개를 초과하는 기능 파일이 전 세계 서버에 배포되자 시스템이 패닉 상태에 빠지며 HTTP 500번대 오류를 반환하기 시작했다.
특히 이 기능 파일은 5분마다 자동으로 생성되어 전체 네트워크에 배포되는데, ClickHouse 클러스터의 일부 노드만 업데이트된 상태였기 때문에 정상 파일과 비정상 파일이 번갈아 생성됐다. 이로 인해 시스템이 복구와 장애를 반복하는 이상 현상이 나타났고, 초기에는 대규모 DDoS 공격으로 오인하기도 했다.
상황을 더욱 혼란스럽게 만든 것은 Cloudflare와 독립적으로 운영되는 상태 페이지까지 동시에 다운된 우연한 사건이었다. 이로 인해 일부 엔지니어들은 공격자가 Cloudflare 시스템과 상태 페이지를 동시에 표적으로 삼았을 가능성을 의심했다.
주요 서비스 영향 및 복구 과정
이번 장애로 핵심 CDN과 보안 서비스가 HTTP 500번대 오류를 반환했으며, Turnstile 봇 차단 서비스가 로드에 실패했다. Workers KV는 대량의 오류를 반환했고, 대시보드는 Turnstile 의존성으로 인해 대부분의 사용자가 로그인할 수 없었다. Access 인증 서비스도 광범위한 장애를 겪었으며, 이메일 보안 서비스는 스팸 탐지 정확도가 일시적으로 저하됐다.
신규 프록시 엔진인 FL2를 사용하는 고객은 HTTP 500번대 오류를 경험했으며, 기존 FL 엔진 고객은 오류 대신 모든 트래픽에 봇 점수 0이 부여되는 문제가 발생했다. 이로 인해 봇 차단 규칙을 설정한 고객들은 대량의 오탐지를 경험했다.
오후 1시 5분(한국시간 오후 10시 5분), 엔지니어링 팀은 Workers KV와 Access 서비스가 이전 버전의 프록시로 우회하도록 조치하여 영향을 일부 줄였다. 오후 2시 24분에는 봇 관리 설정 파일의 자동 생성 및 배포를 중단하고, 이전의 정상 버전을 수동으로 배포 큐에 삽입했다.
오후 2시 30분(한국시간 오후 11시 30분)에는 올바른 봇 관리 설정 파일이 전 세계적으로 배포되면서 주요 트래픽이 대부분 정상화됐다. 완전한 복구는 오후 5시 6분(한국시간 다음날 오전 2시 6분)에 이뤄졌으며, 모든 다운스트림 서비스가 재시작되고 모든 운영이 완전히 복구됐다.
재발 방지 대책 마련 착수
Cloudflare는 이번 사태를 심각하게 받아들이고 있다. 회사는 블로그를 통해 "Cloudflare의 인터넷 생태계 내 중요성을 고려할 때 어떤 시스템의 장애도 용납할 수 없다"며 "네트워크가 트래픽을 라우팅할 수 없었던 시간이 있었다는 것은 모든 팀원에게 깊은 고통"이라고 사과했다.
회사는 재발 방지를 위해 여러 조치를 취하고 있다. Cloudflare가 생성한 설정 파일의 입력을 사용자가 생성한 입력과 동일하게 강화하고, 기능에 대한 더 많은 글로벌 킬 스위치를 활성화할 계획이다. 또한 코어 덤프나 기타 오류 보고서가 시스템 리소스를 압도하는 상황을 제거하고, 모든 핵심 프록시 모듈의 오류 조건에 대한 실패 모드를 검토하고 있다.
특히 성능 최적화를 위한 메모리 사전 할당 방식의 한계가 드러난 만큼, 설정 파일 크기에 대한 동적 처리 방식 도입도 검토될 것으로 보인다. Cloudflare는 과거 장애 발생 시마다 더욱 탄력적인 시스템을 구축해왔으며, 이번 사태를 계기로 또 다른 개선이 이뤄질 것으로 기대된다.
이번 장애는 클라우드 서비스의 단일 장애점이 가져올 수 있는 광범위한 영향을 다시 한 번 보여줬다. 전 세계 웹 트래픽의 상당 부분을 처리하는 Cloudflare의 특성상, 내부 시스템의 작은 설정 변경도 수백만 웹사이트와 사용자에게 영향을 미칠 수 있음이 입증됐다.
한국정보기술신문 클라우드분과 유민건 기자 news@kitpa.org