コンテンツにスキップ

データセキュリティ

クラウドコンピューティングの時代において、データセキュリティは極めて重要です。包括的なデータ保護機能を備えることで、可視性と洞察力を高め、セキュリティリスクを自動的に警告し、全体的な防御力を向上させ、データの可用性と安全性、コンプライアンスを確保できます。

Guanceを使用する際、その内蔵ツールは受信したデータのリスク評価と処理を実行します。

データリスクを軽減するには?

Guanceは、お客様のインフラストラクチャとサービスから監視情報を収集し、一元管理することで、いつでもデータの分析と処理を容易にします。このプロセスでは、サーバーはさまざまな種類のデータを転送します。Guanceのサーバーを通常使用することで、さまざまなタイプのデータ内容が送信されます。Guance製品の通常使用によって収集されるデータのほとんどは、個人のプライバシー情報を含みません。含まれる可能性のある不要な個人データについては、混乱を防ぐために詳細な説明と推奨事項を提供します。Guanceは、データリスクを軽減するための複数の方法を提供します。

DataKit 側のデータセキュリティ対策

HTTPS によるデータアップロード

すべての DataKit のデータは HTTPS プロトコルを使用してアップロードされ、データ通信のセキュリティを確保します。

限定的なプッシュメカニズム

センターは DataKit に命令を送信して実行させることはできません。すべてのリクエストは DataKit が自発的に開始します。DataKit は定期的にセンターから関連する設定(Pipeline やブラックリスト設定など)をプルするだけです。センターは DataKit にコマンドを送信して実行させることはできません。

トレーシング収集プロセスにおけるフィールド値の難読化

トレーシング収集プロセスでは、SQL ステートメントの実行プロセスが収集される可能性があります。これらの SQL ステートメントのフィールド値は、すべて難読化されます。例:

SELECT name from class where name = 'zhangsan'

は次のように難読化されます。

SELECT name from class where name = ?

Pipeline とブラックリストメカニズム

収集プロセスで除去できない機密データがデータ内に存在する場合、Pipeline の特定の関数(例えば cover() 関数を使用して文字列の一部を * に置き換える)を使用して、機密データ(電話番号など)を難読化できます。

また、ブラックリストルールを設定することで、機密データのアップロードを防ぐこともできます。

機密データスキャン

機密データスキャン機能は、個人のプライバシーなどのリスクの高いデータを識別、マーク、編集するために使用されます。これはセキュリティの最前線として、機密データの外部流出を効果的に防止します。

詳細については、機密データスキャン を参照してください。

ログ

Guanceの製品サービスを使用する過程で、多くのログ記録が生成されます。ログデータ自体の強い関連性のため、収集・分析のプロセスでは、特定のルールに従って処理することで、大量のログデータのフィルタリングを実現する必要があります。

ログデータに機密フィールドを設定することで、適切な権限を持つメンバーは難読化されたログデータのみを表示できます。

データアクセス権限制御は、ログデータのセキュリティリスクを低減するもう一つの重要な方法です。異なるロールに、対応するログデータのアクセスおよびクエリ範囲を設定することでデータを分離し、機密データの総合的な管理とフィルタリングを実現します。

詳細については、マルチロールデータアクセス権限制御 を参照してください。

スナップショット

Guanceのスナップショットサービスは、データの即時コピーとして、異常データのフィルタリング条件とデータレコードを含みます。監視データを共有する必要がある場合、スナップショット共有時にデータ難読化ルールを設定するか、共有方法を決定することで、指定された表示権限を持つアクセスリンクを生成し、自動的にデータ保護のシールドを形成します。

詳細については、スナップショット を参照してください。

RUM

ユーザーアクセス関連のデータを収集する際、RUM(リアルユーザーモニタリング)SDK はデータに対してカスタマイズされた変更とインターセプトを実行し、機密データの流出を防ぎます。

詳細については、SDK データインターセプトおよびデータ変更 を参照してください。

Web RUM SDK

