Кратко

  • Akamai сообщила, что в 15:45 UTC 22 июля 2021 года обновление программной конфигурации вызвало ошибку в DNS-компоненте её сети доставки контента Secure Edge Content Delivery Network. Некоторые сайты клиентов были недоступны до часа. Akamai откатила обновление, заявила о возврате сервиса к нормальной работе и отметила, что инцидент не был кибератакой. [1]
  • На следующий день Akamai уточнила формулировку. Сначала компания сообщила о влиянии на DNS-сервис, но дальнейшее расследование сузило затронутую систему до DNS-компонента Secure Edge CDN. Это уточнение важно: открытые данные не доказывают, что отказали все авторитативные DNS-сервисы, зоны или клиенты Akamai. [1]
  • ThousandEyes фиксировала сбои DNS и приложений примерно с 15:38 UTC, массовое восстановление — около 16:45 UTC. Тесты показывали тайм-ауты и ответы SERVFAIL по затронутым доменам. Разница в семь минут между наблюдаемым началом и заявленным временем обновления Akamai отражает разные границы доказательств, а не временную метку, которую можно молча привести к единой версии. [2][3]
  • Инцидент показал, почему доступность сети зависит не только от рабочих каналов и доступных серверов. Пользователь не сможет установить нужное соединение с приложением, если управляющая плоскость имён не вернёт пригодный адрес, даже если пакеты в остальном могут дойти до edge CDN. [2][10][11]
  • Текущая документация Akamai Edge DNS описывает глобальный anycast, первичные и вторичные зоны, списки изменений, различия версий, статус распространения и реактивацию предыдущих версий. Эти механизмы показывают, какие доказательства способна создавать зрелая платформа, но текущая документация продукта не доказывает, какой внутренний путь обрабатывал обновление 2021 года. [5][6][7][8]
  • В опубликованной до инцидента технической статье Akamai описаны 24 anycast-облака и серверы имён с задержанным вводом, предназначенные для сохранения старых данных при некоторых сбоях ввода. Это контекст архитектуры, а не разбор инцидента. Открытые данные не устанавливают, использовала ли затронутый компонент эту схему и почему она не сдержала событие. [9]
  • Ответственность следует за практическим контролем. Akamai контролировала общий компонент, процесс обновлений, валидацию, развёртывание, мониторинг, откат и доказательства восстановления. Клиенты контролировали часть разнообразия DNS и CDN, сертификаты, источники (origin-серверы) и тесты непрерывности. Рекурсивные резолверы контролировали кэширование и политику отдачи устаревших данных. Эти обязанности слоистые, но не взаимозаменяемые.

Сбой произошёл до соединения с приложением

Сбой в интернете часто описывают так, будто сеть — это один переключатель с двумя состояниями: работает или нет. Инцидент Akamai полезен тем, что разрушает эту картину.

Обычный веб-запрос начинается с имени, а не с IP-адреса. Рекурсивный резолвер проходит по кэшированной информации и рефералам, пока не получит авторитативный ответ для домена. Возвращённый адрес затем направляет соединение к edge CDN, балансировщику нагрузки или источнику (origin). Если авторитативный шаг не удаётся, пользователь может вообще не начать соединение с приложением. Маршрутизаторы могут передавать пакеты. Серверы могут быть включены. Оптика может быть цела. Сервис всё равно недоступен, потому что плоскость имён не выдала следующий пригодный адрес. [10][11][17]

ThousandEyes наблюдала это разделение в ходе инцидента июля 2021 года. Компания сообщила, что связь с edge-инфраструктурой CDN Akamai могла сохраняться, тогда как разрешение DNS для затронутых доменов не удавалось. Тесты получали ответы SERVFAIL или не получали ответов от авторитативных серверов. Браузеры и приложения показывали сбои, похожие на общую недоступность сайтов, хотя измеренный разрыв возникал раньше в цепочке зависимостей. [2]

Это различие — не только техническая терминология. Оно определяет контур контроля.

Если обрыв волокна изолирует регион, подконтрольные меры включают физическое разнообразие, восстановление и перемаршрутизацию. Если BGP экспортирует опасный маршрут, меры включают политику маршрутизации, валидацию и локализацию. Если авторитативный DNS не может отвечать, потому что общее конфигурационное обновление вызвало ошибку, меры включают представление конфигурации, покрытие тестами, масштаб развёртывания, разделение доменов отказа, полномочия на откат, взаимодействие с резолверами и проектирование клиентских зависимостей.

Называть каждый случай «интернет лёг» скрывает эти различия. Это также позволяет ответственности смещаться к компании, которая появляется в окне ошибки пользователя. Правильнее спросить: какая система не смогла предоставить информацию, необходимую для следующего сетевого шага, и у кого была практическая возможность предотвратить, ограничить, обнаружить и обратить этот сбой?

Применительно к этому инциденту собственное заявление Akamai даёт общую причину. Компания сообщила, что обновление программной конфигурации вызвало ошибку. Она не опубликовала точную конфигурацию, путь в коде, затронутую совокупность клиентов или внутреннюю топологию. Поэтому статья может анализировать полномочия по конфигурации и доказательства доступности. Она не может раскрыть частную деталь реализации, возложить вину на конкретного инженера или утверждать, что именованная функция текущего Edge DNS отказала в 2021 году. [1]

Поэтому цель узкая: риск и подотчётность в сетевой инфраструктуре. Инцидент важен не просто из-за ошибки в ПО. Он важен потому, что ошибка находилась за конфигурационным каналом, способным повлиять на общий DNS-компонент и через него — на доступность многих клиентских сайтов.

