セキュリティガイドライン、アクセス許可、依存関係

セキュリティランディング。Splunk Distribution of OpenTelemetry Collector の安全を確保する方法について説明します。

Splunk Distribution of OpenTelemetry Collector はデフォルトで安全に動作しますが、設定主導型のため、セキュリティを管理するには少なくともアーキテクチャと機能を基本的に理解する必要があります。詳細については、「プロセッサアーキテクチャ」および「Collector deployment modes」を参照してください。

注意: 公開 GitHub の問題レポートを使用して、セキュリティの脆弱性を報告しないでください。セキュリティの問題を報告するには、「Report a Security Vulnerability」を参照してください。

セキュリティガイドライン

エンドユーザー向け

Collector を使用するときは、以下のガイドラインに従ってください。

Collector の設定

  1. 設定で最低限必要なコンポーネントをアクティブにします。

  2. 重要な構成情報が安全に保管されるようにします。

アクセス許可を設定する

  1. Collectorをrootまたはadminユーザで実行しないでください。

  2. 必要に応じて、コンポーネントに特権アクセスを要求するように設定します。

レシーバーとエクスポーターを設定する

  1. 暗号化と認証を使用します。

  2. セキュリティリスクを減らすために、設定パラメータが適切に変更されていることを確認してください。

プロセッサーを設定する

  1. 機密性の高いメタデータの難読化またはスクラブ設定を行います。

  2. すべての推奨プロセッサーを設定します。

エクステンションを設定する

機密性の高い健康データやテレメトリデータを公開しないでください。

開発者向け

以下の一般的なガイドラインに従ってください:

  • Collector 構成ファイルから構成情報を取得します。

  • 設定ヘルパー関数を使用します。

Collector の設定

  1. セントラル設定ファイルを使用します。

  2. 設定ヘルパーを使用します。

アクセス許可を設定する

  1. 特権アクセスを最小限にします。

  2. 特権アクセスが必要なものとその理由を文書化します。

レシーバーとエクスポーターを設定する

  1. レシーバーとエクスポーターのデフォルトが暗号化接続になるように設定します。

  2. レシーバーとエクスポータを設定して、ヘルパー機能を使用します。詳細については、GitHub の「エクスポータヘルパー」を参照してください。

エクステンションを設定する

センシティブなヘルスデータやテレメトリデータをデフォルトで公開しないようにエクステンションを設定します。

一般設定

Collector バイナリには組み込みまたはデフォルトの設定が含まれていないため、開始する前に構成ファイルを指定する必要があります。Collector に渡される構成ファイルは、ロード前に検証する必要があります。無効な設定が検出された場合、Collector は保護メカニズムとして起動に失敗する必要があります。

設定によって Collector の動作が制御されるため、設定によってアクティブ化される機能を最小限に抑え、必要最小限のポートのみを公開するように注意する必要があります。詳細については、「公開ポートとエンドポイント」 を参照してください。さらに、着信または発信の通信では、TLS および認証を使用する必要があります。

Collector は設定をメモリに保持しますが、設定が開始時にロードされる場所は、使用するパッケージによって異なります。たとえば、Kubernetes ではシークレットや ConfigMaps を使用できますが、Docker ではコンテナにイメージの設定が埋め込まれ、デフォルトでは暗号化された方法で保存されません。

コンフィギュレーションには以下のような機密情報が含まれている可能性があります:

  • APIトークンなどの認証情報

  • 秘密鍵を含むTLS証明書

機密情報は、暗号化されたファイルシステムやシークレットストアなどで安全に保存する必要があります。Collector は環境変数の拡張をサポートするため、環境変数を使用して機密データと非機密データを処理できます。詳細については、「設定環境変数」を参照してください。

OpenTelemetry コンポーネントの設定に関する詳細は、以下のセクションで説明します。

アクセス許可

Collector はカスタムユーザーとしての実行をサポートしますが、ルートユーザーまたは管理者として実行することはできません。ほとんどのユースケースにおいて、Collector は機能への特権アクセスを必要としません。一部のコンポーネントは特権アクセスを必要とする場合があります。これらのコンポーネントをアクティブにするときは注意してください。Collector のコンポーネントは、ネットワークアクセスや RBAC を含む外部の権限を要求する場合もあります。

アクセス許可の詳細については、以下のセクションで説明します。

レシーバーおよびエクスポーター

レシーバーとエクスポータは、プッシュベースまたはプルベースのいずれかになります。いずれの場合も、安全な認証済みチャネルを介して接続を確立する必要があります。Collector への攻撃ベクトルを最小限に抑えるために、未使用のレシーバーとエクスポータを非アクティブにする必要があります。攻撃ベクトルとは、ハッカーがネットワークやコンピュータに不正にアクセスし、システムの脆弱性を悪用するために使用する経路または方法のことです。