以下は、RUM SDK の Cookie の使用と代替メカニズムに関する説明です(コンプライアンス開示)。

デフォルト設定では、Guance RUM SDK はセッションの識別とユーザー識別機能を実現するために、監視対象のアプリケーションに 2 種類の Cookie を書き込みます。

  1. _gc_s_ プレフィックスの Cookie:現在のアクセスセッションに関連する情報を保存し、ユーザーの 1 回のアクセス周期内の行動を関連付けて統計します。

  2. _gc_usr_ プレフィックスの Cookie:ユーザー識別情報を保存し、異なるアクセスセッション間で同じエンドユーザーを継続的に識別します。

これらの Cookie は ユーザーの実際の身元情報を含まず、監視データのセッション管理と匿名ユーザー識別のためだけに使用されます。

特定のビジネスシナリオ(プライバシーコンプライアンス要件、ユーザーによる Cookie 拒否、ブラウザの制限など)で Cookie の書き込みが許可されない場合、RUM SDK は初期化設定をサポートします。

sessionPersistence: "local-storage"

上記のセッション情報とユーザー識別情報を LocalStorage に保存することで、Cookie を書き込むことなくセッションとユーザー関連付け機能を提供できます。

セッションリプレイのプライバシー設定

セッションリプレイは、どの企業も機密データや個人データを公開しないようにするためのプライバシーコントロールを提供します。また、データは暗号化されて保存されます。 セッションリプレイのデフォルトのプライバシーオプションは、エンドユーザーのプライバシーを保護し、機密性の高い組織情報が収集されるのを防ぐように設計されています。

グローバル設定

セッションリプレイを有効にすると、機密要素を自動的にマスクし、RUM SDK による記録を防ぐことができます。

プライバシー設定を有効にするには、SDK 設定で defaultPrivacyLevelmask-user-inputmask、または allow に設定します。

import { datafluxRum } from '@cloudcare/browser-rum'

datafluxRum.init({
  applicationId: '<DATAFLUX_APPLICATION_ID>',
  datakitOrigin: '<DATAKIT ORIGIN>',
  service: 'browser',
  env: 'production',
  version: '1.0.0',
  sessionSampleRate: 100,
  sessionReplaySampleRate: 100,
  trackInteractions: true,
  defaultPrivacyLevel: 'mask-user-input' | 'mask' | 'allow',
})

datafluxRum.startSessionReplayRecording()

設定を更新した後、次のプライバシーオプションを使用して HTML ドキュメントの要素を上書きできます。

マスクユーザー入力モード:ほとんどのフォームフィールド(入力、テキストエリア、チェックボックス値など)をマスクし、その他のテキストはそのまま記録します。入力は 3 つのアスタリスク (***) に置き換えられ、テキストエリアはスペースを保持した x 文字で難読化されます。

注意

デフォルトでは、mask-user-input はセッションリプレイを有効にした場合のプライバシー設定です。

マスクモード:すべての HTML テキスト、ユーザー入力、画像、リンクをマスクします。アプリケーション上のテキストは X に置き換えられ、ページがワイヤーフレームとして表示されます。

許可モード:すべてのデータを記録します。

いくつかの制限:

データセキュリティのため、設定した defaultPrivacyLevel のモードに関係なく、以下の要素は常にマスクされます。

  • passwordemailtel タイプの入力要素
  • autocomplete 属性を持つ要素(例:クレジットカード番号、有効期限、セキュリティコード)
カスタム設定

セッションリプレイは機密要素のマスク機能をサポートしています。ビジネス要件に応じて、マスクする内容(電話番号などの機密情報)を柔軟に設定できます。具体的な操作方法は以下の通りです。

要素属性によるマスク設定

マスクしたい要素に data-gc-privacy 属性を追加します。次の 4 つの属性値をサポートしています。

allow:データ収集を許可します。マスク処理は行いません。
mask:内容をマスクし、マスク形式で表示します。
mask-user-input:ユーザー入力をマスクし、機密入力データの記録を防ぎます。
hidden:内容を完全に非表示にします。

