OpenReplay のセキュリティ保護
ノードへのアクセス制限
Section titled ノードへのアクセス制限セキュリティグループを使用して、マシンのポート 80/443 のみを開放することを強く推奨します。ネットワーク構成を簡単にするため、k3s サーバー API や flannel API など、0.0.0.0 アドレスでリッスンしているコンポーネントがいくつかあります。
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> 内でページをレンダリングすることを許可するかどうかを示し、クリックジャッキング攻撃を防ぐために、openreplay -e で設定を編集して X-Frame-Options レスポンスヘッダーを設定します。
ingress-nginx: &ingress-nginx
controller:
addHeaders:
X-Frame-Options: "SAMEORIGIN"
その後、:wq で保存して終了すると、サービスが再読み込みされます。
reCaptcha の設定
Section titled reCaptcha の設定OpenReplay は、セキュリティをさらに強化するために reCaptcha(v2)をサポートしています。この保護を有効にするには、次の手順に従います。
- Google から、
invisibleモードを有効にした v2 の reCaptcha キーを取得します。つまり、tick I am not a humanのチェックを求めない設定にします。 openreplay -eを実行し、chaliceセクションにある以下の環境変数のコメントを解除して更新します。
captcha_server: reCaptcha サービスの URL(例: https://www.google.com/recaptcha/api/siteverify)captcha_key: reCaptcha のシークレットキー
openreplay/frontend/にある.envを編集し(存在しない場合は.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
Content Security Policy(CSP)
Section titled Content Security Policy(CSP)以下は、OpenReplay によるセッションの録画を許可するポリシー(CSP)の例です。お使いのドメインやセキュリティ要件に応じて調整する必要があります。
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を実行し、frontendブロックに CSP を追加します。次のように更新してください。
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;";
注記:上記の CSP 内の
https://openreplay.mycompany.comを、お使いの OpenReplay のドメイン名に置き換えてください。この値は、openreplay -eを実行したときのDOMAIN_NAMEと同じにする必要があります。
: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 までお問い合わせください。