レシーバーとエクスポータは、設定パラメータを使用してバッファ、キュー、ペイロード、ワーカーの設定を公開する場合があります。これらの設定が使用可能な場合、エンドユーザーはデフォルト値を慎重に変更してください。これらの値を不適切に設定すると、Collector がリソース枯渇などの追加の攻撃ベクトルにさらされる可能性があります。

レシーバーが動作するために Collector を特権モードで実行する必要がある可能性があり、これはセキュリティ上の懸念となる可能性があります。

開発者は、暗号化された接続( insecure: false コンフィギュレーション設定を使用)、およびレシーバーとエクスポーターのヘルパー関数を使用する必要があります。

プロセッサー

プロセッサはレシーバーとエクスポータの中間に位置し、何らかの形でデータを処理する役割を担っています。セキュリティの観点から、これらは次のように役立ちます。

推奨構成

プロセッサはデフォルトではアクティブになりません。データソースによっては、複数のプロセッサをアクティブにする場合があります。プロセッサは、すべてのデータソースに対してアクティブにする必要がありますが、すべてのプロセッサがすべてのデータソースをサポートしているわけではありません。

プロセッサの順序が重要であることに注意してください。以下の各セクションの順序がベストプラクティスです。詳細については、個別のプロセッサドキュメントを参照してください。

トレース

  1. memory_limiter プロセッサー

  2. 任意のサンプリング・プロセッサー

  3. コンテキストからのソース送信に依存するプロセッサー(例えば、k8sattributes )。

  4. batch プロセッサー

  5. その他のプロセッサー

メトリクス

  1. memory_limiter プロセッサー

  2. コンテキストからのソース送信に依存するプロセッサー(例えば、k8sattributes )。

  3. その他のプロセッサー

機密データのスクラブ

機密データをバックエンドにエクスポートする前に、Collector を使用して機密データのスクラブ処理を行うことは一般的です。スクラブ処理は、データをサードパーティのバックエンドに送信する場合に特に重要です。エクスポート前に機密データを難読化またはスクラブ処理するように Collector を設定します。

資源利用に関するセーフガード

また、プロセッサはリソース使用率に関する予防措置を提供します。 batch プロセッサと memory_limiter プロセッサは、Collector のリソース効率を確保し、過負荷時のメモリ不足を防ぎます。少なくとも、定義されたすべてのパイプラインでこれら 2 つのプロセッサをアクティブにします。詳細については、「ref:rec-processor-config」を参照してください。

エクステンション

レシーバー、プロセッサー、エクスポーターはテレメトリデータを直接扱うが、以下のセクションで説明するように、エクステンションは通常異なるニーズに応えます。

健全性とテレメトリ

最初の拡張機能では、ヘルスチェック情報、Collector のメトリクスとトレース、およびプロファイリングデータを生成して収集する機能が提供されていました。デフォルト設定でこれらの拡張機能がアクティブ化されている場合、ヘルスチェックを除くすべての拡張機能は、Collector からローカルでのみアクセスできます。これらの拡張機能をリモートアクセス用に設定する場合、機密情報が公開される可能性があるため、注意して進めてください。

転送

転送拡張機能は通常、Collector によってネイティブにサポートされていない一部のテレメトリデータを収集する必要がある場合に使用します。たとえば、[http_forwarder] 拡張機能では HTTP ペイロードの受信や転送を行うことができます。転送拡張機能はレシーバーやエクスポータに似ているため、同じセキュリティ上の考慮事項が適用されます。

オブザーバー

オブザーバは、エンドポイントのサービス検出を実行できます。レシーバーなどの他のコンポーネントは、これらの拡張機能をサブスクライブして、エンドポイントの受信や着信の通知を受けることができます。オブザーバは、サービス検出を実行するために特定の権限を要求する場合があります。たとえば、[k8s_observer] には Kubernetes で特定の RBAC 権限が必要であり、[host_observer] は Collector を特権モードで実行する必要があります。

サブプロセス

拡張機能を使用してサブプロセスを実行することもできます。これは、Collector によってネイティブに実行できない収集メカニズム(FluentBit など)に役立ちます。サブプロセスは、サブプロセス自体に依存する完全に独立した攻撃ベクトルを公開します。一般的に、Collector と一緒にサブプロセスを実行する際は注意が必要です。

依存関係

Splunk Distribution of OpenTelemetry Collector は、さまざまな外部の依存関係に依存しています。これらの依存関係は、Dependabot によって監視されます。依存関係は毎日チェックされ、関連するプルリクエストが自動的に開かれます。

最新リリースにアップグレードして、最新のセキュリティ更新を確保します。このプロジェクトの依存関係に対してセキュリティの脆弱性が検出された場合、以下のいずれかが原因である可能性があります。

  • 古いリリースを使用しています。

  • アップデートを含む新しいリリースはリリースされていません。

  • 更新された依存関係がマージされていないのは、おそらく何らかの破壊的な変更があったためです(この場合、私たちは問題の解決に積極的に取り組み、詳細を追ったGitHub issuesを開きます)。

  • 依存関係はパッチを適用した更新版をリリースしていません。