サンプルコード:

<!-- データ収集を許可 -->
<div class="mobile" data-gc-privacy="allow">13523xxxxx</div>

<!-- 内容をマスク -->
<div class="mobile" data-gc-privacy="mask">13523xxxxx</div>

<!-- ユーザー入力をマスク -->
<input class="mobile" data-gc-privacy="mask-user-input" value="13523xxxxx" />

<!-- 内容を非表示 -->
<div class="mobile" data-gc-privacy="hidden">13523xxxxx</div>
要素のクラス名によるマスク設定

要素に特定のクラス名を追加することでマスク機能を実現できます。現在サポートされているクラス名は以下の通りです。

gc-privacy-allow:データ収集を許可します。 • gc-privacy-mask:内容をマスクします。 • gc-privacy-mask-user-input:ユーザー入力をマスクします。 • gc-privacy-hidden:内容を完全に非表示にします。

サンプルコード:

<!-- データ収集を許可 -->
<div class="mobile gc-privacy-allow">13523xxxxx</div>

<!-- 内容をマスク -->
<div class="mobile gc-privacy-mask">13523xxxxx</div>

<!-- ユーザー入力をマスク -->
<input class="mobile gc-privacy-mask-user-input" value="13523xxxxx" />

<!-- 内容を非表示 -->
<div class="mobile gc-privacy-hidden">13523xxxxx</div>
shouldMaskNode を使用したカスタムノードマスク戦略

特定の特殊なシナリオでは、特定の DOM ノードに対してカスタマイズされたマスク処理が必要になる場合があります。例えば、セキュリティレベルの高いアプリケーションでは、ページ内の数値を含むすべてのテキストコンテンツを一律にマスクしたい場合があります。このようなニーズは、shouldMaskNode コールバック関数を設定することで、より柔軟なプライバシー制御戦略を実現できます。

import { datafluxRum } from '@cloudcare/browser-rum'

datafluxRum.init({
  applicationId: '<DATAFLUX_APPLICATION_ID>',
  datakitOrigin: '<DATAKIT ORIGIN>',
  service: 'browser',
  env: 'production',
  version: '1.0.0',
  sessionSampleRate: 100,
  sessionReplaySampleRate: 100,
  trackInteractions: true,
  defaultPrivacyLevel: 'mask-user-input' | 'mask' | 'allow',
  shouldMaskNode: (node, privacyLevel) => {
    if (node.nodeType === Node.TEXT_NODE) {
      // テキストノードの場合、内容に数字が含まれているかを判定
      const textContent = node.textContent || ''
      return /\d+/.test(textContent)
    }
    return false
  },
})

datafluxRum.startSessionReplayRecording()

上記の例では、shouldMaskNode 関数はすべてのテキストノードを判定し、内容に数字(金額、電話番号など)が含まれている場合、自動的にマスク処理を実行し、ユーザーデータのプライバシー保護を強化します。

いくつかの推奨事項
  • 優先順位ルール:

    data-gc-privacy 属性とクラス名が同時に設定されている場合、プロジェクトのドキュメントの説明に従って優先順位を決定することを推奨します。

  • 適用シナリオ:

    allow:マスクが不要な通常のデータに適用します。
    mask:電話番号など、マスク表示が必要な機密データに適用します。
    mask-user-input:パスワードボックスなど、入力内容を保護する必要があるシナリオに適用します。
    hidden:表示や記録を望まないコンテンツに適用します。

  • ベストプラクティス:

    • シンプルで明確な方法(クラス名や属性など)を優先し、設定が正確であることを確認してください。
    • ユーザープライバシーフォームなどの高機密データシナリオでは、mask-user-input または hidden の使用を推奨します。

上記の方法により、機密要素のマスクルールを柔軟に設定し、データセキュリティを向上させ、ビジネスコンプライアンス要件を満たすことができます。

フィードバック

このページは役に立ちましたか?