Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce tutoriel vous montre comment configurer des stratégies ABAC de filtre de lignes et de masque de colonne dans le catalogue Unity à l’aide de SQL. Pour obtenir la version basée sur l’interface utilisateur de l’Explorateur de catalogues, consultez Tutoriel : Configurer ABAC.
Dans cet exemple, une équipe d’analyse ne peut pas accéder aux enregistrements clients de l’UE, et les SSN sont toujours masqués. Les clients qui ont consenti au partage de données ont affiché leur e-mail complet. D’autres voient une version masquée uniquement.
Ce tutoriel comprend les étapes suivantes :
- Créer des balises régies
- Créer un catalogue de catalogues Unity, un schéma et une table
- Appliquer des balises régies aux colonnes
- Créer une fonction UDF pour détecter les adresses de l’UE
- Créer une politique de filtre de lignes
- Tester le filtre de lignes
- Créer une fonction UDF pour masquer les SSN
- Créer une stratégie de masque de colonne
- Tester le masque de colonne
Une fois ces étapes terminées, vous pouvez éventuellement étendre le didacticiel avec le masquage de messagerie conditionnel (étapes 10 à 12).
Prerequisites
- Databricks Runtime 16.4 ou version supérieure, ou calcul sans serveur.
- Autorisations d’administrateur de compte ou d’administrateur d’espace de travail (pour créer des balises régies).
-
MANAGEautorisation sur le catalogue ou le schéma cible. -
EXECUTEsur les UDF.
Le calcul exécutant des runtimes plus anciens ne peut pas accéder aux tables sécurisées par ABAC.
Étape 1 : Créer des balises régies
Les balises régies sont des paires clé-valeur définies au niveau du compte. Les stratégies ABAC les utilisent pour découvrir les colonnes à filtrer ou masquer. Dans ce tutoriel, vous créez deux balises régies :
- Balise
piiavec trois valeurs autorisées :ssn,addressetemail - Balise
consentclé uniquement (sans valeurs autorisées) pour identifier les colonnes de consentement
Pour créer une balise régie, vous devez disposer de l’autorisation de création de balise régie au niveau du compte. Les administrateurs de compte et d’espace de travail ont CREATE par défaut.
- Dans votre espace de travail Azure Databricks, cliquez sur
Catalogue.
- Cliquez sur
Bouton Gérer.
- Dans le menu déroulant, cliquez sur Balises régies.
- Cliquez sur Créer une balise régie.
- Pour la clé de balise, entrez
pii. - Entrez une description pour la balise régie.
- Pour les valeurs autorisées, entrez :
ssn,address, etemail. Seules ces valeurs peuvent être affectées à cette clé d’étiquette. - Cliquez sur Créer.
- Répétez les étapes 4 à 8 pour créer une deuxième balise régie avec la clé
consent. Laissez les valeurs autorisées vides (balise clé uniquement).
Avertissement
Les données de balise sont stockées sous forme de texte brut et peuvent être répliquées globalement. N’utilisez pas de noms d’étiquettes, de valeurs ou de descripteurs susceptibles de compromettre la sécurité de vos ressources. Par exemple, n’utilisez pas de noms d’étiquettes, de valeurs ou de descripteurs qui contiennent des informations personnelles ou sensibles.
Étape 2 : Créer la table clients
Créez un catalogue, un schéma et une table avec des profils client. La has_consent colonne est utilisée ultérieurement pour le masquage de messagerie conditionnel. Les clients qui ont donné leur consentement (TRUE) ont leur e-mail complet affiché.
Exécutez les commandes suivantes dans un notebook attaché au calcul sur Databricks Runtime 16.4 ou ultérieur :
-- Create catalog (if not already exists)
CREATE CATALOG IF NOT EXISTS abac_tutorial;
USE CATALOG abac_tutorial;
-- Create schema
CREATE SCHEMA IF NOT EXISTS customers;
USE SCHEMA customers;
CREATE OR REPLACE TABLE profiles (
first_name STRING,
last_name STRING,
email STRING,
phone_number STRING,
home_address STRING,
ssn_number STRING,
has_consent BOOLEAN
);
INSERT INTO profiles (first_name, last_name, email, phone_number, home_address, ssn_number, has_consent)
VALUES
('John', 'Doe', 'john.doe@example.com', '123-456-7890', '123 Main St, NY', '123-45-6789', TRUE),
('Jane', 'Smith', 'jane.smith@example.com', '234-567-8901', '456 Oak St, CA', '234-56-7890', FALSE),
('Alice', 'Johnson', 'alice.j@example.com', '345-678-9012', '789 Pine St, TX', '345-67-8901', TRUE),
('Bob', 'Brown', 'bob.brown@example.com', '456-789-0123', '321 Maple St, FL', '456-78-9012', FALSE),
('Charlie', 'Davis', 'charlie.d@example.com', '567-890-1234', '654 Cedar St, IL', '567-89-0123', TRUE),
('Emily', 'White', 'emily.w@example.com', '678-901-2345', '987 Birch St, WA', '678-90-1234', FALSE),
('Frank', 'Miller', 'frank.m@example.com', '789-012-3456', '741 Spruce St, WA', '789-01-2345', TRUE),
('Grace', 'Wilson', 'grace.w@example.com', '890-123-4567', '852 Elm St, NV', '890-12-3456', TRUE),
('Hank', 'Moore', 'hank.moore@example.com', '901-234-5678', '963 Walnut St, CO', '901-23-4567', FALSE),
('Ivy', 'Taylor', 'ivy.taylor@example.com', '012-345-6789', '159 Aspen St, AZ', '012-34-5678', TRUE),
('Liam', 'Connor', 'liam.c@example.com', '111-222-3333', '12 Abbey Street, Dublin, Ireland EU', '111-22-3333', TRUE),
('Sophie', 'Dubois', 'sophie.d@example.com', '222-333-4444', '45 Rue de Rivoli, Paris, France Europe', '222-33-4444', FALSE),
('Hans', 'Müller', 'hans.m@example.com', '333-444-5555', '78 Berliner Str., Berlin, Germany E.U.', '333-44-5555', TRUE),
('Elena', 'Rossi', 'elena.r@example.com', '444-555-6666', '23 Via Roma, Milan, Italy Europe', '444-55-6666', FALSE),
('Johan', 'Andersson', 'johan.a@example.com', '555-666-7777', '56 Drottninggatan, Stockholm, Sweden EU', '555-66-7777', TRUE);
Étape 3 : Ajouter des balises régies aux colonnes
Étiquetez les colonnes ssn_number, home_address, et email avec la balise pii régulée. Les stratégies ABAC associent les colonnes par balise, et non par nom.
La has_consent colonne est marquée avec la consent balise régie. Cela est requis pour la stratégie de masquage prenant en charge le consentement à l’étape 11, qui passe has_consent à la fonction UDF via USING COLUMNS.
ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN ssn_number
SET TAGS ('pii' = 'ssn');
ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN home_address
SET TAGS ('pii' = 'address');
ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN email
SET TAGS ('pii' = 'email');
ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN has_consent
SET TAGS ('consent' = '');
Étape 4 : Créer une fonction UDF pour détecter les adresses UE
Cette UDF reçoit la valeur de chaque colonne marquée pii = address et retourne :
-
FALSEsi l’adresse contientEU,E.U.ouEurope— la ligne est masquée. -
TRUEsinon, la ligne est affichée.
CREATE OR REPLACE FUNCTION is_not_eu_address(address STRING)
RETURNS BOOLEAN
RETURN (
SELECT CASE
WHEN LOWER(address) LIKE '%eu%'
OR LOWER(address) LIKE '%e.u.%'
OR LOWER(address) LIKE '%europe%'
THEN FALSE
ELSE TRUE
END
);
Note
Il s’agit d’un contrôle simplifié à des fins de démonstration. En production, utilisez une méthode plus robuste telle qu’une colonne de code de pays ou une table de choix pour déterminer la région.
Étape 5 : Créer une stratégie de filtre de lignes
Pour créer une politique, vous devez avoir MANAGE sur l’objet ou être propriétaire de l’objet. Pour ajouter une fonction UDF à une stratégie, vous devez disposer EXECUTE sur la fonction UDF.
CREATE POLICY hide_eu_customers
ON SCHEMA abac_tutorial.customers
ROW FILTER is_not_eu_address
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'address') AS addr_col
USING COLUMNS (addr_col);
Vous pouvez également créer des stratégies via l’interface utilisateur de l’Explorateur de catalogues. Pour plus d’informations, consultez Créer et gérer des stratégies ABAC .
Étape 6 : Tester le filtre de lignes
Exécutez la requête suivante pour vérifier que la stratégie de filtre de lignes fonctionne.
SELECT * FROM abac_tutorial.customers.profiles;
Seules les 10 lignes non résidantes de l’UE sont retournées. Les cinq clients de l’UE (Liam, Sophie, Hans, Elena et Johan) sont cachés.
Étape 7 : Créer une fonction UDF pour masquer les SSN
Cette fonction UDF retourne un espace réservé entièrement expurgé pour toute valeur de Numéro de Sécurité Sociale transmise à celle-ci.
CREATE OR REPLACE FUNCTION redact_ssn(ssn STRING)
RETURNS STRING
RETURN '***-**-****';
Étape 8 : Créer une stratégie de masque de colonne
Créez une stratégie qui cible toutes les colonnes marquées pii = ssn et applique la redact_ssn fonction à chacune d’elles.
CREATE POLICY redact_ssn_policy
ON SCHEMA abac_tutorial.customers
COLUMN MASK redact_ssn
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'ssn') AS ssn_col
ON COLUMN ssn_col;
Étape 9 : Tester le masque de colonne
Exécutez la requête suivante pour vérifier que le filtre de lignes et le masque de colonne sont actifs.
SELECT * FROM abac_tutorial.customers.profiles;
Les SSN retournent désormais en tant que ***-**-****. Seuls les résidents non-UE sont retournés, car le filtre de lignes est également actif.
Étendre : masquage de messagerie conditionnel
Les étapes suivantes étendent le didacticiel avec le masquage des e-mails prenant en compte le consentement. Les clients qui ont choisi (has_consent = TRUE) ont leur e-mail complet affiché ; les autres voient uniquement le premier caractère et le domaine.
Étape 10 : Créer un masquage de messagerie prenant en compte le consentement
Cette UDF prend deux arguments :
-
email: valeur e-mail réelle de la colonne correspondante -
consent: valeur de lahas_consentcolonne sur la même ligne
CREATE OR REPLACE FUNCTION mask_email_by_consent(email STRING, consent BOOLEAN)
RETURNS STRING
RETURN CASE
WHEN consent = TRUE THEN email
ELSE CONCAT(LEFT(email, 1), '***@', SUBSTRING_INDEX(email, '@', -1))
END;
Étape 11 : Créer la stratégie de masquage de messagerie conditionnelle
Cette stratégie cible les colonnes marquées pii = email et transmet la has_consent colonne à la fonction UDF.
Note
La has_consent colonne a été étiquetée avec la balise gouvernée dans consent. Cela est nécessaire, car USING COLUMNS il ne peut référencer que les colonnes mises en correspondance via MATCH COLUMNS. Même si has_consent n'est pas masqué, il doit être marqué afin que la stratégie puisse passer sa valeur à la UDF.
CREATE POLICY mask_email_by_consent_policy
ON SCHEMA abac_tutorial.customers
COLUMN MASK mask_email_by_consent
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'email') AS email_col,
has_tag('consent') AS consent_col
ON COLUMN email_col
USING COLUMNS (consent_col);
Étape 12 : Tester le masquage de courrier conditionnel
Exécutez la requête suivante pour vérifier que les trois stratégies fonctionnent ensemble.
SELECT * FROM abac_tutorial.customers.profiles;
Les clients avec has_consent = TRUE voient leur e-mail complet affiché. Les clients avec has_consent = FALSE voient une version masquée. Les SSN restent entièrement masqués et seuls les clients non-UE sont retournés.
| prénom | a_consentement | courriel | numéro_de_sécurité_sociale |
|---|---|---|---|
| John | VRAI | john.doe@example.com | ***-**-**** |
| Jane | FAUX | j***@example.com | ***-**-**** |
| Alice | VRAI | alice.j@example.com | ***-**-**** |
| Bob | FAUX | b***@example.com | ***-**-**** |
| Charlie | VRAI | charlie.d@example.com | ***-**-**** |
| Emily | FAUX | e***@example.com | ***-**-**** |
| Franc | VRAI | frank.m@example.com | ***-**-**** |
| Grâce | VRAI | grace.w@example.com | ***-**-**** |
| Hank | FAUX | h***@example.com | ***-**-**** |
| Ivy | VRAI | ivy.taylor@example.com | ***-**-**** |
Résumé
Ce tutoriel a présenté trois modèles ABAC :
- Filtrage de lignes : masquer les lignes en fonction des valeurs de colonne mises en correspondance par les balises régies
- Masquage des colonnes : masquer les colonnes mises en correspondance par les balises régies
-
Masquage conditionnel : masque une colonne en fonction de la valeur d’une autre colonne sur la même ligne, en étiquetant la colonne de contexte et en la transmettant à la fonction UDF via
USING COLUMNS
Nettoyage
Pour supprimer tous les objets créés dans ce didacticiel, exécutez ce qui suit. Si vous avez ignoré les étapes de masquage de l'e-mail conditionnel, les instructions DROP POLICY mask_email_by_consent_policy et DROP FUNCTION mask_email_by_consent échouent, ce qui est attendu.
DROP POLICY hide_eu_customers ON SCHEMA abac_tutorial.customers;
DROP POLICY redact_ssn_policy ON SCHEMA abac_tutorial.customers;
DROP POLICY mask_email_by_consent_policy ON SCHEMA abac_tutorial.customers;
DROP FUNCTION IF EXISTS abac_tutorial.customers.is_not_eu_address;
DROP FUNCTION IF EXISTS abac_tutorial.customers.redact_ssn;
DROP FUNCTION IF EXISTS abac_tutorial.customers.mask_email_by_consent;
DROP TABLE IF EXISTS abac_tutorial.customers.profiles;
DROP SCHEMA IF EXISTS abac_tutorial.customers CASCADE;
Pour supprimer les balises pii et les balises régies consent, utilisez l'interface utilisateur de l'Explorateur de catalogues.