Aller au contenu principal

Masquer les PII des traces OpenTelemetry dans Unity Catalog

Les données de trace OpenTelemetry (OTel) contiennent souvent des informations personnelles identifiables (PII) telles que des adresses e-mail, des numéros de téléphone et des numéros de carte de crédit intégrées dans les attributs d'étendue, les corps de log et les métadonnées de ressources. Le partage généralisé de ces données de trace à des fins de debugging ou d'observabilité peut créer des risques de conformité et de confidentialité.

Cette page décrit une solution type qui utilise les AI Functions et les Spark Declarative Pipelines pour rédiger de manière incrémentielle les informations PII des tables OTel brutes et écrire les résultats dans un ensemble distinct de tables avec des contrôles d’accès plus larges. Un Job de rétention configurable gère le nettoyage des données brutes. Déployez les assets téléchargeables dans votre propre workspace et adaptez-les à vos exigences.

Vous pouvez utiliser cette solution avec toutes les traces OTel stockées dans Unity Catalog, y compris Stocker les traces OpenTelemetry dans Unity Catalog.

Pour éviter que les PII ne soient stockées en premier lieu, masquez les PII des traces avant l'exportation.

Comment cela fonctionne

Aperçu de la rédaction des IPI OTel

Un Lakeflow pipeline lit de manière incrémentielle de nouvelles étendues OTel, applique ai_mask pour masquer les PII (e-mails, téléphones, SSN, cartes de crédit, noms et adresses), et écrit dans les tables masquées. Un Job planifié gère le nettoyage optionnel de la rétention sur les tables brutes.

Prérequis

download les ressources

download les fichiers suivants et importez-les dans votre Workspace :

Fichier

Description

deploy_notebook.py

Notebook de déploiement guidé — alternative interactive à deploy.sh.

deploy.sh

Script de déploiement CLI.

pii_redaction_pipeline.sql

Le pipeline – tables de streaming avec ai_mask.

unified_view.sql

Vue de trace unifiée joignant les portées et les annotations.

setup_schema_and_grants.sql

Création de schémas et octroi de contrôles d’accès.

pipeline_config.JSON

Exemple de configuration de pipeline (référence).

send_pii_traces.py

Utilitaire de test qui envoie des données de test PII sous forme de spans OTel.

pii_test_data.jsonl

50 lignes de données de test PII synthétiques.

Fichier

Description

deploy_notebook.py

Notebook de déploiement guidé — alternative interactive à deploy.sh.

deploy.sh

Script de déploiement CLI.

pii_redaction_pipeline.sql

Le pipeline – tables de streaming avec ai_mask.

unified_view.sql

Vue de trace unifiée joignant les portées et les annotations.

setup_schema_and_grants.sql

Création de schémas et octroi de contrôles d’accès.

pipeline_config.JSON

Exemple de configuration de pipeline (référence).

send_pii_traces.py

Utilitaire de test qui envoie des données de test PII sous forme de spans OTel.

pii_test_data.jsonl

50 lignes de données de test PII synthétiques.

Pour plus de détails, consultez la documentation de référence.

Déployer la solution

Sélectionnez l'une des méthodes de déploiement suivantes.

Pour un déploiement étape par étape directement dans votre Workspace :

  1. Importez deploy_notebook.py dans votre Workspace, ainsi que les autres assets téléchargés. Consultez les dossiers Git Databricks.
  2. Ouvrez deploy_notebook.py dans votre workspace.
  3. Remplissez les paramètres du widget en haut (catalogue, schéma source, schéma cible et préfixe de table).
  4. Cliquez sur **Tout exécuter**. Chaque étape est validée avant de continuer.

Cette approche utilise le SDK Python Databricks (aucun CLI requis), peut être réexécutée en toute sécurité et fournit un feedback interactif à chaque étape.

parameter

Le tableau suivant décrit les paramètres du widget dans le Notebook de déploiement guidé (deploy_notebook.py) :

parameter

Description

Par défaut

catalog

Catalogue Unity Catalog pour les tables brutes et censurées.

(obligatoire)

source_schema

Schéma contenant les tables brutes OTel.

(obligatoire)

target_schema

Schéma des tables de sortie expurgées.

(obligatoire)

table_prefix

Préfixe utilisé pour les noms de table OTel.

(obligatoire)

pii_categories

Types de PII à masquer, séparés par des virgules et entre guillemets simples.

'email','phone','ssn','credit_card','name','address'

pipeline_name

Nom du pipeline.

otel-pii-redaction

retention_days

Jours de conservation des données brutes avant suppression. Une valeur vide, 0, ou none désactive la suppression.

90

redaction_pipeline_mode

Mode d'exécution du pipeline : triggered ou continuous.

triggered

redaction_trigger_frequency

Fréquence d'exécution du pipeline (mode Trigger uniquement) : hourly, every 6 hours, daily ou weekly.

daily

parameter

Description

Par défaut

catalog

Catalogue Unity Catalog pour les tables brutes et censurées.

(obligatoire)

source_schema

Schéma contenant les tables brutes OTel.

(obligatoire)

target_schema

Schéma des tables de sortie expurgées.

(obligatoire)

table_prefix

Préfixe utilisé pour les noms de table OTel.

(obligatoire)

pii_categories

Types de PII à masquer, séparés par des virgules et entre guillemets simples.

