コンテンツにスキップ

プライバシーと権限について

プライバシールールは、データが RUM または Log キューに入る前に適用される必要があります。C# と Native C/C++ はどちらも URL Query、HTTP リクエスト Header、レスポンス Header のマスキングをサポートしており、汎用 Modifier を使用してビジネス上の機密フィールドを処理できます。

権限設定について

Windows SDK はシステム権限を積極的に要求しません。アプリケーションは、プロセスが設定された送信先アドレスとキャッシュディレクトリにアクセスできることを保証する必要があります。WebView2、ウィンドウハンドル、ネットワークコンポーネントは、ホストアプリケーション自身の権限とセキュリティポリシーに従います。

デフォルトの動作

データ .NET / C# Native C/C++
URL Query 非機密の値は保持し、デフォルトで機密パラメータを <redacted> に置き換えます 同じ
HTTP Header デフォルトで認証系 Header を収集しマスキングします 同じ
ユーザーとカスタム属性 DataModifier または LineDataModifier でマスキングできます 同じ
Log の内容と属性 DataModifier または LineDataModifier でマスキングできます 同じ
Trace Header ShouldTrace/should_trace が許可する送信先にのみ送信されます 同じ

デフォルトの機密 Query 名には、token、access_token、refresh_token、client_secret、password、passwd、secret、api_key、apikey、auth、authorization が含まれます。デフォルトの機密 Header 名には、Authorization、Cookie、Set-Cookie、Proxy-Authorization、X-Api-Key、X-Auth-Token、X-Datakit-Token が含まれます。

統一された処理順序

RUM、Log、WebView、Native Browser Bridge のデータは、ディスクキャッシュに書き込まれる前に同じ処理順序が使用されます。

  1. DataModifier: 既存の Tag と Field を個別に処理します。null を返すか、Native コールバックが 0 を返した場合は元の値を保持します。
  2. LineDataModifier: Measurement 単位でデータ全体を確認し、既存のフィールドを更新します。新規フィールドは無視されます。
  3. HTTP プライバシールール: URL Query、リクエスト Header、レスポンス Header を最後に処理し、カスタム Modifier が設定されたネットワークマスキングルールを迂回しないようにします。
  4. フォーマットしてキャッシュに書き込みます。

Modifier は複数の収集スレッドで並行して実行される可能性があるため、コールバック内で時間のかかる操作を実行しないでください。コールバックの例外によってデータ収集が中断されることはなく、該当フィールドは元の値が保持されます。

プライバシー設定

GuanceSdk.Init(new GuanceConfig
{
    DatawayUrl = "https://openway.guance.com",
    ClientToken = "<client-token>",
    RumAppId = "<rum-app-id>",
    DataModifier = (key, value) =>
    {
        return key switch
        {
            "user_email" => "<redacted>",
            "phone" => "<redacted>",
            _ => null
        };
    },
    LineDataModifier = (measurement, data) =>
    {
        if (measurement == "error" && data.ContainsKey("error_message"))
        {
            return new Dictionary<string, object?>
            {
                ["error_message"] = "<redacted-error>"
            };
        }
        return null;
    },
    Privacy = new RumPrivacyConfig
    {
        CaptureHttpHeaders = true,
        CaptureUrlQueryString = true,
        RedactAllUrlQueryValues = false,
        RedactedValue = "<redacted>",
        RedactedHeaderNames = new[]
        {
            "Authorization",
            "Cookie",
            "Set-Cookie",
            "X-Api-Key"
        },
        RedactedQueryParameterNames = new[]
        {
            "token",
            "password",
            "secret"
        }
    }
});
パラメータ デフォルト値 説明
CaptureHttpHeaders true マスキングされたリクエストおよびレスポンス Header を記録するかどうか。
CaptureUrlQueryString true URL Query を保持するかどうか。オフにすると Query 全体が削除されます。
RedactAllUrlQueryValues false すべての Query 値を非表示にするかどうか。
RedactedValue <redacted> マスキング置換テキスト。
RedactedHeaderNames 認証系 Header Header 名のリスト。大文字と小文字を区別しません。
RedactedQueryParameterNames 機密パラメータのリスト Query パラメータ名のリスト。大文字と小文字を区別しません。

DataModifier と LineDataModifier はどちらもオプションの設定です。デフォルトの HTTP マスキングのみが必要な場合は、Privacy だけを設定してください。

#include <cstring>