Хронология требует двух часов и одной поправки о масштабе

ThousandEyes относит начало внешне наблюдаемых проблем примерно к 15:38 UTC 22 июля. Akamai сообщает, что в 15:45 UTC обновление программной конфигурации вызвало ошибку. Эти моменты относятся к разным видам знания.

Внешняя измерительная платформа фиксирует, когда тесты начинают сбоить с её точек наблюдения. Оператор фиксирует, когда произошло изменение, когда сработал внутренний порог или когда был объявлен инцидент. Первый неудачный запрос пользователя может предшествовать публичному обновлению статуса. Конфигурация может распространяться постепенно. Часы могут расходиться. Корректный метод — указывать обе временные метки и их происхождение, а не выбирать ту, что даёт самую чистую картину. [1][2][3]

ThousandEyes наблюдала рост сбоев веб-сервисов и приложений среди сервисов, использующих Akamai. Её DNS-тесты выявили сбои разрешения доменов, размещённых в CDN-среде. Часть пользователей получала SERVFAIL, другие — тайм-ауты. Эффекты различались по клиентам и географии. Измерительная компания относит массовое восстановление примерно к 16:45 UTC. Akamai сообщает, что сбой длился до часа и сервис возобновился после отката. Эти версии совместимы на том уровне, который поддерживают открытые данные. [1][2]

В заявлении Akamai есть ещё одна важная хронологическая деталь: само заявление изменилось.

23 июля компания добавила поправку. Первоначальное сообщение описывало влияние на «DNS-сервис Akamai». Дальнейшее расследование, по словам Akamai, показало, что влияние ограничилось DNS-компонентом Secure Edge Content Delivery Network. [1]

Это не редакционная мелочь. Масштаб — часть доказательств первопричины. «DNS Akamai отказал» может означать, что все авторитативные DNS-продукты, зоны, сервисные пути или клиенты разделили одну ошибку. Поправка Akamai отвергает этот вывод. Независимые наблюдатели по-прежнему обоснованно использовали формулировки вроде «сбой Akamai Edge DNS» для описания того, что видели их тесты, но подотчётная реконструкция должна отличать ярлык наблюдателя от более поздней границы компонента, названной оператором.

Поправка о масштабе также показывает, почему ранний язык инцидента не должен застывать в постоянный факт. Операторы сообщают информацию до того, как полная карта компонентов известна. Журналисты и клиенты повторяют первое объяснение. Поисковые системы сохраняют его. Более поздняя поправка может быть менее заметной, чем исходный заголовок. Хорошая практика подотчётности требует версионированной записи: что было сказано, когда изменилось, почему изменилось и на какие выводы это изменение влияет.

В данном случае поправка сужает затронутую платформу, но не отменяет влияние на доступность. Компонент может быть уже продукта и при этом находиться на пути, используемом многими клиентами. Соответствующие вопросы становятся точнее:

  • Какой DNS-компонент Secure Edge CDN получил обновление?
  • Какие клиентские свойства или пути имён зависели от него?
  • Разделяло ли состояние конфигурации между независимыми обслуживающими точками?
  • Какие домены отказа оставались доступными?
  • Как распространялся откат?
  • Какие доказательства подтверждали возврат нормальных ответов?

Открытый набор источников отвечает не на все шесть вопросов. Он устанавливает, что откат сработал достаточно быстро для восстановления нормальной работы и что компания планировала пересмотреть процесс обновлений. Остальные вопросы определяют пробел в доказательствах, а не разрешение заполнить его предположениями. [1]

Разнообразие DNS — это не то же самое, что разнообразие конфигурации

Архитектура DNS предполагает более одного авторитативного сервера для зоны. RFC 2182 объясняет причину прямо: информация о зоне должна оставаться доступной, когда один сервер недоступен или недостижим. Вторичные серверы следует размещать с учётом вероятных сценариев отказа, включая сбои сети и электропитания. [12]

Крупные коммерческие сервисы добавляют ещё одну форму распределения. В документации Akamai Edge DNS описывается IP-anycast, при котором логический адрес сервиса анонсируется из множества физических точек. Запрос резолвера направляется к доступному экземпляру в соответствии с сетевой топологией и политикой. Akamai описывает тысячи серверов имён в нескольких сетях и на нескольких континентах. [5]

RFC 4786 объясняет, почему anycast привлекателен для авторитативного DNS. Он распределяет сервис, улучшает доступность и не позволяет рефералам DNS расти с каждой физической точкой. Документ также предупреждает, что мониторинг усложняется: доступность зависит от того, где находится клиент, а совокупность клиентов, достигающих конкретного узла, меняется с маршрутизацией. [13]

Физическое и маршрутное разнообразие полезно. Оно не обеспечивает автоматически разнообразие конфигураций.

Если множество точек потребляют один и тот же опасный ввод, каждая точка может быть физически здоровой и всё равно возвращать непригодные ответы или сбоить одинаково. Добавление anycast-площадок может увеличить разнообразие обслуживания, сохранив одну зависимость от плоскости управления. Платформа может пережить потерю дата-центра, но оставаться уязвимой для глобальной конфигурационной ошибки. Эти два класса отказов требуют разных механизмов контроля.

Поэтому подсчёт серверов — слабое заявление об отказоустойчивости. Оператору нужно определить, какие элементы независимы:

  • электропитание и площадки;
  • физические сетевые пути;
  • маршрутные анонсы;
  • бинарные файлы ПО;
  • входные данные конфигурации;
  • системы валидации;
  • контроллеры развёртывания;
  • учётные данные управления;
  • мониторинг;
  • каналы отката;
  • организационные согласования.

