コンテンツにスキップ

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

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

権限設定について

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

デフォルトの動作

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

デフォルトの機密 Query 名には、tokenaccess_tokenrefresh_tokenclient_secretpasswordpasswdsecretapi_keyapikeyauthauthorization が含まれます。デフォルトの機密 Header 名には、AuthorizationCookieSet-CookieProxy-AuthorizationX-Api-KeyX-Auth-TokenX-Datakit-Token が含まれます。

統一処理順序

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

  1. DataModifier:既存の Tag と Field を個別に処理します。null を返すか、Native コールバックが 0 を返した場合は、元の値が保持されます。
  2. LineDataModifier:Measurement ごとにデータ全体を確認し、既存のフィールドを更新します。新しく追加されたフィールドは無視されます。
  3. HTTP プライバシールール:最後に URL Query、リクエストヘッダー、レスポンスヘッダーを処理し、カスタム 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 マスキングされたリクエストヘッダーとレスポンスヘッダーを記録するかどうか。
CaptureUrlQueryString true URL Query を保持するかどうか。無効にすると Query 全体が削除されます。
RedactAllUrlQueryValues false すべての Query の値を隠すかどうか。
RedactedValue <redacted> マスキング置換テキスト。
RedactedHeaderNames 認証関連ヘッダー ヘッダー名のリスト。大文字と小文字を区別しません。
RedactedQueryParameterNames 機密パラメータ名のリスト Query パラメータ名のリスト。大文字と小文字を区別しません。

DataModifierLineDataModifier はどちらもオプションの設定です。デフォルトの 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 プライバシー設定は、ヘッダー名と Query 名のリストをコピーします。Modifier は関数ポインタと user_data を保持するため、再設定または guance_sdk_shutdown() が呼び出されるまで有効である必要があります。Modifier は同時に実行される可能性があり、同じ SDK Handle を再呼び出しすることはできません。

データマスキング

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

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

ヘッダーまたは 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# では、ビジネスハンドラーまたは手動 Resource バウンダリーで同等のフィルタリングを実行してください。Trace Header は、Trace 設定 のターゲット許可リストを使用して、信頼できるサービスに限定する必要があります。

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

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

Session Replay のプライバシー

実験的機能

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

Session Replay のグローバルプライバシーレベル、要素レベルのオーバーライド、および WebView2/Electron のプライバシーバウンダリーは、Windows セッションリプレイのプライバシー設定プライバシーオーバーライド にまとめられています。

フィードバック

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