メインコンテンツまでスキップ
メインコンテンツまでスキップ

本番環境への移行

When deploying ClickStack in production, there are several additional considerations to ensure security, stability, and correct configuration.

ネットワークおよびポートのセキュリティ

デフォルトでは、Docker Composeはホスト上のポートを公開し、コンテナ外からアクセス可能にします - ufw (Uncomplicated Firewall) のようなツールが有効になっていてもです。この動作は、ホストレベルのファイアウォールルールをバイパスできるDockerネットワーキングスタックに起因していますが、明示的に設定しない限りはそうなります。

推奨事項:

本番用に必要なポートのみを公開してください。一般的にはOTLPエンドポイント、APIサーバー、フロントエンドです。

例えば、docker-compose.ymlファイルの不要なポートマッピングを削除またはコメントアウトします:

ports:
  - "4317:4317"  # OTLP gRPC
  - "4318:4318"  # OTLP HTTP
  - "8080:8080"  # Only if needed for the API

# Avoid exposing internal ports like ClickHouse 8123 or MongoDB 27017.

コンテナを隔離し、アクセスを強化するための詳細については、Dockerネットワークドキュメントを参照してください。

セッションシークレットの設定

本番環境では、セッションデータを保護し、改ざんを防ぐために、EXPRESS_SESSION_SECRET環境変数に対して強力でランダムな値を設定する必要があります。

アプリサービスのdocker-compose.ymlファイルにこれを追加する方法は以下の通りです:

app:
  image: ${IMAGE_NAME_HDX}:${IMAGE_VERSION}
  ports:
    - ${HYPERDX_API_PORT}:${HYPERDX_API_PORT}
    - ${HYPERDX_APP_PORT}:${HYPERDX_APP_PORT}
  environment:
    FRONTEND_URL: ${HYPERDX_APP_URL}:${HYPERDX_APP_PORT}
    HYPERDX_API_KEY: ${HYPERDX_API_KEY}
    HYPERDX_API_PORT: ${HYPERDX_API_PORT}
    HYPERDX_APP_PORT: ${HYPERDX_APP_PORT}
    HYPERDX_APP_URL: ${HYPERDX_APP_URL}
    HYPERDX_LOG_LEVEL: ${HYPERDX_LOG_LEVEL}
    MINER_API_URL: 'http://miner:5123'
    MONGO_URI: 'mongodb://db:27017/hyperdx'
    NEXT_PUBLIC_SERVER_URL: http://127.0.0.1:${HYPERDX_API_PORT}
    OTEL_SERVICE_NAME: 'hdx-oss-api'
    USAGE_STATS_ENABLED: ${USAGE_STATS_ENABLED:-true}
    EXPRESS_SESSION_SECRET: "super-secure-random-string"
  networks:
    - internal
  depends_on:
    - ch-server
    - db1

強力なシークレットをopensslを使って生成できます:

openssl rand -hex 32

シークレットをソース管理にコミットするのを避けてください。本番環境では、環境変数管理ツール(例:Docker Secrets、HashiCorp Vault、または環境特有のCI/CD設定)を使用することを検討してください。

セキュアな取り込み

すべての取り込みは、ClickStackのOpenTelemetry (OTel) コレクタによって公開されたOTLPポート経由で行う必要があります。デフォルトでは、これは起動時に生成されたセキュアな取り込みAPIキーが必要です。このキーはOTelポートにデータを送信する際に必要で、HyperDX UIのチーム設定 → APIキーで見つけることができます。

Ingestion keys

加えて、OTLPエンドポイントのTLSを有効にし、ClickHouseの取り込み用に専用のユーザーを作成することを推奨します。

ClickHouse

本番デプロイメントには、業界標準のセキュリティプラクティスをデフォルトで適用するClickHouse Cloudの使用を推奨します - これには強化された暗号化認証と接続、および管理されたアクセスコントロールが含まれます。ClickHouse Cloudを使用する際のベストプラクティスに関するステップバイステップのガイドは"ClickHouse Cloud"を参照してください。

ユーザーの権限

HyperDXユーザー

HyperDX用のClickHouseユーザーは、以下の設定を変更するアクセスを持つreadonlyユーザーである必要があります。

  • max_rows_to_read(少なくとも100万まで)
  • read_overflow_mode
  • cancel_http_readonly_queries_on_client_close
  • wait_end_of_query

デフォルトでは、OSSおよびClickHouse Cloudの両方のdefaultユーザーにこれらの権限が利用可能ですが、これらの権限を持つ新しいユーザーを作成することを推奨します。

データベースおよび取り込みユーザー

ClickHouseへの取り込みのためにOTelコレクタ用の専用ユーザーを作成し、取り込みが特定のデータベース(例:otel)に送信されるようにすることを推奨します。詳細は"取り込みユーザーの作成"を参照してください。

