Защита OpenReplay
Ограничение доступа к узлу
Section titled Ограничение доступа к узлуНастоятельно рекомендуется разрешать к машине только открытые порты 80/443 с помощью групп безопасности. Некоторые компоненты прослушивают адрес 0.0.0.0 для упрощения сетевого взаимодействия, например API сервера k3s, API flannel и т. д.
Настройка SSL
Section titled Настройка SSLЕсли вы используете собственный сертификат, создайте SSL-секрет с помощью следующей команды: kubectl create secret tls openreplay-ssl -n app --key="private_key_file.pem" --cert="certificate.crt".
Примечание: Если у вас нет сертификата, сгенерируйте автоматически обновляемый сертификат для вашего поддомена (того, что был указан при установке) с помощью Let’s Encrypt. Просто подключитесь к экземпляру OpenReplay, выполните
cd openreplay/scripts/helmcharts && bash certmanager.shи следуйте инструкциям.
Если вы хотите включить перенаправление с http на https (рекомендуется), раскомментируйте приведённый ниже блок в разделе ingress-nginx:
ingress-nginx: &ingress-nginx
controller:
config:
ssl-redirect: true
force-ssl-redirect: true
Примечание: Наш
ingress-nginxпо умолчанию работает на портах80|443, но при необходимости это можно легко изменить вopenreplay -e:
ingress-nginx: &ingress-nginx
controller:
service:
ports:
http: 80
https: 443
Сохраните и выйдите с помощью :wq, чтобы служба перезагрузилась.
Усиление X-Frame-Options
Section titled Усиление X-Frame-OptionsЧтобы указать, должен ли браузер разрешать отображение страницы в <frame>, <iframe>, <embed> или <object> и предотвратить атаки типа click-jacking, задайте заголовок ответа X-Frame-Options, отредактировав конфигурацию с помощью openreplay -e:
ingress-nginx: &ingress-nginx
controller:
addHeaders:
X-Frame-Options: "SAMEORIGIN"
Затем сохраните и выйдите с помощью :wq, чтобы служба перезагрузилась.
Настройка reCaptcha
Section titled Настройка reCaptchaOpenReplay поддерживает reCaptcha (v2) для дополнительной безопасности. Чтобы включить эту защиту:
- Получите ключ reCaptcha v2 от Google с включённым режимом
invisible, то есть без запросаtick I am not a human. - Выполните
openreplay -e, затем раскомментируйте и обновите приведённые ниже переменные окружения в разделеchalice:
captcha_server: URL вашего сервиса reCaptcha (например, https://www.google.com/recaptcha/api/siteverify)captcha_key: Ваш секретный ключ reCaptcha
- Отредактируйте
.envвopenreplay/frontend/(скопируйте.env.sample, если его нет) и замените переменнуюCAPTCHA_SITE_KEYна ваш ключ сайта reCaptcha. - Пересоберите фронтенд:
cd openreplay/frontend
IMAGE_TAG=my-custom-image PUSH_IMAGE=1 DOCKER_REPO=my-docker-user-name bash -x build.sh
- Выполните
openreplay -eи укажите вновь собранный образ фронтенда в блокеfrontend:
frontend:
image:
repository: "my-docker-username/frontend"
tag: "my-custom-image"
- Перезапустите службы фронтенда и веб-сервера, чтобы изменения вступили в силу:
openreplay -R
Политика безопасности контента (CSP)
Section titled Политика безопасности контента (CSP)Вот пример политики (CSP), позволяющей OpenReplay записывать сессии. Её необходимо адаптировать в зависимости от вашего домена и требований безопасности:
worker-src ‘self’ blob: https://openreplay.mycompany.com https://*.openreplay.com; script-src ‘self’ https://openreplay.mycompany.com https://*.openreplay.com;
Чтобы применить вашу CSP к NGINX, подключитесь к экземпляру OpenReplay и выполните следующие шаги:
- Выполните
openreplay -eи добавьте вашу CSP в блокfrontend. Не забудьте обновить
frontend:
ingress:
cspSnippet: |
add_header Content-Security-Policy "worker-src 'self' blob: https://openreplay.mycompany.com https://*.openreplay.com; script-src 'self' https://openreplay.mycompany.com https://*.openreplay.com;";
Примечание: Не забудьте заменить вхождения
https://openreplay.mycompany.comв приведённой выше CSP на доменное имя вашего OpenReplay. Это значение должно совпадать сDOMAIN_NAMEпри выполненииopenreplay -e.
- Сохраните и выйдите с помощью
:wq, чтобы применить вновь добавленную CSP
Включение CORS
Section titled Включение CORSМежсайтовые запросы по умолчанию разрешены со всех источников (Access-Control-Allow-Origin: *). Если вы хотите ограничить запись только несколькими доменами, выполните openreplay -e и обновите блок http, добавив приведённые ниже аннотации:
http:
ingress:
annotations:
nginx.ingress.kubernetes.io/cors-allow-methods: POST
nginx.ingress.kubernetes.io/cors-allow-headers: Content-Type,Authorization,Content-Encoding
nginx.ingress.kubernetes.io/cors-allow-origin: https://app1.mycompany.com,https://app2.mycompany.com,https://*.mycompany.com
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-expose-headers: "Content-Length"
Затем сохраните и выйдите с помощью :wq, чтобы применить вновь добавленную CSP.
Есть вопросы?
Section titled Есть вопросы?Если у вас есть какие-либо вопросы об этом процессе, свяжитесь с нами в нашем Slack или посетите наш Форум.