Два сервера имён в разных странах могут использовать общий источник конфигурации. Два DNS-провайдера могут делить одного регистратора или скрытый первичный сервер. Два пути CDN могут полагаться на одну автоматизацию сертификатов или origin. Два шага согласования могут использовать один и тот же анализатор и поэтому принимать одно и то же опасное значение.

Публичное заявление о причине инцидента указывает на эту проблему общего контроля. Akamai не сообщила, что отказала отдельная обслуживающая площадка. Она сообщила, что обновление программной конфигурации вызвало ошибку в общем компоненте. Сервис восстановился после отката. Эта последовательность делает канал обновления, а не количество серверов, центральным объектом подотчётности. [1]

Адекватная модель контроля должна рассматривать распространение конфигурации как самостоятельный сетевой протокол. У него есть производители, валидаторы, версии, получатели, время распространения, подтверждения и откат. Его нужно тестировать на частичные сбои, устаревшее состояние, несовместимые версии и опасные глобальные значения. Зрелая платформа должна знать, какие получатели приняли изменение, какие отклонили его, какую версию обслуживают и что наблюдают пользователи в каждом домене отказа.

Поэтому заявления об избыточности следует формулировать как гипотезы об отказах, а не как инвентаризацию. «У нас тысячи серверов имён» отвечает на вопрос о ёмкости и географии. «Новый ввод не может затронуть каждый обслуживающий домен отказа раньше, чем независимая канареечная проверка докажет его безопасность» отвечает на вопрос о радиусе поражения конфигурации. Событие июля 2021 года делает второе заявление тем, которое требует доказательств.

Обновление конфигурации — это делегированное осуществление сетевой власти

Фраза «обновление программной конфигурации» звучит менее весомо, чем «релиз ПО». Конфигурацию часто считают данными: её проще менять, она менее рискованна, чем код, и подходит для быстрого развёртывания. В распределённой сети такое различие может вводить в заблуждение.

Конфигурация выбирает поведение. Она может активировать путь в коде, изменить маршрутизацию, изменить данные записей, расширить совпадение, убрать предохранитель или направить трафик в другой сервис. Конфигурация с глобальным охватом может осуществлять больше операционной власти, чем изменение кода, ограниченное одним канареечным сервером.

Поэтому правильная единица риска — не тип файла, а эффективная власть.

Конвейер изменений должен ответить на четыре вопроса до распространения.

Первый:что означает обновление после разбора и нормализации?Синтаксическая корректность — не семантическая безопасность. Значение может быть правильно сформированным и при этом выбирать невозможное, опасное или глобально противоречивое состояние.

Второй:на каких пользователей, зоны, сервисы и точки оно может повлиять?Масштаб следует вычислять из скомпилированного результата, а не по названию заявки на изменение.

Третий:какое независимое условие может его остановить?Валидатор должен сбоить иначе, чем защищаемый компонент. Если оба используют одну схему, один анализатор или одну сгенерированную модель, общий дефект может обойти оба.

Четвёртый:как восстановить предыдущее состояние, если обычный контур управления нарушен?Откату нужны заведомо корректная версия, полномочия на распространение, достижимая плоскость управления и доказательства того, что получатели действительно вернулись к предыдущему состоянию.

Текущая документация Akamai Edge DNS даёт примеры полезных артефактов контроля. Изменения первичной зоны накапливаются в списке изменений. Оператор может просмотреть добавления и удаления, активировать зону или отменить изменения. API перечисляет версии зон, показывает различия, сообщает статус распространения и позволяет реактивировать более раннюю версию. [7][8]

Эти документы — текущие справочники по продукту. Публичное заявление об инциденте не говорит, что компонент Secure Edge CDN 2021 года использовал именно этот процесс. Было бы неточно утверждать, что документированный контроль списка изменений отказал. Документация всё же ценна: она показывает, какие доказательства могут существовать в управляемой DNS-платформе: версия, различия, решение рецензента, событие активации, запись распространения и действие по реактивации.

Для публичной подотчётности наиболее полезные посмертные доказательства сопоставили бы фактическое обновление 2021 года с эквивалентными артефактами:

  • цель и согласованный масштаб;
  • нормализованная конфигурация;
  • тесты, выполненные до активации;
  • первая канареечная совокупность;
  • последовательность и процент получателей;
  • сработавшие оповещения;
  • решение и полномочия остановить распространение;
  • выбранная заведомо корректная версия;
  • подтверждения от получателей после отката;
  • внешние тесты, подтверждающие ответы DNS и доступность приложений.

Публикация каждого приватного значения конфигурации могла бы создать риски безопасности или для клиентов. Подотчётность этого не требует. Она требует достаточно структурированных доказательств, чтобы установить: компания понимает класс отказа, исправление устраняет его, и тот же ввод не сможет снова получить тот же неконтролируемый охват.

Статья об архитектуре Akamai формирует вопросы, а не вердикт

До инцидента исследователи Akamai опубликовали статью о том, как DNS-система компании обрабатывает большой объём авторитативных запросов. В статье рассматриваются 24 anycast-облака, мониторинг системы и механизмы обработки устаревших или опасных входных данных. Одна из схем размещала в каждом облаке серверы имён с задержанным вводом. Эти серверы получали входные данные с искусственной задержкой и могли продолжать отвечать старыми данными, пока операторы реагировали на сбой, вызванный вводом. [9]

