Insights / Технические материалы

Защищённая операционная панель на Cloudflare Pages и D1

Анонимизированная схема, которая закрывает вход с помощью Cloudflare Access и читает агрегаты из D1 через Pages Functions. Отдельно показаны подтверждённые production-развёртывание, авторизованный интерфейс и использование индекса, а также непроверенные области.

  • Cloudflare Pages
  • Cloudflare D1
  • Security
Защищённая операционная панель на Cloudflare Pages и D1
Содержание
  1. Проверка одной агрегации через интерфейс и API
  2. Защитите и страницу, и API
  3. Отделяйте запись от агрегирования только для чтения
  4. Проверяйте индексы D1 по запросу агрегации
  5. Проверяйте аутентификацию и отображение после выпуска

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

Проверка одной агрегации через интерфейс и API

Начните с подсчёта за выбранный период и сравните экран с известными тестовыми данными. Отделяйте пустой период от ошибки чтения и проверяйте прямой доступ к API до и после входа. Расширяйте агрегации после проверки плана запроса для этого фильтра.

Cloudflare D1:Проверка индексов по условиям запроса

Защитите и страницу, и API

Скрыть статическую страницу Cloudflare Pages недостаточно, если её API данных можно вызвать напрямую. Включите интерфейс и API в область защиты Cloudflare Access, чтобы данные могли читать только операторы. В процедуре проверки тестируйте страницу и API отдельно до и после аутентификации. В этом случае в production подтвердили защиту входа на страницу и отображение данных в интерфейсе после входа по выделенной учётной записи. Доступные записи не подтверждают прямой запрос без аутентификации к API; это остаётся отдельным пунктом приёмки. Не помещайте секреты аутентификации в код браузера.

Защитите и страницу, и API Прямой неаутентифицированный доступ к API не проверялся. Проверка охватывала одну рабочую среду.
  1. Аутентифицированная панель После входа через Access оператор видит защищённые агрегированные данные.
  2. API только для чтения Читает D1 внутри той же границы. Отказ прямому неаутентифицированному запросу к URL API не проверялся.

Отделяйте запись от агрегирования только для чтения

GET-эндпоинт Pages Functions запрашивает D1 и объединяет почасовые счётчики, последнее состояние обработки и режим выполнения в один ответ. Ограничьте сам API панели чтением, а не скрытием кнопки в интерфейсе. Определите период, часовой пояс и смысл подтверждённых и ожидающих состояний, чтобы не складывать разные виды счётчиков. Отсутствующие или неразрешённые значения показывайте отдельно, а не как успешные действия или ноль.

Проверяйте индексы D1 по запросу агрегации

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

Проверяйте аутентификацию и отображение после выпуска

Развёртывайте Pages в production через интеграцию с GitHub, затем проверьте успешный выпуск нужного коммита и активность пользовательского домена. После этого проверьте защиту страницы до входа и отображение данных панели после аутентификации. Успешные CI или развёртывание сами по себе не доказывают, что авторизованный оператор видит production-интерфейс.

Этот анонимизированный случай подтвердил область доступа, production-экран и использование индекса запросом агрегации D1 в одной операционной среде. Разделение прав между организациями, нагрузка при росте числа пользователей и тесты на проникновение для всех настроек аутентификации не проверялись. Об общей архитектуре сайта Pages см. Архитектуру сайта на Cloudflare Pages.