← Cloudflare One / cloudflare-one / traffic-policies / http-policies
Изменение заголовков HTTP-запросов в Gateway
Политики HTTP Gateway с действием Allow могут изменять заголовки соответствующих запросов до того, как те достигнут места назначения. Вы можете добавлять динамические значения в заголовки, чтобы передавать вышестоящим сервисам такую информацию, как личность пользователя, исходный IP-адрес и другие данные, обеспечивать контроль арендатора SaaS, удалять внутренние заголовки и переопределять содержимое заголовков.
Для изменения заголовков требуется Расшифровка TLS, поскольку HTTP-заголовки видны только в трафике, который Gateway может расшифровать.
Операции с заголовками
Gateway поддерживает три операции с заголовками в политиках HTTP. Если запрос соответствует политике Allow с настроенными операциями с заголовками, Gateway применяет их в следующем порядке:
- Удалить: Удаляйте заголовки из запроса.
- Перезаписать: Перезаписывайте заголовки запроса. У заголовков с совпадающими именами значения будут перезаписаны. Если заголовок не существует, он создаётся.
- Add: Добавляйте заголовки к запросу. Если заголовок уже существует, добавленное значение присоединяется к существующему.
Вы можете настроить до 20 операций с заголовками в одной политике. Имена заголовков ограничены 256 байтами, а значения заголовков ограничены 4 КБ.
Добавить заголовки
Добавление заголовка добавляет значение к запросу. Если заголовок уже существует, значение добавляется вместе с уже имеющимся, а не заменяет его.
Перезапись заголовков
Перезапись заголовка заменяет любое существующее значение. Если заголовок в запросе ещё не существует, он создаётся. Используйте эту операцию, если нужно гарантировать конкретное значение заголовка независимо от того, что отправил клиент.
Удалите заголовки
Удаление заголовка полностью удаляет его из запроса. Если заголовок не существует, операция не имеет эффекта.
Динамические значения заголовков
Значения заголовков могут включать динамические переменные, которые Gateway разрешает во время запроса на основе идентификации, устройства и сетевого контекста текущей сессии. Динамические переменные используют @{...} синтаксис и может сочетаться со статическим текстом в одном значении.
Например, значение заголовка user-@{identity.email} разрешается в [email protected] во время запроса.
Доступны следующие динамические переменные:
| Переменная | Описание |
|---|---|
@{identity.email} |
Адрес электронной почты пользователя от поставщика идентификации. |
@{identity.name} |
Отображаемое имя пользователя от поставщика идентификации. |
@{identity.id} |
UUID идентификации пользователя в Cloudflare. |
@{identity.groups} |
Членство пользователя в группах поставщика идентификации. |
@{identity.SAML} |
Атрибуты SAML пользователя от поставщика идентификации, если они настроены. |
@{identity.OIDC} |
Утверждения OIDC пользователя от поставщика идентификации, если они настроены. |
@{source.ip} |
Исходный IP-адрес подключения пользователя, зафиксированный в Gateway. |
@{destination.ip} |
IP-адрес назначения запроса. |
@{device.id} |
UUID устройства Cloudflare One Client. |
@{device.posture} |
Результаты проверки состояния устройства (сериализованные в виде строки JSON). |
Для динамических переменных требуется активный сеанс идентификации. Если Gateway не может определить значение переменной (например, пользователь не прошёл аутентификацию), переменная заменяется предупреждающей строкой, например cf-unresolved или cf-invalid, и в журнал HTTP добавляется предупреждение.
Настройте операции с заголовками
Dashboard
Чтобы создать HTTP-политику с операциями над заголовками:
- В Панель управления Cloudflare One ↗, перейдите в Политики трафика > Политики Firewall > HTTP.
- Выберите Добавление политики.
- Создайте выражение для сопоставления трафика, который требуется изменить.
- В Действие, выберите Allow.
- В разделе Изменение заголовков запроса, выберите Add или Перезаписать чтобы добавить или перезаписать заголовки, либо выбрать Удалить чтобы удалить заголовок.
- Для операций Add и Overwrite введите имя и значение заголовка. Чтобы использовать динамическую переменную, введите
@{...}синтаксис в поле значения или выберите{}кнопку, чтобы увидеть список доступных значений. Для операций Remove укажите только имя заголовка. - Сохраните свою политику.
API
Чтобы создать HTTP-политику с операциями над заголовками через API, включите add_headers, set_headers, а также delete_headers в rule_settings объект.
curl https://api.cloudflare.com/client/v4/accounts/{account_id}/gateway/rules \
--header "Authorization: Bearer {api_token}" \
--header "Content-Type: application/json" \
--data '{
"name": "Forward identity headers",
"action": "allow",
"enabled": true,
"filters": ["http"],
"traffic": "any(http.request.domains[*] in {\"app.example.com\"})",
"rule_settings": {
"add_headers": {
"X-User-Email": ["@{identity.email}"],
"X-User-Groups": ["@{identity.groups}"]
},
"set_headers": {
"X-Forwarded-User": ["@{identity.email}"]
},
"delete_headers": ["X-Debug-Token", "X-Internal-Only"]
}
}' rule_settings поля для изменения заголовков:
| Поле | Type | Описание |
|---|---|---|
add_headers |
map<string, array<string>> |
Заголовки, которые нужно добавить. Каждый ключ обозначает имя заголовка, а каждое значение содержит список значений для добавления. |
set_headers |
map<string, array<string>> |
Заголовки, которые нужно перезаписать. Каждый ключ обозначает имя заголовка, а каждое значение содержит список значений для установки. |
delete_headers |
array<string> |
Имена заголовков, которые нужно удалить из запроса. |
Одно значение заголовка может содержать сочетание статического текста и динамических переменных. Например:
{
"add_headers": {
"X-Request-Context": ["user=@{identity.email}, device=@{device.id}, src=@{source.ip}"]
}
}Проверить пользовательские заголовки
Если вы сохраняете файл HAR (HTTP Archive) из браузера для анализа веб-трафика, пользовательские заголовки, заданные в Gateway, в этом файле не появятся. Это происходит потому, что Gateway добавляет заголовок уже после того, как запрос покидает браузер.
Чтобы убедиться, что Gateway применяет пользовательский заголовок:
-
В своей политике с пользовательскими заголовками добавьте селектор, соответствующий трафику для HTTPBin ↗, сайт с открытым исходным кодом для тестирования HTTP-запросов. Например:
Селектор Оператор Значение Логика Действие Действие в отношении недоверенного сертификата Приложение in Google Workspace Или Allow Block Домен in httpbin.org -
На своём устройстве перейдите в
httpbin.org/anything↗. Ваш пользовательский заголовок появится в списке заголовков. -
(Необязательно) Удалите выражение HTTPBin из своей политики.
Сценарии использования
Управление тенантом SaaS
Tenant control позволяет вашим пользователям обращаться к корпоративным SaaS приложениям и одновременно блокирует доступ к личным аккаунтам в этом же сервисе. Например, можно разрешить доступ к корпоративному Google Workspace вашей компании и заблокировать вход в личный Gmail.
Gateway реализует контроль арендатора, добавляя пользовательские HTTP-заголовки в соответствующие запросы. Эти заголовки сообщают SaaS-приложению, какой арендатор (организация) авторизован. Если пользователь пытается пройти аутентификацию с помощью личного аккаунта, SaaS-приложение считывает заголовок и отклоняет запрос.
Microsoft 365
Tenant control для Microsoft 365 требует двух политик. Располагая политики по порядку, убедитесь, что они соответствуют порядок приоритета.
| Приоритет | Селектор | Оператор | Значение | Действие | Действие в отношении недоверенного сертификата |
|---|---|---|---|---|---|
| 1 | Домен | является | login.live.com |
Allow | Block |
| Название пользовательского заголовка | Значение пользовательского заголовка |
|---|---|
Sec-Restrict-Tenant-Access-Policy |
restrict-msa |
| Приоритет | Селектор | Оператор | Значение | Действие | Действие в отношении недоверенного сертификата |
|---|---|---|---|---|---|
| 2 | Приложение | in | Microsoft Office365 | Allow | Block |
| Название пользовательского заголовка | Значение пользовательского заголовка |
|---|---|
Restrict-Access-To-Tenants, Restrict-Access-Context |
Домен вашей организации |
Дополнительные сведения см. в Документация Microsoft Entra ID ↗.
Google Workspace
| Селектор | Оператор | Значение | Действие | Действие в отношении недоверенного сертификата |
|---|---|---|---|---|
| Приложение | in | Google Workspace | Allow | Block |
| Название пользовательского заголовка | Значение пользовательского заголовка |
|---|---|
X-GoogApps-Allowed-Domains |
Домен вашей организации |
Дополнительные сведения см. в документация Google Workspace ↗.
Slack
| Селектор | Оператор | Значение | Действие | Действие в отношении недоверенного сертификата |
|---|---|---|---|---|
| Приложение | in | Slack | Allow | Block |
| Название пользовательского заголовка | Значение пользовательского заголовка |
|---|---|
X-Slack-Allowed-Workspaces-Requester, X-Slack-Allowed-Workspaces |
Рабочая область вашей организации |
Дополнительные сведения см. в документация Slack ↗.
Dropbox
| Селектор | Оператор | Значение | Действие | Действие в отношении недоверенного сертификата |
|---|---|---|---|---|
| Приложение | in | Dropbox | Allow | Block |
| Название пользовательского заголовка | Значение пользовательского заголовка |
|---|---|
X-Dropbox-allowed-Team-Ids |
ID вашей организации |
Дополнительные сведения см. в документация Dropbox ↗.
ChatGPT
| Селектор | Оператор | Значение | Действие | Действие в отношении недоверенного сертификата |
|---|---|---|---|---|
| Приложение | in | ChatGPT | Allow | Block |
| Название пользовательского заголовка | Значение пользовательского заголовка |
|---|---|
Chatgpt-Allowed-Workspace-Id |
ID рабочей области вашей организации |
Дополнительные сведения см. в документация OpenAI ↗.
Claude
| Селектор | Оператор | Значение | Действие | Действие в отношении недоверенного сертификата |
|---|---|---|---|---|
| Приложение | in | Claude | Allow | Block |
| Название пользовательского заголовка | Значение пользовательского заголовка |
|---|---|
anthropic-allowed-org-ids |
UUID вашей организации |
Чтобы разрешить доступ из нескольких организаций, введите список UUID через запятую без пробелов (например, <org-uuid-1>,<org-uuid-2>).
UUID вашей организации можно найти в Настройки > Аккаунт > ID организации на claude.ai ↗.
Дополнительные сведения см. в документация Claude ↗.
Передавать идентификационные данные пользователя вышестоящим сервисам
С помощью динамических значений заголовков можно передавать информацию о личности пользователя вышестоящим приложениям, не требуя от них прямой интеграции с Cloudflare Access.
| Имя заголовка | Значение заголовка |
|---|---|
X-User-Email |
@{identity.email} |
X-User-Name |
@{identity.name} |
X-User-Groups |
@{identity.groups} |
X-Source-IP |
@{source.ip} |
Ваше вышестоящее приложение может считывать эти заголовки, чтобы идентифицировать пользователя, применять логику авторизации или заполнять журналы аудита.
Удалить внутренние заголовки
Чтобы клиенты не могли подделывать внутренние заголовки, удаляйте заголовки перед пересылкой запроса с помощью операции delete, а затем повторно добавляйте их с проверенными значениями с помощью операции add или set.
curl https://api.cloudflare.com/client/v4/accounts/{account_id}/gateway/rules \
--header "Authorization: Bearer {api_token}" \
--header "Content-Type: application/json" \
--data '{
"name": "Replace internal headers",
"action": "allow",
"enabled": true,
"filters": ["http"],
"traffic": "any(http.request.domains[*] in {\"internal.example.com\"})",
"rule_settings": {
"delete_headers": ["X-Internal-User"],
"set_headers": {
"X-Internal-User": ["@{identity.email}"]
}
}
}'Освобождённые пользователи в Cloudflare WAF
Вы можете добавить в HTTP-политику собственные заголовки, чтобы пропускать пользователей через Cloudflare WAF. Это полезно, если нужно пропускать через ваш WAF только пользователей Cloudflare One Client.
-
Создайте политику Allow для внутреннего домена за вашим WAF с пользовательским заголовком.
Селектор Оператор Значение Действие Домен in internalapp.comAllow Название пользовательского заголовка Значение пользовательского заголовка X-Example-Headerexample-value -
В Cloudflare WAF создать пользовательское правило к Требовать одинаковый заголовок HTTP.
Использовать пользовательские заголовки с Browser Isolation
Вы можете настроить Browser Isolation чтобы отправлять пользовательские заголовки. Это полезно для реализации управления тенантами в изолированных SaaS-приложениях или для отправки произвольных пользовательских заголовков запроса изолированным веб-сайтам.
Чтобы использовать пользовательские заголовки с Browser Isolation, создайте две HTTP-политики, нацеленные на один и тот же домен или группу приложений. Например, можно создать политики для HTTPBin ↗, сайт с открытым исходным кодом для тестирования HTTP-запросов:
-
Создайте политику Isolate для
httpbin.org.Селектор Оператор Значение Действие Домен in httpbin.orgИзолировать -
Создайте политику Allow для
httpbin.orgс пользовательским заголовком.Селектор Оператор Значение Действие Домен in httpbin.orgAllow Название пользовательского заголовка Значение пользовательского заголовка Example-Headerexample-value -
Перейдите в
httpbin.org/anything↗. Cloudflare отобразит сайт в изолированном браузере. Ваш пользовательский заголовок появится в списке заголовков.