Эта архитектура напрямую относится к подотчётности конфигурации, поскольку описывает осознанное разделение между свежим вводом и продолжением обслуживания. Она показывает, что инженеры Akamai рассматривали сбой, вызванный вводом, как класс проблем. Она также даёт конкретные термины для вопроса о том, что произошло в 2021 году.

Она не даёт ответа.

Сообщение оператора об инциденте называет DNS-компонент Secure Edge CDN. Статья описывает архитектуру DNS Akamai на системном уровне. Открытые источники в этом пакете не доказывают, что затронутый компонент использовал схему задержанного ввода из статьи, что вызвавшее обновление было одним из задержанных вводов, что схема была включена для затронутого клиентского пути или что она отказала.

Превращать статью в обвинение — распространённая аналитическая ошибка: считать опубликованную архитектуру полной описью каждого производственного пути. В крупных сетях есть поколения систем, компоненты, специфичные для продуктов, миграции, исключения и границы управления. Статья может точно описать один механизм, не гарантируя, что каждый сервис использует его.

Защитимое использование — контрфактическое и доказательное.

Если независимый путь с задержкой существовал для затронутого компонента, какой ввод он обслуживал во время инцидента? Если его не было, какое свойство делало компонент неподходящим? Если обновление меняло поведение кода, а не данные ответов, могла ли более старая конфигурация всё равно вызывать ту же ошибку? Если аварийный режим требовал активации операторами, успел ли мониторинг вовремя определить условие? Если пользователи попадали в разные anycast-облака, оставалось ли состояние аварийного режима согласованным?

Эти вопросы важны, потому что один лишь откат даёт только одно доказательство: при удалении новой конфигурации сервис немедленно восстановился. Он не показывает, сдерживал ли независимый путь часть сбоя, почему исходная валидация пропустила ошибку и вызвала бы другая опасная конфигурация тот же общий отказ.

Статья также показывает, почему доказательства нужно связывать с классами отказов. Оператор может сказать, что у него избыточные серверы имён, anycast и задержанный ввод. Клиенту нужно знать, какие отказы покрывает каждый механизм. Потеря площадки, изоляция BGP, устаревшие данные, повреждённые данные, ошибки ПО и компрометация плоскости управления — это разные вещи. Механизм, спроектированный для одного, может не иметь отношения к другому.

Поэтому запись о подотчётности за июль 2021 года должна избегать обеих крайностей. Нельзя игнорировать опубликованную инженерную работу Akamai по отказоустойчивости, но и нельзя предполагать, что она гарантировала этот компонент. Разрыв между документированной защитой и нераскрытым путём события сам по себе является запросом на точные доказательства.

Скорость отката важна, но доказательства отката важнее

Откат Akamai восстановил сервис примерно за час. Это операционно значимо. Когда общий компонент влияет на доступность клиентов, быстрое возвращение к заведомо корректному состоянию ограничивает ущерб и снижает соблазн бесконечно отлаживать в проде. [1]

Откат — не одно действие. Это цепочка утверждений.

Первое: оператор определил новое обновление как вероятную причину. Второе: предыдущая версия была доступна и безопасна. Третье: команда отката достигла затронутых получателей. Четвёртое: получатели приняли её. Пятое: авторитативные ответы восстановились. Шестое: приложения стали доступны из внешних сетей. У каждого утверждения есть собственные доказательства.

Интерфейс управления версиями может доказать, какой объект был выбран. Телеметрия распространения может доказать, какие экземпляры подтвердили его. DNS-пробы могут доказать, что ответы вернулись из выбранных точек наблюдения. Тесты приложений могут доказать, что ответы привели к рабочим соединениям. Сообщения клиентов могут выявить остаточные пути, которые пропустил внутренний мониторинг.

Это слоистое доказательство важно в anycast-системах. Успешный тест из одной точки может достичь одного anycast-экземпляра, тогда как пользователи в другом месте попадают в другой. Предупреждение о мониторинге из RFC 4786 применимо: сервис может выглядеть здоровым или нездоровым в зависимости от пути маршрутизации наблюдателя. [13]

Поэтому оператор должен определить завершение отката до инцидента:

  • состояние управления откачено;
  • получатели конфигурации сошлись на предыдущей версии;
  • успешность авторитативных ответов восстановлена во всех доменах отказа;
  • коды ошибок и тайм-ауты вернулись к базовому уровню;
  • доступность приложений восстановлена для репрезентативных клиентских путей;
  • коммуникация о статусе обновлена с оставшейся неопределённостью.

Сообщение об инциденте говорит, что после отката сервисы вернулись к нормальной работе. Оно не раскрывает лежащие в основе измерения. Это приемлемо как первоначальное заявление, но зрелая запись о подотчётности должна сохранять их для последующего аудита и заверений клиентов.

Откату также нужна независимость. Если для отмены требуются те же контроллер, учётные данные, сетевой путь и ПО, что и для развёртывания, сбой может отключить собственное восстановление. Инфраструктура с большим радиусом поражения должна сохранять минимальный канал восстановления, способный активировать заведомо корректное состояние без зависимости от нездорового компонента.

Открытый пакет не показывает, реализовался ли этот риск в Akamai. Он определяет вопрос контроля. Восстановление в течение часа говорит о том, что рабочий путь отмены существовал. Долговременная уверенность потребовала бы показать, что этот путь протестирован на потерю обычной плоскости управления или обслуживания, а не только на ошибку, оставляющую контрольный доступ нетронутым.

Поведение резолверов изменило пользовательский опыт, но не первопричину