static int modify_data(
    const char* key,
    const guance_data_value*,
    guance_data_value* replacement,
    void*) {
    if (std::strcmp(key, "user_email") != 0) {
        return 0;
    }
    replacement->type = GUANCE_DATA_VALUE_STRING;
    replacement->value.string_value = "<redacted>";
    return 1;
}

static void modify_line(
    const char* measurement,
    guance_data_item* data,
    uint32_t data_count,
    void*) {
    if (std::strcmp(measurement, "error") != 0) {
        return;
    }
    for (uint32_t index = 0; index < data_count; ++index) {
        if (std::strcmp(data[index].key, "error_message") == 0) {
            data[index].value.type = GUANCE_DATA_VALUE_STRING;
            data[index].value.value.string_value = "<redacted-error>";
        }
    }
}

guance_sdk_config sdk_config;
guance_sdk_config_init(&sdk_config);
sdk_config.dataway_url = "https://openway.guance.com";
sdk_config.client_token = "<client-token>";
sdk_config.rum_app_id = "<rum-app-id>";
guance_sdk_handle rum = guance_sdk_init(&sdk_config);

guance_data_modifier_config modifiers;
guance_data_modifier_config_init(&modifiers);
modifiers.data_modifier = modify_data;
modifiers.line_data_modifier = modify_line;
guance_configure_data_modifiers(rum, &modifiers);

const char* redacted_query_names[] = {
    "token",
    "password",
    "secret"
};
const char* redacted_header_names[] = {
    "Authorization",
    "Cookie",
    "Set-Cookie",
    "X-Api-Key"
};

guance_rum_resource_collection_config privacy;
guance_rum_resource_collection_config_init(&privacy);
privacy.capture_http_headers = 1;
privacy.capture_url_query = 1;
privacy.redact_all_url_query_values = 0;
privacy.redacted_value = "<redacted>";
privacy.redacted_query_parameter_names = redacted_query_names;
privacy.redacted_query_parameter_name_count = 3;
privacy.redacted_header_names = redacted_header_names;
privacy.redacted_header_name_count = 4;

guance_rum_configure_resource_collection(rum, &privacy);

すべての Native 設定構造体では、対応する *_init() を先に呼び出す必要があります。HTTP プライバシー設定は Header と Query のリストをコピーします。Modifier は関数ポインタと user_data を保持するため、再設定または guance_sdk_shutdown() の前まで有効である必要があります。Modifier は並行して実行される可能性があり、同じ SDK Handle を再呼び出しすることはできません。

データマスキング

ネットワークデータ収集の無効化

GuanceSdk.EnableAutomaticInstrumentation(new AutomaticInstrumentationOptions
{
    EnableHttpClient = false,
    EnableWebView = false
});

Header または Query のみを無効にする場合:

Privacy = new RumPrivacyConfig
{
    CaptureHttpHeaders = false,
    CaptureUrlQueryString = false
}
guance_rum_resource_collection_config resource_config;
guance_rum_resource_collection_config_init(&resource_config);
resource_config.enabled = 0;
guance_rum_configure_resource_collection(rum, &resource_config);

対象のフィルタリング

Native Resource では、should_collect を使用して収集対象をフィルタリングできます。C# では、ビジネス Handler または手動の Resource 境界で同等のフィルタリングを実行する必要があります。Trace Header は、Trace 設定 の送信先ホワイトリストを使用して、信頼できるサービスに制限する必要があります。

ユーザー、Log、カスタムフィールド

  • パスワード、Token、身分証明書、支払い情報、完全な認証 Header を書き込まないでください。
  • ユーザー ID には、ビジネスで許可された安定した識別子またはハッシュ値を使用してください。
  • Log の内容と属性はビジネス上の機密フィールドを自動的に認識しないため、Modifier または AddLog() の前にマスキングを実行してください。
  • カスタム属性は SDK の予約フィールドを上書きできません。競合するフィールドは無視されます。

Session Replay のプライバシー

実験的な機能

Session Replay はデフォルトで無効です。明示的に有効にして検証することもできますが、依然として実験的な機能です。有効にする前に、デフォルトポリシーと要素レベルの上書きがビジネスのプライバシー要件を満たしていることを確認する必要があります。

Session Replay のグローバルプライバシーレベル、要素レベルの上書き、WebView2/Electron のプライバシー境界は、Windows セッションリプレイのプライバシー設定 と プライバシーの上書き にまとめられています。

フィードバック

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