← Обзор / ai-search / configuration / retrieval / public-endpoint
Cloudflare Access
A публичная конечная точка намеренно не требует аутентификации. Любой, кто знает URL адрес, может обращаться к вашему проиндексированному содержимому.
Разместите пользовательский домен перед публичной конечной точкой и защитите её с помощью Cloudflare Access. После этого пользователи проходят аутентификацию у вашего провайдера идентификации, прежде чем запрос попадёт в AI Search. Так публичная база знаний становится внутренней без необходимости писать собственный уровень аутентификации.
Как это работает
Пользовательский домен представляет собой имя хоста в зоне, которой вы владеете. Когда CNAME запись для этого имени хоста имеет значение Proxied, запросы проходят через вашу собственную зону, прежде чем попасть в AI Search:
flowchart LR
A[Client] --> B["Your zone<br/>Access, WAF, Bots"]
B --> C["AI Search<br/>public endpoint"]
C --> D[Your indexed content]
Access работает в вашей зоне, поэтому обрабатывает каждый запрос первым. Запросы, которые не проходят политику, никогда не доходят до AI Search. Для этого AI Search не требует никакой настройки и применяет собственную ограничения скорости запросов после этого.
Эта маршрутизация называется orange-to-orange. Для этого требуется CNAME запись, чтобы она проксировалась. DNS only запись полностью обходит вашу зону, и Access вообще не запускается.
Предварительные требования
- A пользовательский домен на экземпляре или пространстве имён, которые нужно защитить, с Proxied
CNAMEзапись. - В вашем аккаунте включён Cloudflare Access.
- Одна поставщик удостоверений подключённый к Cloudflare Access, либо одноразовый PIN-код Cloudflare.
1. Отключите имя хоста по умолчанию
Access защищает только ваш пользовательский домен. Значение по умолчанию <PUBLIC_ENDPOINT_ID>.search.ai.cloudflare.com имя хоста не проходит через вашу зону, поэтому оно продолжает отвечать на неаутентифицированные запросы и сводит на нет политику, которую вы собираетесь написать.
Задайте default_domain_enabled к false перед созданием приложения Access.
curl -X PUT "https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/ai-search/namespaces/default/instances/<INSTANCE_ID>" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"public_endpoint_params": {
"enabled": true,
"custom_domains": ["access.search.example.com"],
"default_domain_enabled": false
}
}'Теперь имя хоста по умолчанию возвращает 404 с ошибкой 60018.
2. Создать приложение Access
- В Панель управления Cloudflare ↗, перейдите в Zero Trust > Контроль доступа > Приложения.
- Выберите Добавьте приложение > Self-hosted.
- Назовите приложение, например
AI Search. - Добавьте публичное имя хоста вашего пользовательского домена, например
access.search.example.com. - Сохраните приложение.
Полный набор вариантов см. в Публикация локально размещённого приложения.
3. Добавьте политики
Приложение без политики отклоняет все запросы. Добавьте хотя бы одну Политика Allow который описывает, кто может выполнять запросы к вашему содержимому.
| Действие | Тип правила | Селектор | Значение |
|---|---|---|---|
| Allow | Включить | Адреса электронной почты, оканчивающиеся на | @example.com |
Используйте адрес электронной почты, страну, диапазон IP-адресов или группу провайдера идентификации селекторы которые соответствуют вашей организации. Больше примеров см. в Распространённые политики для дополнительных примеров.
4. Аутентифицируйте клиентов вне браузера
Браузеры переходят по перенаправлению для входа Access и получают CF_Authorization cookie-файл. MCP-клиенты, бэкенд-сервисы и скрипты не могут пройти интерактивный вход, поэтому им нужен токен службы.
-
Перейдите в Zero Trust > Контроль доступа > Учетные данные службы > Service Tokens.
-
Выберите Create Service Token, присвойте ему имя и выберите срок действия.
-
Скопируйте Client ID и Client Secret. Secret отображается только один раз.
-
Вернитесь в своё приложение Access и добавьте вторую политику:
Действие Тип правила Селектор Значение Service Auth Включить Service Token ai-search-client
Отправляйте оба набора учётных данных в виде заголовков с каждым запросом.
curl https://access.search.example.com/search \
--header "Content-Type: application/json" \
--header "CF-Access-Client-Id: <CLIENT_ID>" \
--header "CF-Access-Client-Secret: <CLIENT_SECRET>" \
--data '{
"messages": [
{
"content": "How do I configure AI Search?",
"role": "user"
}
]
}'{
"mcpServers": {
"ai-search": {
"url": "https://access.search.example.com/mcp",
"headers": {
"CF-Access-Client-Id": "<CLIENT_ID>",
"CF-Access-Client-Secret": "<CLIENT_SECRET>"
}
}
}
}Поддержка заголовков зависит от MCP-клиента. Если ваш клиент не может отправлять пользовательские заголовки, см. Защита MCP-серверов для альтернатив на основе идентификации, или используйте cloudflared access curl для запросов из командной строки.
5. Проверьте
Запрос без учётных данных возвращает страницу входа Access вместо результатов поиска:
curl --include https://access.search.example.com/search \
--header "Content-Type: application/json" \
--data '{"messages":[{"content":"test","role":"user"}]}'Убедитесь, что имя хоста по умолчанию закрыто:
curl https://<PUBLIC_ENDPOINT_ID>.search.ai.cloudflare.com/search \
--header "Content-Type: application/json" \
--data '{"messages":[{"content":"test","role":"user"}]}'Ответ представляет собой 404 с кодом ошибки 60018.
Ограничения
- UI-сниппеты на публичном сайте перестают работать. UI-сниппеты вызывают публичный эндпойнт из браузера посетителя. За Access им могут пользоваться только посетители, прошедшие ваши политики. Используйте Access для внутренних сайтов, а для публичных маркетинговых сайтов оставляйте эндпойнт открытым.
- Запросам браузера с другого источника нужна настройка CORS в Access. Если к защищённому имени хоста обращается страница с другого источника, настройте CORS в приложении Access в дополнение к разрешённые origin на публичной конечной точке.
- Ограничения скорости запросов по-прежнему действуют. После Access AI Search применяет собственное ограничение скорости запросов, общее для всех аутентифицированных вызывающих сторон.
- Разрешённые origin не являются аутентификацией. Заголовок
authorized_hostsнастройка задаёт заголовки ответа CORS, которые учитывают только браузеры. Она не блокирует прямой запрос отcurlили скрипт.
Альтернативы
После того как CNAME запись проксируется, к этому имени хоста также применяются другие продукты Cloudflare:
| Продукт | Используйте это, чтобы |
|---|---|
| Пользовательские правила WAF | Разрешите конкретные страны, ASN, диапазоны IP-адресов или заголовки |
| Правила ограничения скорости | Применяйте ограничения для отдельных клиентов сверх ограничения публичной конечной точки |
| Bot Management | Оценка и проверка автоматизированного трафика |
| Turnstile | Проверка того, что пользователь является человеком, до обращения браузерного клиента к эндпойнту |