Рекурсивные резолверы находятся между пользователями и авторитативными серверами. Их кэши могут сохранять ответы до истечения времени жизни (TTL). Их алгоритмы повторов выбирают между авторитативными серверами. Их обработка SERVFAIL, тайм-аутов и устаревших данных влияет на то, как быстро сбой становится видимым и как долго сохраняется.

RFC 2308 определяет поведение негативного кэширования. RFC 4697 документирует вредные модели повторов и нагрузку, которая возникает, когда авторитативные серверы недоступны или возвращают ошибку сервера. RFC 8767 разрешает резолверу в ограниченных условиях отдавать устаревшие данные, когда он не может обновить ответ. RFC 9520, опубликованный после инцидента Akamai, уточняет негативное кэширование для сбоев разрешения, включая SERVFAIL. [14][18][19][20]

Эти механизмы объясняют, почему пользователи могут по-разному переживать один и тот же сбой авторитативной системы.

Резолвер с ещё действующим кэшированным ответом может продолжать направлять трафик. Резолвер, чей ответ истёк, нуждается в свежем авторитативном ответе и может отказать немедленно. Резолвер, настроенный отдавать устаревшие данные, может сохранить доступность, если старый ответ безопасен и условия политики выполнены. Другой может вернуть SERVFAIL. Приложения тоже кэшируют по-разному, а некоторые повторяют через другой резолвер.

Эта вариативность не переносит первопричину с Akamai на резолверы. Заявление Akamai говорит, что её обновление вызвало ошибку в DNS-компоненте. Политика резолверов может смягчить или усилить видимый ущерб; она не создаёт корректные авторитативные данные, когда базовый компонент не может их предоставить.

У отдачи устаревших данных (serve-stale) есть пределы. Старый адрес может быть опасен, если сервис переехал, ответ изменился из-за мер безопасности либо сертификат и origin больше не совпадают. Резолвер может вообще не иметь ответа в кэше. TTL могут быть короткими. Состояния негативного и позитивного кэша различаются. Операторам приходится балансировать между непрерывностью, свежестью и корректностью. RFC 8767 описывает этот баланс, а не гарантирует прозрачный переход на резервный путь. [14]

Из этого следует слоистая модель ответственности.

Akamai отвечает за общий авторитативный компонент и процесс обновлений. Операторы резолверов отвечают за соответствующее стандартам наблюдаемое поведение при сбоях и за объяснение компромисса между непрерывностью и свежестью. Клиенты отвечают за выбор TTL и архитектуры, который могут контролировать. От пользователей не требуется практически диагностировать, какой резолвер или авторитативный компонент отказал, прежде чем ожидать, что крупный сервис будет работать.

Поэтому доказательства нужно разделять по слоям. Успешность авторитативных запросов, коды ответов рекурсивных резолверов, состояние кэша и успешность соединений с приложениями — это разные измерения. Без этого разделения отчёт о статусе может утверждать, что DNS здоров, потому что один резолвер отвечает из кэша, тогда как свежие авторитативные запросы сбоят, или что авторитативный сервис всё ещё лежит, потому что один рекурсивный кэш сохраняет ошибку.

Клиентская избыточность должна быть независимой вплоть до origin

ThousandEyes сообщила, что влияние среди клиентов Akamai различалось. Организации, полагавшиеся на затронутый путь DNS и CDN, могли оставаться недоступными, тогда как некоторые мульти-CDN схемы сохраняли больше сервиса. В более позднем обзоре в качестве примера приводится Amazon, которого мульти-CDN подход в основном уберёг. [2][4]

Урок не сводится к «купите два CDN».

Второй провайдер полезен только в том случае, если пользователи могут его обнаружить и достичь. Делегирование авторитативного DNS должно уметь вернуть альтернативу. Подпись DNSSEC и распространение ключей должны оставаться валидными. Сертификаты должны покрывать те же имена. Альтернативный CDN должен достигать доступного origin и иметь достаточную ёмкость. Состояние приложения, аутентификация, антифрод-контроль и согласованность данных должны работать через оба пути. Операторы должны знать, когда и как переключать трафик.

RFC 8901 описывает мультипровайдерные модели DNSSEC и координацию, необходимую для того, чтобы валидирующие резолверы могли проверять ответы разных провайдеров. Документ показывает, что разнообразие создаёт собственную плоскость управления. Ключи, записи DNSKEY, записи DS, алгоритмы подписи и тайминги должны оставаться согласованными. Некорректное мультипровайдерное развёртывание может создать сбои, которых у одного провайдера не было бы. [16]

Эта сложность не отменяет ценность разнообразия. Она означает, что отказоустойчивость нужно проектировать и тестировать, а не покупать как ярлык.

Клиент может оценить независимость по нескольким направлениям:

  • разные авторитативные провайдеры и обслуживающие сети;
  • регистратор и процесс делегирования, не зависящие от отказавшего провайдера;
  • совместимые процессы DNSSEC и управления ключами;
  • конфигурации CDN, генерируемые из контролируемых сопоставимых исходных данных;
  • сертификаты и политика безопасности, доступные на обоих путях;
  • связность origin, не разделяющая одну и ту же единичную зависимость;
  • достаточная ёмкость и коммерческие полномочия;
  • внешний мониторинг через несколько резолверов и сетей;
  • отрепетированный процесс принятия решений для переключения и возврата.

Организация также должна знать, что остаётся общим. Оба провайдера могут получать записи из одного конвейера автоматизации. Оба могут тянуть данные с одного origin. Оба могут использовать одного поставщика удостоверений для доступа операторов. Одно ошибочное обновление источника может распространиться на двух вендоров и разрушить кажущееся разнообразие.

