Sécuriser les nouvelles tables par default avec des tags de contrôle
Ce tutoriel montre comment verrouiller automatiquement les nouvelles tables et les libérer seulement après qu'un data steward a examiné et classifié leur contenu. Il utilise :
- Une balise de contrôle de niveau schéma
review_statuspour que chaque nouvelle table du schéma soit masquée par default - Classification des données pour détecter et étiqueter automatiquement les colonnes sensibles avec
class.*balises système - La fonction intégrée
system.data_classification.mask_valuepour le masquage tenant compte du type - Deux stratégies : une qui masque toutes les colonnes tant qu'une table est en attente de révision, et une qui masque uniquement les colonnes classifiées après révision.
Prérequis
- Databricks Runtime 16.4 ou version supérieure, ou compute serverless.
- Autorisations d'administrateur de compte ou d'administrateur de workspace (pour créer des tags régis et activer la classification des données).
MANAGEautorisation sur le catalogue ou le schéma cible.EXECUTEsur les UDF.- Un Notebook SQL ou un éditeur de query.
Scénario
Votre organisation ajoute régulièrement de nouvelles tables à un schéma Unity Catalog à partir d'acquisitions, d'intégrations de Partenaires ou de nouvelles fonctionnalités de produit. Par default, tout utilisateur disposant de SELECT sur le schéma peut immédiatement query de nouvelles tables, y compris les colonnes qui pourraient contenir des PII non classifiées.
Le modèle de balise de contrôle y remédie : une balise review_status = pending au niveau du schéma fait que chaque nouvelle table du schéma est entièrement masquée par default. La classification des données analyse la table en arrière-plan et applique class.* tags aux colonnes sensibles détectées. Après qu'un data steward examine les classifications et corrige les faux positifs, il fait passer review_status à reviewed au niveau de la table. Cela remplace le tag de schéma hérité, et une deuxième stratégie prend le relais : masquant uniquement les colonnes taguées class.*tout en laissant les colonnes non sensibles accessibles.
Étape 1 : Activer la classification des données sur le catalogue
La classification des données analyse les tables en arrière-plan et applique class.* tags régis par le système, tels que class.name, class.email_address et class.us_ssn. Aucun tag personnalisé n'est requis pour la détection au niveau des colonnes.
- Dans l'Explorateur de catalogue, sélectionnez votre catalogue et accédez au tab Détails .
- À côté de Classification des données , cliquez sur Activer .
- Choisissez facultativement les schémas à inclure.
L'étiquetage automatique est activé ultérieurement, depuis la page des résultats de la Classification des données après examen des détections initiales (Étape 6).
Pour plus de détails, consultez la section Classification des données.
Étape 2 : Créez le tag gouverné review_status
Créez le tag gouverné suivant dans l'interface utilisateur de l'Explorateur de catalogues ( Catalogue > Gouverner > Tags gouvernés > Créer un tag gouverné ) :
Clé de tag | Valeurs autorisées |
|---|---|
|
|
Les données des tags sont stockées en texte brut et peuvent être répliquées à l’échelle mondiale. N’utilisez pas de noms de tags, de valeurs ou de descripteurs qui pourraient compromettre la sécurité de vos ressources. Par exemple, n’utilisez pas de noms de tags, de valeurs ou de descripteurs contenant des informations personnelles ou sensibles.
Étape 3 : Créez le schéma et appliquez le tag de contrôle
Créez un schéma et définissez la balise de contrôle sur pending. Chaque table créée dans ce schéma hérite automatiquement de ce tag.
CREATE CATALOG IF NOT EXISTS abac_tutorial;
USE CATALOG abac_tutorial;
CREATE SCHEMA IF NOT EXISTS secure_default;
ALTER SCHEMA abac_tutorial.secure_default
SET TAGS ('review_status' = 'pending');
Étape 4 : Créer la politique en attente de vérification
Quand une table a review_status = pending, toutes les colonnes sont masquées. MATCH COLUMNS TRUE correspond à chaque colonne indépendamment des étiquettes.
system.data_classification.mask_value est une fonction de masquage sensible aux types fournie par Databricks. Il renvoie un espace réservé sécurisé basé sur le type de données d'exécution. Par exemple, il renvoie 0 pour les entiers, DATE '1970-01-01' pour les dates et un hachage SHA-256 pour les chaînes de caractères. Aucune UDF personnalisée n'est nécessaire.
CREATE POLICY review_pending_policy
ON SCHEMA abac_tutorial.secure_default
COLUMN MASK system.data_classification.mask_value
TO `account users`
FOR TABLES
WHEN has_tag_value('review_status', 'pending')
MATCH COLUMNS TRUE AS m ON COLUMN m;
Pour exempter des groupes spécifiques de la politique, ajoutez une clause EXCEPT. Par exemple, les utilisateurs de compte `TO \` SAUF le groupe `lets members of the` contournent le masque et voient les données non masquées.
Étape 5 : Créer une table et vérifier le verrouillage
Créer une table dans le schéma. Il hérite de review_status = pending du schéma, donc toutes les colonnes sont masquées immédiatement.
CREATE OR REPLACE TABLE abac_tutorial.secure_default.employee_directory (
id INT,
full_name STRING,
personal_email STRING,
ssn_number STRING,
phone STRING,
office_location STRING,
title STRING,
team STRING
);
INSERT INTO abac_tutorial.secure_default.employee_directory VALUES
(1, 'Alice Johnson', 'alice.j@gmail.com', '123-45-6789', '555-0101', 'NYC HQ Floor 12', 'Staff Engineer', 'Platform'),
(2, 'Bob Smith', 'bob.smith@yahoo.com', '234-56-7890', '555-0202', 'LA Office Suite 4', 'Sales Director', 'Enterprise'),
(3, 'Carol White', 'carol.w@outlook.com', '345-67-8901', '555-0303', 'Chicago Rm 301', 'Senior Engineer', 'Platform'),
(4, 'David Lee', 'david.lee@gmail.com', '456-78-9012', '555-0404', 'Houston Floor 2', 'Marketing Lead', 'Growth'),
(5, 'Eva Martinez', 'eva.m@hotmail.com', '567-89-0123', '555-0505', 'Phoenix Building B', 'HR Business Partner', 'People');
Exécutez la query suivante pour confirmer que toutes les colonnes sont masquées.
SELECT * FROM abac_tutorial.secure_default.employee_directory;
Étape 6 : Examiner les classifications et activer le balisage automatique
Une fois que la classification des données a analysé la table (dans les 24 heures suivant son activation), examinez les détections et activez l'étiquetage automatique afin que les étiquettes class.* soient appliquées aux détections existantes et futures.
- Dans l'Explorateur de catalogue, sélectionnez votre catalogue et accédez au tab Détails .
- À côté de Classification des données , cliquez sur Afficher les résultats .
- Passez en revue les détections et fournissez des commentaires sur les erreurs en cliquant sur l’icône Exclure à côté des détections incorrectes.
- Activez le tagging automatique pour les tags de classification que vous souhaitez appliquer. Les tags sont renseignés lors de la prochaine analyse (dans les 24 heures).
Pour plus de détails sur l'interface utilisateur de classification des données et l'étiquetage automatique, consultez Afficher les résultats de la classification et Activer l'étiquetage automatique.
Pour ce tutoriel, exécutez ce qui suit pour simuler les class.* tags que l'étiquetage automatique appliquerait, afin que vous puissiez voir le flux de bout en bout sans attendre un scan en arrière-plan.
-- Simulate Data Classification tags (in production, these are applied automatically)
ALTER TABLE abac_tutorial.secure_default.employee_directory
ALTER COLUMN full_name SET TAGS ('class.name' = '');
ALTER TABLE abac_tutorial.secure_default.employee_directory
ALTER COLUMN personal_email SET TAGS ('class.email_address' = '');
ALTER TABLE abac_tutorial.secure_default.employee_directory
ALTER COLUMN ssn_number SET TAGS ('class.us_ssn' = '');
ALTER TABLE abac_tutorial.secure_default.employee_directory
ALTER COLUMN phone SET TAGS ('class.phone_number' = '');
Étape 7 : Créer la politique révisée
Lorsqu'une table est marquée comme reviewed, seules les colonnes marquées avec les tags class.* sont masquées. Les colonnes non classifiées deviennent visibles.
CREATE POLICY review_complete_policy
ON SCHEMA abac_tutorial.secure_default
COLUMN MASK system.data_classification.mask_value
TO `account users`
FOR TABLES
WHEN has_tag_value('review_status', 'reviewed')
MATCH COLUMNS (
has_tag('class.name')
OR has_tag('class.email_address')
OR has_tag('class.us_ssn')
OR has_tag('class.phone_number')
OR has_tag('class.credit_card')
OR has_tag('class.date_of_birth')
) AS m
ON COLUMN m;
Étape 8 : Inversez le tag de contrôle et vérifiez
Marquez la table comme examinée. Le tag reviewed au niveau de la table remplace le tag pending hérité au niveau du schéma, de sorte que la politique en attente ne s'applique plus et que la politique révisée prend le relais.
ALTER TABLE abac_tutorial.secure_default.employee_directory
SET TAGS ('review_status' = 'reviewed');
Exécutez la query suivante pour confirmer le changement. Les colonnes avec class.* tags (full_name, personal_email, ssn_number, phone) restent masquées. Les colonnes non classifiées (id, office_location, title, team) sont maintenant visibles.
SELECT * FROM abac_tutorial.secure_default.employee_directory;
Étape 9 : Vérifiez l'héritage automatique pour les nouvelles tables.
Créez une autre table dans le même schéma. Il hérite de review_status = pending et est entièrement verrouillé automatiquement. Aucune configuration supplémentaire n'est nécessaire.
CREATE OR REPLACE TABLE abac_tutorial.secure_default.transaction_log (
txn_id INT, account_holder STRING, amount DOUBLE, txn_date DATE, description STRING
);
INSERT INTO abac_tutorial.secure_default.transaction_log VALUES
(1001, 'Alice Johnson', 2500.00, '2026-01-15', 'Wire transfer'),
(1002, 'Bob Smith', 1800.00, '2026-01-16', 'Direct deposit'),
(1003, 'Carol White', 4200.00, '2026-01-17', 'Invoice payment');
Exécutez la query suivante pour confirmer que la nouvelle table est entièrement masquée. Après que la classification des données l'a analysé, seules les colonnes balisées class.*restent masquées après être passé à reviewed.
SELECT * FROM abac_tutorial.secure_default.transaction_log;
Nettoyer
Pour supprimer tous les objets créés dans ce tutoriel, exécutez ce qui suit.
DROP POLICY review_pending_policy ON SCHEMA abac_tutorial.secure_default;
DROP POLICY review_complete_policy ON SCHEMA abac_tutorial.secure_default;
DROP TABLE IF EXISTS abac_tutorial.secure_default.employee_directory;
DROP TABLE IF EXISTS abac_tutorial.secure_default.transaction_log;
DROP SCHEMA IF EXISTS abac_tutorial.secure_default CASCADE;
DROP CATALOG IF EXISTS abac_tutorial;
Pour supprimer le tag gouverné review_status, utilisez l'interface utilisateur de l'Explorateur de catalogues.