Masquer les colonnes PII par type avec l'introspection de tag
Ce tutoriel montre comment utiliser la valeur d’un tag de colonne gouvernée pour choisir une règle de masquage pour les informations personnellement identifiables (PII). Une politique de masque de colonne basée sur des attributs (ABAC) unique couvre chaque colonne taguée en tant qu’adresse e-mail ou numéro de téléphone, et une fonction définie par l’utilisateur (UDF) SQL applique le masque approprié à chaque colonne. La politique utilise la fonction d’introspection de tag get_column_tag_value() pour transmettre la valeur de tag de chaque colonne à l’UDF.
Pour la syntaxe et le comportement des fonctions d’introspection de tag, consultez Fonctions d’introspection de tag.
Prérequis
- Un SQL warehouse, un compute serverless ou Databricks Runtime 18 LTS et versions supérieures pour créer la politique. Pour query la table protégée, utilisez n’importe quel compute répondant aux exigences de compute ABAC.
- Le privilège
CREATEpour les tags gouvernés au niveau du compte. Les administrateurs du compte et les administrateurs du Workspace ont ce privilège par default. - Le privilège
ASSIGNsur le tag gouverné que vous créez. Les administrateurs de compte possèdent ce privilège par default. Voir Gérer les autorisations sur les tags gouvernés. - Le privilège
APPLY TAGsur la tablecontactspour définir les balises de colonne à l’étape 3. MANAGEautorisation sur le catalogue ou le schéma cible.EXECUTEsur l'UDF.
Scénario
Votre organisation classifie les colonnes PII avec la balise régie pii_type, dont la valeur identifie le type de données, tel que email ou phone. Chaque type nécessite un masque différent : masquer la partie locale d’une adresse e-mail, mais conserver les quatre derniers chiffres d’un numéro de téléphone.
Grâce à l’introspection des étiquettes, une seule politique protège toutes les colonnes étiquetées avec pii_type, tout en appliquant un masque différent pour chaque type d’informations personnellement identifiables (PII).
La politique fait correspondre toutes les colonnes avec la balise pii_type et transmet la valeur de la balise de chaque colonne à l'UDF. L'UDF utilise cette valeur pour sélectionner le masque approprié.
Vous pouvez réutiliser une seule politique sur plusieurs types de PII plutôt que de créer une politique distincte pour chaque type.
Le besoin d'introspection des balises dépend de la détermination de la manière dont l'UDF masque les données par la valeur de la balise :
Quand | Motif |
|---|---|
L'UDF applique différents masques en fonction de la valeur du tag |
|
L'UDF applique le même masque à toutes les colonnes correspondantes | Une condition |
Étape 1 : Créer un tag gouverné
Pour créer une balise régie avec des valeurs autorisées pour les deux types de PII, exécutez :
CREATE GOVERNED TAG pii_type
DESCRIPTION 'PII type used by the ABAC tag introspection tutorial'
VALUES ('email', 'phone');
Les clés de tag gérées sont uniques au sein du compte. Si un tag géré nommé pii_type existe déjà, l’instruction renvoie une erreur ALREADY_EXISTS. Choisissez une clé différente et utilisez-la tout au long du tutoriel. Pour la syntaxe complète, consultez CRÉER UN TAG GÉRÉ.
Les données des tags sont stockées en texte clair et peuvent être répliquées à l’échelle mondiale. N’utilisez pas de noms de tags, de valeurs ou de descripteurs susceptibles de compromettre la sécurité de vos ressources. Par exemple, n’utilisez pas de noms, de valeurs ou de descripteurs de tags contenant des informations personnelles ou sensibles.
Étape 2 : Créer des données d’exemple
Créez un catalogue, un schéma et une table contacts avec une colonne d'e-mail et une colonne de téléphone :
CREATE CATALOG IF NOT EXISTS abac_tutorial;
USE CATALOG abac_tutorial;
CREATE SCHEMA IF NOT EXISTS introspection_demo;
USE SCHEMA introspection_demo;
CREATE OR REPLACE TABLE contacts (
contact_id INT,
email STRING,
phone STRING
);
INSERT INTO contacts VALUES
(1, 'alex@example.com', '123-456-7890'),
(2, 'sam@example.com', '234-567-8901');
Étape 3 : Appliquer le tag gouverné
Balisez les deux colonnes avec des valeurs différentes de la même clé de balise :
ALTER TABLE contacts
ALTER COLUMN email SET TAGS ('pii_type' = 'email');
ALTER TABLE contacts
ALTER COLUMN phone SET TAGS ('pii_type' = 'phone');
Les deux colonnes partagent désormais la clé de tag pii_type. La valeur du tag indique à l'UDF quel masque appliquer.
Étape 4 : Créer l’UDF de masquage
Créer une fonction UDF SQL qui prend la valeur de la colonne et son type PII :
CREATE OR REPLACE FUNCTION abac_tutorial.introspection_demo.mask_pii_by_type(
col_value STRING,
pii_type STRING
)
RETURNS STRING
RETURN CASE
WHEN col_value IS NULL THEN NULL
WHEN pii_type = 'email' THEN regexp_replace(col_value, '(^[^@]+)', '***')
WHEN pii_type = 'phone' THEN concat('***-***-', right(col_value, 4))
ELSE '***'
END;
La branch ELSE masque entièrement la valeur si l'UDF reçoit un type PII qu'elle ne reconnaît pas, ou aucun type du tout.
Étape 5 : créer la politique de masque de colonne
Créer une politique qui s'applique à chaque colonne du schéma avec le tag pii_type :
CREATE POLICY mask_pii_columns
ON SCHEMA abac_tutorial.introspection_demo
COLUMN MASK abac_tutorial.introspection_demo.mask_pii_by_type
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag('pii_type') AS pii_col
ON COLUMN pii_col
USING COLUMNS (get_column_tag_value(pii_col, 'pii_type'));
Dans cette politique :
has_tag('pii_type')correspond à chaque colonne qui possède le tag, quelle que soit sa valeur.ON COLUMN pii_colpasse les données de la colonne correspondante comme premier argument de l'UDF.USING COLUMNS (get_column_tag_value(pii_col, 'pii_type'))transmet la valeur de tag de cette colonne,emailouphone, comme deuxième argument.
Étape 6 : Vérifier les résultats
Comme la politique s’applique à account users, elle s’applique également à vous. Pour vérifier les valeurs masquées, exécutez :
SELECT * FROM abac_tutorial.introspection_demo.contacts;
La query retourne :
contact_id email phone
1 ***@example.com ***-***-7890
2 ***@example.com ***-***-8901
Les colonnes e-mail et téléphone sont masquées différemment, mais la même politique protège les deux.
Pourquoi ce modèle fonctionne
La politique fait correspondre les colonnes en fonction de la clé de balise, indépendamment du fait que la valeur soit email ou phone. L'UDF reçoit la valeur de la balise et applique le masque correspondant.
Pour prendre en charge un autre type de PII, tel que ssn:
- Ajoutez
ssnaux valeurs autorisées du tag gouverné. - Ajoutez une branch
ssnà l’UDF. - Marquez les nouvelles colonnes.
La politique ne change pas.
Ce modèle consolide les politiques qui ne diffèrent que par la manière dont elles masquent des données. Si différents types de PII nécessitent des principaux TO ou EXCEPT différents, vous avez toujours besoin de politiques distinctes. Consultez Implémenter le masquage de colonne multidomaine avec des niveaux de sensibilité pour obtenir un exemple.
Pour l'introspection de tag de table avec get_tag_value(), voir Fonctions d'introspection de tag.
Nettoyer
Pour supprimer les objets créés dans ce tutoriel, exécutez :
DROP POLICY mask_pii_columns ON SCHEMA abac_tutorial.introspection_demo;
DROP FUNCTION IF EXISTS abac_tutorial.introspection_demo.mask_pii_by_type;
DROP TABLE IF EXISTS abac_tutorial.introspection_demo.contacts;
DROP SCHEMA IF EXISTS abac_tutorial.introspection_demo CASCADE;
D’autres tutoriels ABAC utilisent également le catalogue abac_tutorial, donc ce nettoyage le laisse en place. Pour le supprimer, exécutez DROP CATALOG IF EXISTS abac_tutorial CASCADE.
Pour supprimer le tag gouverné, supprimez d'abord la politique, puis exécutez :
DROP GOVERNED TAG pii_type;