Клиентам следует сохранять тестовые доказательства того, что альтернативный путь работает, когда основной DNS или CDN недоступен, а не только когда оба здоровы. Это включает имитацию отказов, тесты делегирования DNS, наблюдение за поведением кэша, проверки сертификатов и транзакции приложений.

При этом клиентская архитектура не снимает ответственность с Akamai. Провайдер платформы, принимающий ответственность за общий DNS-компонент, контролирует риск, который клиенты не могут проверить или устранить. Слоистая ответственность означает, что клиенты должны избегать предотвратимой концентрации, а провайдеры — ограничивать власть общих изменений. Это не значит, что каждый клиент обязан строить вторую глобальную платформу, чтобы компенсировать нераскрытую ошибку провайдера.

Наблюдаемость должна связывать конфигурацию, DNS и состояние приложений

ThousandEyes смогла показать, что сбои приложений совпадали с проблемами разрешения DNS. Akamai смогла определить конфигурационное обновление и отменить его. Полная запись об инциденте должна соединять эти взгляды.

Важны как минимум пять слоёв доказательств.

Слой измененийфиксирует запрошенную конфигурацию, нормализованное представление, различия, рецензента, время активации, масштаб распространения и предыдущую версию.

Слой обслуживанияфиксирует, какие экземпляры серверов имён или узлы компонента приняли обновление, какую версию обслуживает каждый, их состояние и коды ответов.

Слой DNSфиксирует успешность авторитативных запросов, задержку, SERVFAIL, тайм-ауты и согласованность ответов по именам, типам записей, anycast-путям и сетям.

Слой резолверовфиксирует состояние кэша, поведение отдачи устаревших данных, повторы и эффекты негативного кэширования.

Слой приложенийфиксирует, привели ли возвращённые ответы к успешным транзакциям TLS и приложений.

Если эти слои используют несвязанные идентификаторы и часы, анализ первопричины замедляется, а подотчётность слабеет. Идентификатор изменения должен прослеживаться до версии компонента, обслуживаемой совокупности, результата пробы и таймлайна инцидента. Система должна сохранять эту корреляцию даже после отката, когда живое состояние больше не воспроизводит сбой.

Внешние измерения остаются необходимыми. Anycast может направлять внутренние пробы иначе, чем пользователей. Домены клиентов могут задействовать пути кода, которые не проходит общее имя здоровья. Поведение рекурсивных резолверов различается. Мониторинг оператора должен включать тесты снаружи внутрь с использованием репрезентативных резолверов, сетей, имён и транзакций приложений.

Публичная запись иллюстрирует пользу такого подхода. Время обновления Akamai в 15:45 и зафиксированные ThousandEyes сбои в 15:38 не совпадают, но вместе они обнажают границу, которую стоит изучать. Началось ли распространение до зафиксированного триггера? Отражала ли временная метка измерения более ранний симптом? Различались ли часы или точность публикации? Пакет источников не отвечает. Коррелированная внутренняя запись могла бы.

Коммуникация должна сохранять те же слоевые различия. «Сеть здорова» — слишком широко. Полезное сообщение о статусе может сказать, что авторитативные ответы восстанавливаются, откат распространяется, доступность приложений улучшается, а остаточные кэши резолверов могут продолжать показывать сбои. Тогда клиенты смогут сравнить собственные свидетельства с данными оператора.

Заявление Akamai было кратким и включало триггер, откат, продолжительность, границу «не кибератака» и более позднюю поправку о масштабе. Это сильные начальные факты. Пробел в подотчётности не в том, что компания ничего не сказала. Он в том, что публичная запись не содержит технических доказательств, необходимых для оценки валидации, локализации развёртывания и долговременного исправления.

Ответственность следует за контролем, возможностями и доказательствами

Ответственность иногда сводят к вине: Akamai изменила конфигурацию, значит, Akamai ответственна. Это направленно верно, но аналитически неполно. Полезное распределение определяет, какой актор контролировал какой риск и какие доказательства каждый должен сохранять.

Инженерия платформы и сети Akamai

Akamai контролировала компонент, получивший обновление, интерфейс ПО и конфигурации, валидацию, топологию развёртывания, мониторинг, откат и последующее исправление. Её обязанность была пропорциональна охвату компонента. Если одно изменение могло затронуть множество клиентских сайтов, конвейеру нужны механизмы контроля, рассчитанные на этот общий радиус поражения.

Соответствующие доказательства включают нормализованные различия, тесты, канареечные результаты, подтверждения развёртывания, метрики здоровья, журналы отката и результаты регрессионных тестов. Публичное заявление устанавливает общую причину и восстановление, но не эти артефакты. [1]

Владельцы продуктов и изменений Akamai

Владельцы продуктов контролировали, как представлены срочность обновления, влияние на клиентов и согласование. Они определяли, считать ли изменение рутинным, может ли исключение миновать промежуточную среду и какие обязательства по уровню сервиса применяются. Они также контролировали, получают ли клиенты достаточно информации об архитектуре и исправлениях для оценки собственных планов непрерывности.

Эта роль не означает, что нужно винить менеджера. Она признаёт, что ограничения радиуса поражения и требования к доказательствам — это продуктовые решения, а не только программные.

Клиенты Akamai

Клиенты контролировали часть разнообразия провайдеров, делегирования DNS, TTL, сертификатов, связности origin, переносимости приложений и тестов переключения. Их обязанность зависела от критичности сервиса и практических ресурсов. Банк, авиакомпания или государственная служба могут обоснованно требовать более сильных независимых путей, чем сайт с низким влиянием.

