Защита OpenReplay

Защитите OpenReplay, настроив SSL и reCaptcha.

Защита OpenReplay

Ограничение доступа к узлу

Section titled Ограничение доступа к узлу

Настоятельно рекомендуется разрешать к машине только открытые порты 80/443 с помощью групп безопасности. Некоторые компоненты прослушивают адрес 0.0.0.0 для упрощения сетевого взаимодействия, например API сервера k3s, API flannel и т. д.

Если вы используете собственный сертификат, создайте 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, чтобы служба перезагрузилась.

OpenReplay поддерживает reCaptcha (v2) для дополнительной безопасности. Чтобы включить эту защиту:

  1. Получите ключ reCaptcha v2 от Google с включённым режимом invisible, то есть без запроса tick I am not a human.
  2. Выполните openreplay -e, затем раскомментируйте и обновите приведённые ниже переменные окружения в разделе chalice:
  1. Отредактируйте .env в openreplay/frontend/ (скопируйте .env.sample, если его нет) и замените переменную CAPTCHA_SITE_KEY на ваш ключ сайта reCaptcha.
  2. Пересоберите фронтенд:
cd openreplay/frontend
IMAGE_TAG=my-custom-image PUSH_IMAGE=1 DOCKER_REPO=my-docker-user-name bash -x build.sh
  1. Выполните openreplay -e и укажите вновь собранный образ фронтенда в блоке frontend:
frontend:
  image:
    repository: "my-docker-username/frontend"
    tag: "my-custom-image"
  1. Перезапустите службы фронтенда и веб-сервера, чтобы изменения вступили в силу:
 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 и выполните следующие шаги:

  1. Выполните 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.

  1. Сохраните и выйдите с помощью :wq, чтобы применить вновь добавленную CSP

Межсайтовые запросы по умолчанию разрешены со всех источников (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.

Если у вас есть какие-либо вопросы об этом процессе, свяжитесь с нами в нашем Slack или посетите наш Форум.