Настройка усиления безопасности
Усиление безопасности позволяет применить дополнительные меры защиты, которые помогают не допустить эксплуатации некоторых уязвимостей злоумышленником.
Note
Эти настройки доступны в файле конфигурации grafana.ini. Чтобы применить изменения файла конфигурации, перезапустите сервер Grafana.
Дополнительная защита cookie
Если Grafana использует HTTPS, вы можете дополнительно защитить cookie, который система использует для аутентификации доступа к веб-интерфейсу. Применив дополнительную защиту cookie, вы можете снизить риск некоторых атак, возникающих в результате получения злоумышленником значения cookie.
Note
Чтобы приведённые ниже конфигурации работали правильно, Grafana должна использовать HTTPS.
Добавление атрибута Secure к cookie
Чтобы снизить риск некоторых атак типа «человек посередине» (MITM), добавьте атрибут Secure к cookie, используемому для аутентификации пользователей. Этот атрибут заставляет передавать cookie только по защищённому соединению HTTPS.
Пример:
[security]
# Set to true if you host Grafana behind HTTPS. The default value is false.
cookie_secure = true
Добавление атрибута SameSite к cookie
Чтобы снизить риск почти всех CSRF-атак, установите для параметра cookie_samesite значение strict. Эта настройка запрещает клиентам отправлять cookie в запросах, выполняемых между сайтами, — cookie отправляется только с того сайта, который его создал.
Пример:
[security]
# set cookie SameSite attribute. defaults to `lax`. can be set to "lax", "strict", "none" and "disabled"
cookie_samesite = strict
Note
Если задать для атрибута SameSite значение “strict”, будут работать только переходы пользователя внутри одного экземпляра Grafana. Вариант по умолчанию “lax” такого поведения не даёт.
Если вы хотите использовать OAuth/SAML для входа, необходимо настроить этот атрибут как
lax.
Добавление префикса к именам cookie
Вы можете дополнительно защитить аутентификацию по cookie, добавив префикс cookie. Cookie без специального префикса могут быть перезаписаны при атаке типа «человек посередине», даже если сайт использует HTTPS. Префикс cookie заставляет клиентов принимать cookie только при выполнении определённых условий.
Добавьте к текущему имени cookie префикс __Secure- или __Host-, причём последний обеспечивает дополнительную защиту, разрешая создавать cookie только тому хосту, который отправил заголовок Set-Cookie.
Пример:
[auth]
# Login cookie name
login_cookie_name = __Host-grafana_session
Заголовки безопасности
Grafana включает несколько дополнительных заголовков, которые можно настроить для снижения риска некоторых атак, например XSS.
Добавление политики безопасности содержимого
Политика безопасности содержимого (CSP) — это заголовок HTTP-ответа, который управляет тем, как веб-браузер обрабатывает содержимое, например разрешает выполнение встроенных скриптов или загрузку изображений с определённых доменов. Шаблон CSP по умолчанию уже настроен так, чтобы обеспечивать достаточную защиту от некоторых атак. Это затрудняет для злоумышленников выполнение произвольного JavaScript при наличии такой уязвимости.
Пример:
[security]
# Enable adding the Content-Security-Policy header to your requests.
# CSP enables you to control the resources the user agent can load and helps prevent XSS attacks.
content_security_policy = true
# Set the Content Security Policy template that is used when the Content-Security-Policy header is added to your requests.
# $NONCE in the template includes a random nonce.
# $ROOT_PATH is server.root_url without the protocol.
content_security_policy_template = """script-src 'self' 'unsafe-eval' 'unsafe-inline' 'strict-dynamic' $NONCE;object-src 'none';font-src 'self';style-src 'self' 'unsafe-inline' blob:;img-src * data:;base-uri 'self';connect-src 'self' grafana.com ws://$ROOT_PATH wss://$ROOT_PATH;manifest-src 'self';media-src 'none';form-action 'self';"""
Включение доверенных типов
Находится в разработке. Доверенные типы — экспериментальный API JavaScript с ограниченной поддержкой браузеров.
Доверенные типы снижают риск DOM XSS, обязывая разработчиков очищать строки, используемые в точках внедрения, например при установке innerHTML у элемента. Кроме того, при включении доверенных типов эти точки внедрения должны проходить через политику, которая выполнит очистку либо оставит строку без изменений и вернёт её как «безопасную». Это даёт определённую защиту от уязвимостей внедрения на стороне клиента в сторонних библиотеках, таких как jQuery, Angular и даже сторонних плагинах.
Чтобы включить доверенные типы в режиме принудительного применения, когда точки внедрения автоматически очищаются:
- Включите
content_security_policyв конфигурации. - Добавьте
require-trusted-types-for 'script'вcontent_security_policy_templateв конфигурации.
Чтобы включить доверенные типы в режиме отчётов, когда неочищенные с помощью доверенных типов входные данные выводятся в консоль:
- Включите
content_security_policy_report_onlyв конфигурации. - Добавьте
require-trusted-types-for 'script'вcontent_security_policy_report_only_templateв конфигурации.
Поскольку эта функция находится в разработке, возможны сбои. Если они произойдут или у вас будет другой отзыв, создайте задачу.
Дополнительное усиление безопасности
В сервере Grafana есть несколько встроенных функций безопасности, которые можно включить для повышения защищённости. В этом разделе описаны дополнительные приёмы усиления безопасности.
Скрытие номера версии
Если задано true, сервер Grafana скрывает номер текущей версии от неаутентифицированных пользователей. Номера версий могут выдать, что вы используете устаревшую и уязвимую версию Grafana.
Пример:
[auth.anonymous]
# mask the Grafana version number for unauthenticated users
hide_version = true
Включение аутентификации для метрик
По умолчанию метрики самой Grafana доступны без аутентификации. Это может привести к утечке информации.
Пример:
[metrics]
# If both are set, basic auth will be required for the metrics endpoints
basic_auth_username =
basic_auth_password =
Принудительная проверка домена
Если задано true, сервер Grafana перенаправляет запросы, значение заголовка Host в которых не совпадает с фактическим доменом. Это может помочь снизить риск некоторых атак DNS rebinding.
Пример:
[server]
# Redirect to correct domain if host header does not match domain
# Prevents DNS rebinding attacks
enforce_domain = true