Клиенты не контролировали внутреннее обновление Akamai. Отказ от покупки второго провайдера не переносит первопричину. Он меняет подверженность клиента и его возможности восстановления.

Операторы рекурсивных резолверов

Операторы резолверов контролировали повторы, кэширование сбоев, политику устаревших данных и мониторинг. Их реализации могли менять продолжительность и видимые симптомы. Они должны следовать действующим стандартам, избегать вредного усиления повторов и раскрывать достаточно телеметрии, чтобы отличать отказ авторитативной системы от локального состояния кэша. [14][18][19][20]

Они не могли безопасно создавать свежие авторитативные данные. Отдача устаревших данных — ограниченная мера, а не замена здорового авторитативного источника.

Регистраторы и вторичные DNS-провайдеры

Там, где клиенты их использовали, регистраторы и вторичные провайдеры контролировали делегирование и альтернативные пути обслуживания. Мультипровайдерная работа требовала согласованных записей, координации DNSSEC, полномочий на изменения и протестированного переключения. [12][16]

Организации стандартизации и измерений

IETF определяла поведение протоколов и операционные рекомендации. ThousandEyes предоставила независимые измерения. Ни та, ни другая не управляла компонентом Akamai. Их роль — делать механизмы отказов и публичные доказательства более читаемыми.

Эта карта предотвращает две ошибки. Первая — полная концентрация вины на последнем человеке, активировавшем изменение. Вторая — настолько широкое распыление, что ни у одного актора нет конкретной обязанности. Практический контроль задаёт каждой обязанности границу.

Заявление об исправлении нуждается в воспроизводимом тесте отказа

Akamai сообщила, что пересматривает процесс обновления ПО, чтобы предотвратить подобные сбои. [1]

Это обязательство разумно, но «пересмотрели процесс» — не технический результат. Долговременный вопрос: может ли организация воспроизвести класс отказа и показать, что независимые механизмы контроля теперь его сдерживают?

Сильная программа исправления начиналась бы с точной модели инцидента:

  • минимальная конфигурация, вызывающая ошибку;
  • компонент и версия, которые её интерпретируют;
  • подверженная обслуживаемая совокупность;
  • наблюдаемый сбой DNS;
  • состояние отката;
  • сигналы мониторинга, которые его выявляют.

Следующий шаг — негативный тест. Подайте класс триггера в предпроизводственную среду и подтвердите, что новая валидация отклоняет его или что канареечная проверка сбоит, не достигая более широкого парка. Тест должен утверждать не только то, что конкретный ввод заблокирован, но и что семантически эквивалентные вводы и искажённые варианты не могут обойти контроль.

Третий шаг — независимость. Если исправление добавляет ещё один валидатор, покажите, что он использует другое представление, другой анализатор или другой источник истины, чем сбойный компонент. Если добавляется канареечная проверка, докажите, что канареечный узел получает ту же скомпилированную конфигурацию, что и производство, и что продвижение автоматически останавливается при сбое DNS или приложения.

Четвёртый шаг — локализация по доменам отказа. Покажите, что опасное обновление не может достичь каждого авторитативного обслуживающего домена до оценки доказательств. Домены могут задаваться anycast-облаком, когортой ПО, регионом, группой клиентов или сервисным компонентом, но должны быть операционно значимыми.

Пятый шаг — откат в деградировавших условиях. Отключите или изолируйте часть обычного контура управления и покажите, что операторы всё равно могут реактивировать заведомо корректное состояние. Подтвердите конвергенцию из нескольких внешних сетей.

Шестой шаг — видимый для клиентов результат. Опубликуйте достаточно информации, чтобы клиенты могли сопоставить исправление со своей зависимостью. Это может включать класс отказа, механизм локализации, охват тестов и дату без раскрытия эксплуатируемых деталей.

Седьмой шаг — мониторинг повторений. Отслеживайте отклонённые конфигурации, остановки канареечных развёртываний, тесты отката и связанные с конфигурацией ошибки DNS с течением времени. Исправление, которое сработало один раз и тихо деградирует, не является устойчивым.

Текущая документация Akamai описывает списки изменений, различия, версии, статус распространения и реактивацию. Это полезные строительные блоки для доказательств. Статья не может утверждать, что они были добавлены из-за инцидента 2021 года или что они применимы к тому же компоненту. Можно сказать, что эквивалентные артефакты — это стандарт, по которому следует оценивать заявление об исправлении. [7][8]

Чего публичная запись доказать не может

Набор источников достаточно силён, чтобы установить реальный случай из области сетевой инфраструктуры, и достаточно слаб, чтобы требовать сдержанности.

Он не может доказать точное значение конфигурации. Он не может определить ошибку. Он не может показать, было ли обновление глобальным при активации или стало широким из-за распространения. Он не может назвать число затронутых клиентов. Он не может установить, какие anycast-облака или процессы серверов имён отказали. Он не может показать, имели ли отношение серверы имён с задержанным вводом из системной статьи Akamai. Он не может назвать рецензента, согласующего или конкретного оператора. Он не может количественно оценить потери или назначить договорные убытки.

Запись также не может доказать, что каждый клиент, использующий несколько провайдеров, остался доступен, или что каждый однопровайдерный клиент отказал. ThousandEyes даёт примеры и агрегированные наблюдения со своей измерительной позиции, а не всеобщую перепись. [2][4]

RFC задают протокольный и операционный контекст. Они не создают фактический вывод о том, что Akamai нарушила стандарт. RFC 9199 и RFC 9520 опубликованы после инцидента, и их нельзя представлять как обязательства, регулировавшие обновление 2021 года. [15][20]