セルフマネージドセキュリティ

独自のClickHouseインスタンスを管理している場合、SSL/TLSを有効にし、認証を強制し、アクセスの強化に関するベストプラクティスに従うことが不可欠です。実際の誤設定に関する文脈と、それを避ける方法についてはこのブログ記事を参照してください。

ClickHouse OSSは、基本的に堅牢なセキュリティ機能を提供します。ただし、これには設定が必要です。

  • SSL/TLSの使用tcp_port_secureおよびconfig.xml内の<openSSL>を介して。詳しくはguides/sre/configuring-sslを参照。
  • defaultユーザーのために強力なパスワードを設定するか、無効にします。
  • ClickHouseを外部に公開しないことをお勧めします。デフォルトでは、ClickHouseはlisten_hostが変更されない限りlocalhostのみにバインドします。
  • パスワード、証明書、SSHキーのような認証方法を使用します、または外部認証機関を使用します。
  • IPフィルタリングとHOST句を使用してアクセスを制限します。詳しくはsql-reference/statements/create/user#user-hostを参照。
  • ロールベースのアクセス制御 (RBAC) を有効にし、詳細な権限を付与します。詳細はoperations/access-rightsを参照。
  • クオータや制限を強制して、quotassettings profiles、および読み取り専用モードを使用します。
  • データを静止状態で暗号化し、安全な外部ストレージを使用します。詳しくはoperations/storing-dataおよびcloud/security/CMEKを参照。
  • 資格情報をハードコーディングしないでください。named collectionsやClickHouse CloudのIAMロールを使用します。
  • アクセスとクエリを監査するには、system logsおよびsession logsを使用します。

ユーザー管理やクエリ/リソース制限の確保については、external authenticatorsおよびquery complexity settingsもご参照ください。

有効期限 (TTL) の設定

ClickStackデプロイメントに対してTime To Live (TTL)適切に設定されていることを確認してください。これはデータがどのくらいの期間保持されるかを制御します - デフォルトの3日はしばしば変更する必要があります。

MongoDBガイドライン

公式のMongoDBセキュリティチェックリストに従ってください。

ClickHouse Cloud

以下は、ベストプラクティスを満たすClickHouse Cloudを使用したClickStackのシンプルなデプロイメントを示しています。

サービスを作成する

ClickHouse Cloudの開始ガイドに従って、サービスを作成します。

接続詳細をコピーする

HyperDXの接続詳細を見つけるには、ClickHouse Cloudコンソールに移動し、サイドバーの接続ボタンをクリックしてHTTP接続詳細、特にURLを記録します。

このステップに表示されるデフォルトのユーザー名とパスワードを使用してHyperDXに接続できますが、専用のユーザーを作成することを推奨します - 詳細は以下を参照

Connect Cloud

HyperDXユーザーを作成する

HyperDX用の専用ユーザーを作成することを推奨します。Cloud SQLコンソールで、複雑さ要件を満たす安全なパスワードを提供して、以下のSQLコマンドを実行します:

CREATE USER hyperdx IDENTIFIED WITH sha256_password BY '<YOUR_PASSWORD>' SETTINGS PROFILE 'readonly';
GRANT sql_console_read_only TO hyperdx;

取り込み用ユーザーの準備

データ用のotelデータベースと、限られた権限のhyperdx_ingestユーザーを取り込み用に作成します。

CREATE DATABASE otel;
CREATE USER hyperdx_ingest IDENTIFIED WITH sha256_password BY 'ClickH0u3eRocks123!';
GRANT SELECT, INSERT, CREATE TABLE, CREATE VIEW ON otel.* TO hyperdx_ingest;

ClickStackをデプロイする

ClickStackをデプロイします - HelmまたはDocker Compose(ClickHouseを除外するように修正済み)のデプロイモデルが推奨されます。

コンポーネントを個別にデプロイする

高度なユーザーは、OTelコレクタHyperDXをそれぞれのスタンドアロンデプロイメントモードで個別にデプロイできます。

ClickHouse CloudでHelmチャートを使用するための手順はこちらにあります。Docker Composeの場合の同等の手順はこちらにあります。

http://localhost:8080にアクセスしてHyperDX UIに移動します。

ユーザーを作成し、要件を満たすユーザー名とパスワードを提供します。

HyperDX UI

Createをクリックすると、接続詳細の入力を求められます。

ClickHouse Cloudに接続する

先ほど作成した資格情報を使用して接続詳細を入力し、Createをクリックします。

HyperDX Cloud

ClickStackにデータを送信する

ClickStackにデータを送信する方法は、"OpenTelemetryデータの送信"を参照してください。