'email','phone','ssn','credit_card','name','address'

pipeline_name

Nom du pipeline.

otel-pii-redaction

retention_days

Jours de conservation des données brutes avant suppression. Une valeur vide, 0, ou none désactive la suppression.

90

redaction_pipeline_mode

Mode d'exécution du pipeline : triggered ou continuous.

triggered

redaction_trigger_frequency

Fréquence d'exécution du pipeline (mode Trigger uniquement) : hourly, every 6 hours, daily ou weekly.

daily

Les tables sources sont nommées {catalog}.{source_schema}.{table_prefix}_otel_spans, {catalog}.{source_schema}.{table_prefix}_otel_logs et {catalog}.{source_schema}.{table_prefix}_otel_annotations.

Le pipeline prend en charge deux modes d'exécution :

  • Déclencher : Crée un Job planifié qui déclenche le pipeline à la fréquence choisie. Le pipeline traite les nouvelles données à chaque exécution, puis s'arrête.
  • continu : Exécute le pipeline en continu, traitant les nouvelles données au fur et à mesure qu'elles arrivent. Aucun job de planification n'est créé. Ce mode a des coûts de compute plus élevés que le mode Trigger, car le pipeline est toujours en cours d'exécution.

Ce qui est expurgé

Le pipeline applique ai_mask aux champs suivants :

Table

Champs masqués

Portées

attributes, events, resource.attributes

Journaux

body, attributes, resource.attributes

Annotations

Passthrough (aucune PII attendue)

Table

Champs masqués

Portées

attributes, events, resource.attributes

Journaux

body, attributes, resource.attributes

Annotations

Passthrough (aucune PII attendue)

Le pipeline préserve les champs non-PII inchangés, tels que les ID de trace, les ID de span, les timestamps, les noms de service et les codes d'état.

Catégories de PII prises en charge

ai_mask est pris en charge par le LLM et reconnaît les types de PII standard, notamment : email, phone, name, address, ssn, credit_card, ip_address et date_of_birth.

ai_mask est recommandé car il gère différents formats de PII (par exemple, des numéros de téléphone écrits comme (555) 123-4567, 555.123.4567 ou +1 555-123-4567) sans nécessiter un modèle distinct pour chaque variation. Vous pouvez adapter le pipeline pour utiliser une autre méthode de masquage, par exemple des expressions régulières explicites avec regexp_replace.

Pour les modèles personnalisés, tels que les identifiants d'employés comme EMP-XXXXXX, utilisez regexp_replace avant ai_mask dans le SQL du pipeline. Pour plus de détails, consultez la référence de rédaction PII à partir des traces OTel.

Rétention et contrôle d’accès

Conservation des données brutes

Le déploiement configure une durée de vie automatique sur les tables OTel brutes afin de supprimer automatiquement les données de trace de plus de 90 jours (default : 90). Cela vous aide à vous conformer au GDPR et aux autres réglementations pour la protection des données qui exigent que les données personnelles soient supprimées après qu'elles ne soient plus nécessaires à leur objectif initial. Une fois que le pipeline a traité les étendues brutes, la durée de vie automatique (auto-TTL) supprime les originaux qui contiennent des informations personnelles identifiables (PII) conformément à votre politique de rétention. Définissez retention_days sur 0 ou none pour désactiver la suppression automatique si vous gérez la rétention séparément. Si vos exigences de conformité nécessitent des délais de suppression stricts, vous pouvez configurer un Job planifié manuellement avec DELETE et VACUUM à la place, car le calendrier exact de suppression de la durée de vie automatique (auto-TTL) n'est pas garanti.

Limiter l'accès aux tables brutes

Les tables OTel brutes contiennent des informations personnelles identifiables (PII) non expurgées et devraient avoir un accès restreint. Accordez l'accès au schéma source brut uniquement aux Service Principal de pipeline et aux administrateurs qui en ont besoin pour le debugging ou la réponse aux incidents. Toutes les analyses de routine, les tableaux de bord et les workflows d'observabilité devraient plutôt query les tables expurgées. Le fichier setup_schema_and_grants.sql comprend des exemples d'autorisations pour aider à appliquer cette séparation. Pour plus d'informations sur les privilèges Unity Catalog, consultez Gérer les privilèges dans Unity Catalog.

Testez la rédaction

Envoyer des données PII de test

Générer des étendues de test avec des PII connues pour valider la rédaction :

Bash
pip install opentelemetry-exporter-otlp-proto-http

python send_pii_traces.py <WORKSPACE_HOST> <CATALOG.SCHEMA.PREFIX_otel_spans>

Cela envoie 50 traces de test qui contiennent des e-mails, des numéros de téléphone, des numéros de sécurité sociale, des cartes de crédit, des noms et des adresses.

Valider la sortie

Après l'exécution du pipeline, comparez les étendues brutes et expurgées :

SQL
SELECT
s.span_id,
CAST(s.attributes AS STRING) AS raw,
CAST(r.attributes AS STRING) AS redacted
FROM <source_catalog>.<source_schema>.<prefix>_otel_spans s
JOIN <target_catalog>.<target_schema>.redacted_spans r
ON s.trace_id = r.trace_id AND s.span_id = r.span_id
WHERE s.name = 'pii-test-interaction'
LIMIT 5;

Ressources supplémentaires