Отсутствие этих фактов не стирает подотчётность. Оно определяет границу между подтверждённым выводом и предположением. Подтверждённый вывод: общее конфигурационное обновление вызвало ошибку в DNS-компоненте, привело к значительным сбоям доступности и потребовало отката. Обязанность по доказательствам — показать, как теперь ограничена власть конфигурации и как проверяется восстановление.

Повторно используемый тест подотчётности доступности

Инцидент поддерживает практический тест для любого провайдера, работающего с авторитативным DNS, управлением трафиком CDN, управлением трафиком или другой общей сетевой плоскостью управления.

1. Назовите незаменимый контур контроля.
Определите, зависят ли пользователи от авторитативного DNS, BGP, anycast, политики маршрутизации, сертификатов, выбора origin или другого механизма. Не называйте событие общим сбоем.

2. Отделите намеренное изменение от фактической власти.
Зафиксируйте, что изменение должно было сделать, и рассчитайте, какие сервисы, пользователи и домены отказа оно реально могло затронуть.

3. Валидируйте смысл независимо.
Используйте механизмы, которые сравнивают нормализованное поведение, разрешённый масштаб и защищённую инфраструктуру, а не две копии одного предположения анализатора.

4. Разворачивайте по реальным доменам отказа.
Прогоняйте канареечную проверку на точно скомпилированном вводе и автоматически останавливайте распространение, когда деградируют данные DNS, маршрутизации или приложений.

5. Сохраняйте независимый заведомо корректный путь.
Держите обслуживающий или управляющий путь, который не потребляет новый ввод немедленно и может восстановить предыдущее состояние.

6. Измеряйте извне.
Проверяйте авторитативные ответы, результаты резолверов и транзакции приложений из нескольких сетей. Здоровье anycast нельзя выводить из одной точки.

7. Доказывайте конвергенцию отката.
Покажите, какие получатели вернулись к предыдущей версии, какие ответы вернулись и какие приложения восстановились. Сообщение об успехе плоскости управления недостаточно.

8. Тестируйте альтернативы клиентов до конца.
Разнообразие провайдеров должно включать делегирование, DNSSEC, сертификаты, origin, ёмкость, состояние и операционные полномочия.

9. Публикуйте исправленный масштаб.
Когда расследование сужает или меняет первоначальное заявление, сохраняйте поправку на видном месте и указывайте, какие выводы изменились.

10. Связывайте исправление с воспроизведённым отказом.
Покажите, что исходный класс и семантические варианты отклоняются, локализуются или восстанавливаются без широкого влияния на пользователей.

Этот тест распределяет ответственность, не притворяясь, что у всех акторов равные возможности. Провайдер несёт основное бремя за общую платформу. Клиенты и резолверы несут ограниченные обязанности за механизмы, которыми действительно владеют. Открытые данные позволяют оценить эти обязанности.

Заключение

Akamai быстро восстановила сервис 22 июля 2021 года. Её публичное заявление назвало конфигурационное обновление, вызванную ошибку, откат, продолжительность до часа и границу «не кибератака». Поправка на следующий день сузила затронутую систему до DNS-компонента Secure Edge CDN. ThousandEyes предоставила независимые доказательства того, что сбой проявился как сбои доступности DNS и приложений на многих сайтах и у многих пользователей. [1][2]

Более глубокий урок не в том, что распределённый DNS отказал, несмотря на множество серверов. Он в том, что распределение обслуживания и независимость конфигурации — разные свойства. Anycast может разнести сервис по сетям и континентам, тогда как общий входной параметр управления сохраняет общий режим отказа. Кэши резолверов и разнообразие клиентов могут смягчить эффект, но они не заменяют безопасный конвейер авторитативных обновлений.

Риск следует за властью, которую может осуществлять изменение. Ответственность следует за тем, кто может ограничить эту власть, остановить её, наблюдать её последствия и доказать исправление. Для платформы, которая находится до соединения с приложением, это обязанности сетевой инфраструктуры, а не просто предпочтения в разработке ПО.

Источники

  1. https://www.akamai.com/blog/news/akamai-summarizes-service-disruption-resolved
  2. https://www.thousandeyes.com/blog/akamai-edge-dns-outage-analysis
  3. https://www.thousandeyes.com/blog/internet-report-episode-43
  4. https://www.thousandeyes.com/blog/seven-outages-shook-up-2021
  5. https://techdocs.akamai.com/edge-dns/docs/welcome-edge-dns
  6. https://techdocs.akamai.com/edge-dns/docs/features
  7. https://techdocs.akamai.com/edge-dns/docs/config-prim-zones
  8. https://techdocs.akamai.com/edge-dns/reference/api-summary
  9. https://www.akamai.com/site/en/documents/research-paper/akamai-dns-providing-authoritative-answers-to-the-worlds-queries.pdf
  10. https://www.rfc-editor.org/rfc/rfc1034.html
  11. https://www.rfc-editor.org/rfc/rfc1035.html
  12. https://www.rfc-editor.org/rfc/rfc2182.html
  13. https://www.rfc-editor.org/rfc/rfc4786.html
  14. https://www.rfc-editor.org/rfc/rfc8767.html
  15. https://www.rfc-editor.org/rfc/rfc9199.html
  16. https://www.rfc-editor.org/rfc/rfc8901.html
  17. https://www.rfc-editor.org/rfc/rfc8499.html
  18. https://www.rfc-editor.org/rfc/rfc4697.html
  19. https://www.rfc-editor.org/rfc/rfc2308.html
  20. https://www.rfc-editor.org/rfc/rfc9520.html