Tutoriel : Configurer ABAC

Ce tutoriel vous montre comment configurer des stratégies de contrôle d’accès basées sur les attributs (ABAC) utilisant le filtre de lignes et le masque de colonne dans Unity Catalog à l’aide de l’interface utilisateur de l’Explorateur de catalogues. Pour obtenir une version complète basée sur SQL qui couvre également le masquage des e-mails conditionnels, consultez tutoriel : Configurer ABAC avec SQL.

Dans cet exemple, une équipe d’analytique américaine ne doit pas être en mesure d’accéder aux enregistrements client de l’UE ou aux SSN. Toutefois, ils doivent être en mesure d’accéder à d’autres clients et données client dans la même table. Ce tutoriel comprend les étapes suivantes :

  1. Créer une balise régie
  2. Créer un catalogue de catalogues Unity, un schéma et une table
  3. Appliquer des balises régies aux colonnes
  4. Créer un UDF pour identifier les données clients de l’UE
  5. Créer une politique de filtre de lignes
  6. Créer une fonction UDF pour masquer les SSN
  7. Créer une stratégie de masquage de colonne
  8. Sélectionner votre table à l’aide des stratégies

Pour une démonstration de la configuration d’ABAC, consultez Découvrez le contrôle d'accès basé sur les attributs (ABAC) avec Unity Catalog.

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).
  • Pour appliquer des balises régies aux colonnes (étape 3) : le ASSIGN privilège sur l’étiquette régie (les administrateurs de compte ont cette valeur par défaut) et le APPLY TAG privilège sur la table cible.
  • MANAGE autorisation sur le catalogue ou le schéma cible.
  • EXECUTE sur les UDF.

Le calcul exécutant des runtimes plus anciens ne peut pas accéder aux tables sécurisées par ABAC. En guise de solution de contournement temporaire, vous pouvez configurer ABAC pour qu’il s’applique uniquement à un groupe spécifique. Ajoutez les utilisateurs que vous souhaitez restreindre à ce groupe. Les utilisateurs qui ne sont pas dans le groupe peuvent toujours accéder aux tables.

Étape 1 : Créer une balise régie

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.

  1. Dans votre espace de travail Azure Databricks, cliquez sur l’icône Données.Catalogue.

  2. Cliquez sur l’icône Bouclier.Bouton Gérer.

  3. Dans le menu déroulant, cliquez sur Étiquettes gouvernées.

  4. Cliquez sur Créer une balise régie.

  5. Entrez la clé d’étiquette pii.

  6. Entrez une description pour la balise régie.

  7. Entrez les valeurs autorisées pour la balise : ssn et address. Seules ces valeurs peuvent être affectées à cette clé d’étiquette.

    Tutoriel : créer une stratégie d’étiquette.

  8. Cliquez sur Créer.

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

Pour suivre ces étapes, vous devez disposer de l’autorisation CREATE CATALOG sur votre metastore du catalogue Unity. Vous pouvez également créer la table dans un schéma sur lequel vous disposez de l’autorisation CREATE TABLE .

  1. Dans la barre latérale, cliquez sur Nouveau>Notebook.
  2. Sélectionnez SQL comme langue de notebook.
  3. Cliquez sur Se connecter et attacher le bloc-notes à une ressource de calcul.
  4. Ajoutez les commandes suivantes au notebook et exécutez-les :
-- Create catalog (if not already exists)
CREATE CATALOG IF NOT EXISTS abac;
USE CATALOG abac;

-- Create schema
CREATE SCHEMA IF NOT EXISTS customers;
USE SCHEMA customers;

-- Create table
CREATE TABLE IF NOT EXISTS profiles (
    First_Name STRING,
    Last_Name STRING,
    Phone_Number STRING,
    Address STRING,
    SSN STRING
)
USING DELTA;

-- Insert data
INSERT INTO profiles (First_Name, Last_Name, Phone_Number, Address, SSN)
VALUES
('John', 'Doe', '123-456-7890', '123 Main St, NY', '123-45-6789'),
('Jane', 'Smith', '234-567-8901', '456 Oak St, CA', '234-56-7890'),
('Alice', 'Johnson', '345-678-9012', '789 Pine St, TX', '345-67-8901'),
('Bob', 'Brown', '456-789-0123', '321 Maple St, FL', '456-78-9012'),
('Charlie', 'Davis', '567-890-1234', '654 Cedar St, IL', '567-89-0123'),
('Emily', 'White', '678-901-2345', '987 Birch St, WA', '678-90-1234'),
('Frank', 'Miller', '789-012-3456', '741 Spruce St, WA', '789-01-2345'),
('Grace', 'Wilson', '890-123-4567', '852 Elm St, NV', '890-12-3456'),
('Hank', 'Moore', '901-234-5678', '963 Walnut St, CO', '901-23-4567'),
('Ivy', 'Taylor', '012-345-6789', '159 Aspen St, AZ', '012-34-5678'),
('Liam', 'Connor', '111-222-3333', '12 Abbey Street, Dublin, Ireland EU', '111-22-3333'),
('Sophie', 'Dubois', '222-333-4444', '45 Rue de Rivoli, Paris, France Europe', '222-33-4444'),
('Hans', 'Müller', '333-444-5555', '78 Berliner Str., Berlin, Germany E.U.', '333-44-5555'),
('Elena', 'Rossi', '444-555-6666', '23 Via Roma, Milan, Italy Europe', '444-55-6666'),
('Johan', 'Andersson', '555-666-7777', '56 Drottninggatan, Stockholm, Sweden EU', '555-66-7777');

