• AWS 장애 사후 분석, DNS를 원인으로 지목하며 며칠간 인터넷과 서비스의 일부를 마비시키다 — 자동화 시스템들이 추락하고 경쟁하다

    설마 DNS 때문일 리가요?

    article image

    최근 인터넷, 게임, 심지어 스마트 홈 장치까지 상당 부분을 마비시키며 발생한 아마존 웹 서비스(Amazon Web Services) 장애는 언론의 주요 보도 대상이었습니다. 클라우드 서비스의 분산 아키텍처는 이러한 장애로부터 고객을 보호해야 합니다. 그렇다면 무엇이 잘못된 것일까요? 아마존은 이 장애에 대한 상세한 기술적 사후 분석(post-mortem)을 공개하며, 유명한 하이쿠 시 구절을 인용했습니다. "DNS 때문은 아니다. / 설마 DNS가 문제일 리 없다. / 바로 DNS였다."

    대략적인 비유로 자동차 사고를 가정해 봅시다. 사고 현장이 깨끗하게 정리된 후에도 수 마일에 걸쳐 아코디언처럼 확장되는 교통 체증이 발생할 수 있습니다. 최초 문제는 비교적 빠르게 해결되었습니다. 10월 19일 오후 11시 48분부터 10월 20일 오전 2시 40분까지 약 3시간 동안 서비스가 중단된 것입니다. 그러나 교통 체증 예시처럼, 시스템 간의 의존성(dependencies)들이 연쇄적으로 무너지기 시작했고, 완전히 정상화되는 데는 훨씬 오랜 시간이 걸렸습니다.

    근본 원인은 DynamoDB(데이터베이스 서비스)의 DNS 설정이 손상되어 Route53(DNS 서비스)에 게시된 것으로 파악되었습니다. 이로 인해 자동화 관리 서비스가 DynamoDB에 의존하고 있던 EC2(가상 머신 서비스)의 일부 또한 다운되었습니다. 또한, 아마존의 Network Load Balancer(NLB) 역시 본질적으로 DNS에 의존하기 때문에 이 역시 문제를 겪었습니다.

    (별도 기사 제목: AWS 중단 사태는 AI 코딩 봇의 실수로 인한 것으로 보고)
    (별도 기사 제목: Claude Code가 데이터베이스와 스냅샷을 포함한 개발자의 운영 환경을 삭제했습니다)

    DynamoDB가 US-East-1 전체 리전에서 장애를 겪은 것 자체만으로도 수백만 개에 달하는 웹사이트와 서비스를 마비시키기에 충분했습니다. 하지만 EC2 인스턴스 부팅 불가 현상이 추가적으로 심각했으며, 로드 밸런싱까지 영향을 받은 것은 그야말로 치명적이었습니다.

    이번 DNS 장애의 구체적인 기술적 원인은 프로그래머가 흔히 범하는 버그, 즉 '레이스 컨디션(race condition)'이었습니다. 이는 두 개의 반복되는 이벤트가 서로의 작업 결과를 끊임없이 재실행하거나 취소하는 상황을 의미하며, 포스터가 있는 버그스 바니와 대피 덕의 유명한 GIF 애니메이션이 이를 잘 보여줍니다.

    DynamoDB의 DNS 해석 과정은 두 가지 구성 요소를 활용합니다. 먼저 DNS Planner는 이름에서 유추할 수 있듯이 시스템 부하와 가용성을 고려하여 주기적으로 새로운 플랜(Plan)을 발행합니다. 그리고 DNS Enactor는 새로운 플랜을 감지할 때마다 이를 트랜잭션으로 Route53에 적용합니다. 즉, 플랜은 완전히 적용되거나, 아니면 아예 적용되지 않아야 합니다. 여기까지는 정상적이었습니다.

    발생한 문제는 첫 번째 DNS Enactor가 '구 플랜(Old Plan)'을 적용하는 과정에서 지연이 발생했다는 점입니다. 새로운 플랜들이 들어오자, 다른 Enactor가 이를 가져와 적용하는 사이, 구 플랜의 적용이 완료되자마자 오래된 플랜(구 플랜 포함)을 정리하는 작업이 동시에 이루어졌습니다.

    이 정리 과정에서 구 플랜이 제거되는 시점과 동시에 적용되었고, 이 플랜에는 빈 정보(empty information)가 포함되면서, 결과적으로 DynamoDB의 모든 DNS 항목이 사실상 초기화되는 심각한 문제가 발생한 것입니다.

    article image


    [후속 조치]

    • 지연된 영향: 서비스의 정상화가 이루어지면서 문제가 지속되었습니다.
    • 원인: 레이스 컨디션(Race Condition)이었습니다.
    • 결과: AWS 서비스 중단.

    [추가 분석]

    • 원인: AWS 내부 서비스 계정의 잘못된 권한 설정으로 인해 자동화된 업데이트 도구(Auto-scaling tool)가 정상 작동하지 않았습니다.
    • 조치: AWS가 전 세계적으로 서비스 중단(Outage)을 발표하고 이를 개선했다고 밝혔습니다.

    [요약 및 결론]

    • 사건: 대규모 서비스 중단 발생.
    • 근본 원인: 레이스 컨디션 발생 → 권한 문제로 인한 자동화 도구 오작동 → DNS/DNS 레코드 오류 유발.
    • 결과: 서비스 불안정, 시스템 다운.

    [출처:] https://www.tomshardware.com/tech-industry/big-tech/massive-amazon-web-service-outage-that-took-out-a-chunk-of-the-internet-and-services-for-days-was-due-to-dns-automation-systems-race-and-crash