Étape 3 : Ajouter des balises régies aux colonnes d’informations d’identification personnelle

Ajoutez la commande suivante au notebook et exécutez-la :

-- Add the governed tag to ssn column
ALTER TABLE abac.customers.profiles
ALTER COLUMN SSN
SET TAGS ('pii' = 'ssn');

-- Add governed tag to address column
ALTER TABLE abac.customers.profiles
ALTER COLUMN Address
SET TAGS ('pii' = 'address');

Étape 4 : Créer une fonction UDF pour rechercher des adresses UE

Ajoutez la commande suivante au notebook et exécutez-la :

-- Determine if an address is not in the EU
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
);

Cette fonction UDF vérifie si une chaîne donnée n’apparaît pas pour référencer l’Europe ou l’UE. Si l’une de ces sous-chaînes est trouvée, elle retourne FALSE (ce qui signifie qu’il s’agit d’une adresse UE). Si aucune des sous-chaînes n’est trouvée, elle retourne TRUE (ce qui signifie qu’il ne s’agit pas d’une adresse UE).

Étape 5 : Créer une stratégie de filtre de lignes

Pour créer une politique sur un objet, vous devez avoir MANAGE sur l’objet ou être propriétaire de l’objet. Pour ajouter un UDF à une stratégie, vous devez disposer de EXECUTE sur l'UDF et elle doit figurer dans le catalogue Unity.

  1. Cliquez sur l’icône Données.Catalogue.

  2. Cliquez sur le abac catalogue que vous avez créé précédemment.

  3. Cliquez sur l’onglet Stratégies.

  4. Cliquez sur Nouvelle stratégie.

  5. Dans Identification de la stratégie :

    • Pour Nom, entrez hide_eu_customers.
    • Pour Description, entrez une description pour votre stratégie.
  6. Dans Type de stratégie, choisissez Filtre de lignes.

  7. Dans Principaux et étendue :

    • Pour Appliqué à..., recherchez et sélectionnez les principaux auxquels la stratégie s’applique. Dans cet exemple, vous pouvez utiliser le groupe Tous les utilisateurs de compte.
    • Laissez Except for... vide.
    • Pour Étendue, choisissez le catalogue abac et Tous les schémas.

    Exemple de paramètres de stratégie de filtre de ligne ABAC pour la section Principaux et étendue.

  8. Dans Condition, sélectionnez les tables du champ d’application auxquelles la stratégie s’applique. Dans cet exemple, vous pouvez sélectionner Aucune condition afin que la politique s’applique à toutes les tables.

  9. Fonction de filtre de ligne :

    • Cliquez sur l’icône Fonction. Sélectionnez la fonction.
    • Dans le menu Sélectionner une fonction , cliquez sur le abac catalogue, le customers schéma, puis la is_not_eu_address fonction que vous avez créée précédemment.
    • Cliquez sur Sélectionner.

    Exemple de paramètres de stratégie de filtre de lignes ABAC pour la section de la fonction Filtre de lignes.

    • En option, vous pouvez tester votre fonction en développant la fonction de test et en fournissant une entrée. Par exemple, l’entrée 78 Berliner Str., Berlin, Germany E.U. et le clic sur Exécuter le test retournent FALSE (Hide row)correctement .

    Exemple de test d’une fonction de filtre de ligne ABAC.

  10. Dans les paramètres de la fonction Map :

    • Choisissez Colonnes correspondant aux étiquettes sélectionnées.
    • Recherchez pii. Sélectionnez pii : address.

    Exemple de paramètres de politique de filtre de ligne ABAC pour la section des paramètres de la fonction Map.

  11. Cliquez sur Créer une stratégie.

Étape 6 : Tester votre stratégie

Revenez à votre bloc-notes et exécutez la commande suivante :

SELECT DISTINCT * FROM abac.customers.profiles

Seules les lignes concernant les résidents non de l’UE sont renvoyées.

Prénom Last_Name Numéro de téléphone Adresse Numéro de sécurité sociale
Grâce Wilson 890-123-4567 852 Elm St, NV 890-12-3456
Alice Johnson 345-678-9012 789 Pine St, TX 345-67-8901
Ivy Taylor 012-345-6789 159 Aspen St, AZ 012-34-5678
Franc Miller 3456-012-789 741 Rue Épinette, WA 2345-01-789
Jane Smith 234-567-8901 456 rue Oak, CA 234-56-7890
John Biche 123-456-7890 123 Main St, NY 123-45-6789
Charlie Davis 567-890-1234 654 Cèdre St, IL 567-89-0123
Emily Blanc 678-901-2345 987 Birch St, WA 678-90-1234
Hank Moore 901-234-5678 963 Walnut St, CO 901-23-4567
Bob Brun 456-789-0123 321 Maple St, FL 456-78-9012

Vous pouvez continuer à créer une stratégie de masquage de colonne.

Étape 7 : Créer une fonction UDF pour masquer les SSN

Ajoutez la commande suivante au notebook et exécutez-la :

-- Masks any SSN input by returning a fully masked value
CREATE FUNCTION mask_ssn(ssn STRING)
RETURN '***-**-****' ;

Cette fonction UDF retourne une chaîne SSN entièrement masquée ('***-****').

Étape 8 : Créer une stratégie de masque de colonne

Pour créer une politique sur un objet, vous devez avoir MANAGE sur l’objet ou être propriétaire de l’objet. Pour ajouter un UDF à une stratégie, vous devez disposer de EXECUTE sur l'UDF et elle doit figurer dans le catalogue Unity.

  1. Cliquez sur l’icône Données.Catalogue.

  2. Cliquez sur le abac catalogue que vous avez créé précédemment.

  3. Cliquez sur l’onglet Stratégies.

  4. Cliquez sur Nouvelle stratégie.

  5. Dans Identification de la stratégie :

    • Pour Nom, entrez mask_ssn.
    • Pour Description, entrez une description pour votre stratégie.
  6. Dans Type de stratégie, choisissez Masque de colonne.

  7. Dans Principaux et étendue :

    • Pour Appliqué à..., recherchez et sélectionnez les principaux auxquels la stratégie s’applique. Dans cet exemple, vous pouvez utiliser le groupe Tous les utilisateurs de compte.
    • Laissez Except for... vide.
    • Pour Étendue, choisissez le catalogue abac et Tous les schémas.

    Exemples de paramètres de stratégie de masque dans la colonne ABAC pour la section Principaux et étendue.

  8. Dans Condition, sélectionnez les tables du champ d’application auxquelles la stratégie s’applique. Dans cet exemple, vous pouvez sélectionner Aucune condition afin que la politique s’applique à toutes les tables.

  9. Dans Conditions de colonne :

    • Choisissez des colonnes correspondant aux tags sélectionnés.
    • Recherchez pii. Sélectionnez pii : ssn.

    Exemple de paramètres de stratégie de masque de colonne ABAC pour la section Conditions des colonnes.

  10. Dans Fonction de masquage :

    • Cliquez sur l’icône Fonction. Sélectionnez la fonction.
    • Dans le menu Sélectionner une fonction , cliquez sur le abac catalogue, le customers schéma, puis la mask_ssn fonction que vous avez créée précédemment.
    • Cliquez sur Sélectionner.

    Exemple de paramètres de stratégie de masquage de colonnes ABAC pour la section Fonction de masquage.

    • Si vous le souhaitez, vous pouvez tester votre fonction de masquage en développant la fonction test et en fournissant une entrée. Par exemple, l’entrée 901-234-5678 et le clic sur Exécuter le test retournent ***-**-****correctement .

    Exemple de test de la fonction de masquage de colonne ABAC.

  11. Cliquez sur Créer une stratégie.

Étape 9 : Tester votre stratégie

Revenez à votre bloc-notes et exécutez la commande suivante :

SELECT * FROM abac.customers.profiles

Les SSN sont désormais sous la forme ***-**-****. Seuls les résidents hors UE sont renvoyés car la politique de filtrage de rangée est également activée.

Prénom Last_Name Numéro de téléphone Adresse Numéro de sécurité sociale
Jane Smith 234-567-8901 456 rue Oak, CA ***-**-****
Alice Johnson 345-678-9012 789 Pine St, TX ***-**-****
Charlie Davis 567-890-1234 654 Cèdre St, IL ***-**-****
Grâce Wilson 890-123-4567 852 Elm St, NV ***-**-****
Bob Brun 456-789-0123 321 Maple St, FL ***-**-****
Hank Moore 901-234-5678 963 Walnut St, CO ***-**-****
Ivy Taylor 012-345-6789 159 Aspen St, AZ ***-**-****
Emily Blanc 678-901-2345 987 Birch St, WA ***-**-****
Franc Miller 3456-012-789 741 Rue Épinette, WA ***-**-****
John Biche 123-456-7890 123 Main St, NY ***-**-****