Créer et gérer des stratégies ABAC

Cette page explique comment créer, modifier, afficher et supprimer des stratégies ABAC dans le Catalogue Unity. Pour obtenir une vue d’ensemble des concepts de stratégie, consultez Les concepts de base pour ABAC.

Exigences

Toutes les opérations de stratégie (créer, modifier, supprimer, afficher, décrire) nécessitent MANAGE des permissions sur l'élément sécurisable ou la possession de l'objet. La création d’une stratégie nécessite également les éléments suivants :

  • Databricks Runtime 16.4 ou version supérieure, ou calcul sans serveur. Consultez la configuration requise pour le calcul.
  • Pour la logique de filtrage ou de masquage, une fonction définie par l’utilisateur (UDF) dans le catalogue Unity que vous appliquez EXECUTE, ou une fonction SQL que vous définissez en ligne lors de la création de la politique.
  • Balises régies appliquées aux objets cibles. Consultez les balises gérées.

Créer une stratégie

Vous pouvez créer une stratégie à l’aide de l’interface utilisateur de l’Explorateur de catalogues, de l’instruction CREATE POLICY SQL ou des API REST Azure Databricks, des kits sdk et terraform.

Pour créer une stratégie, vous devez disposer de MANAGE sur l'élément sécurisable où la stratégie est appliquée (catalogue, schéma ou table) ou être propriétaire de l'élément sécurisable, et de EXECUTE sur l’UDF qui implémente la logique de filtrage ou de masquage.

Explorateur de catalogues

  1. Dans votre espace de travail Azure Databricks, cliquez sur Data icon.Catalog.

  2. Sélectionnez l’objet qui détermine l’étendue de la stratégie, telle qu’un catalogue, un schéma ou une table.

  3. Cliquez sur l’onglet Stratégies.

  4. Cliquez sur Nouvelle stratégie.

  5. Terminez la section Identification de la politique. Le tableau suivant récapitule chaque champ :

    Champ Description Exemple
    Nom Nom de la stratégie. Doit être unique parmi toutes les politiques définies sur le même élément sécurisable. hide_eu_customers, mask_ssn
    Description Facultatif. Description de la stratégie. Apparaît dans les journaux d’audit et aide les administrateurs à comprendre l’intention de stratégie. Restrict EU customer rows from US analysts, Mask SSN for all account users
  6. Terminez la section Principaux et étendue . Le tableau suivant récapitule chaque champ :

    Champ Description Exemple
    Appliqué à... Les utilisateurs, groupes ou principaux de service soumis à la stratégie. Lorsque ces principaux interrogent des tables dans l’étendue, le filtre de lignes ou le masque de colonne est appliqué. Pour appliquer la stratégie à tous les principals du compte, sélectionnez All account users. us_analysts, All account users
    À l’exception de Les responsables exemptés de la politique. Les principaux exemptés ne sont pas soumis au filtrage ou au masquage et voient les données complètes et non modifiées. admins, compliance_team
    Étendue L'élément sécurisable auquel la politique est attachée. La stratégie est évaluée par rapport à toutes les tables de l’étendue sélectionnée. Sélectionnez un catalogue, un schéma ou une table. Azure Databricks recommande d’attacher des stratégies au niveau le plus élevé applicable. Sélectionnez catalogue prod, puis sélectionnez schéma customers.
    État du tableau Détermine les tables dans l’étendue auxquelles la stratégie s’applique. Aucune condition : Applique la stratégie à toutes les tables concernées. Tables correspondant à l’une quelconque de ces étiquettes : applique la politique à la liste spécifiée de clés d’étiquettes ou de paires étiquette-clé-valeur. Les tables qui remplissent l'un de ces critères respectent la politique. Tables correspondant à une expression personnalisée : vous pouvez créer une expression booléenne à l’aide has_tag et has_tag_value, combinée à AND, ORet NOT pour une logique de correspondance plus complexe. Applique la politique aux tables où l'expression s'évalue à TRUE et correspond à la politique. Si une table dans l’étendue ne correspond pas à la condition, la stratégie ne s’applique pas à cette table. Sélectionnez Tables correspondant à l’une de ces balises, puis choisissez la clé sensitivity d’étiquette avec la valeur high pour restreindre la stratégie aux tables sensibles uniquement.

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

  7. Pour le type de stratégie, choisissez le type de contrôle d’accès à appliquer :

    Option Description À utiliser lorsque
    Filtre de lignes Crée une politique de filtrage des lignes. La fonction UDF évalue chaque ligne et retourne une valeur booléenne. Les lignes où le UDF retourne FALSE sont exclues des résultats de la requête. L’accès dépend des valeurs de chaque ligne, telles que le filtrage par les valeurs d’une colonne qui contient des régions géographiques.
    Masque de colonne Crée une stratégie de masque de colonne. La fonction UDF prend la valeur de colonne comme entrée et retourne la version d’origine ou masquée. Le type de retour doit pouvoir être converti au type de données de la colonne cible. Vous devez masquer les champs sensibles, tels que les numéros de sécurité sociale, les numéros de téléphone ou les adresses e-mail, tout en permettant à l'utilisateur principal d’interroger la table.
  8. Les sections suivantes dépendent de votre sélection de type de stratégie . Développez la section qui correspond à votre sélection :

    Filtre de lignes

    Dans la section Fonction de filtre de lignes, choisissez comment spécifier la fonction de filtre de lignes :

    • Sélectionner existant : choisissez une fonction UDF déjà définie dans Unity Catalog. La fonction UDF évalue chaque ligne et retourne une valeur booléenne. Lignes où la fonction retourne FALSE sont exclues des résultats de la requête. Vous devez avoir EXECUTE sur UDF.
    • Créer : définissez une fonction SQL à utiliser comme logique de filtre de lignes.

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

    Dans la section Entrées de fonction , fournissez une valeur pour chaque paramètre de fonction. Chaque entrée peut être une colonne mise en correspondance par des balises, une colonne mise en correspondance par une expression personnalisée ou une valeur constante.

    Exemples de paramètres ABAC pour la section Entrées de fonction.

    Masque de colonne

    Dans la section Conditions de colonne, choisissez comment identifier les colonnes à masquer :

    • Colonnes correspondant à l’une de ces balises : spécifiez une liste de clés de balise ou de paires clé-valeur de balise. Les colonnes qui possèdent l'un de ces éléments sont masquées par la politique.
    • Colonnes correspondant à une expression personnalisée : générez une expression booléenne à l’aide has_tag et has_tag_value, combinées avec AND, ORet NOT pour une logique de correspondance plus complexe. Les colonnes où l'expression est évaluée à TRUE sont masquées.

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

    Ensuite, choisissez la fonction Masquage à appliquer aux colonnes correspondantes :

    • Sélection existante : sélectionnez une fonction UDF déjà définie dans le Catalogue Unity. La fonction UDF retourne la valeur d’origine ou masquée. Le type de retour doit pouvoir être casté au type de données de la colonne cible. Vous devez avoir EXECUTE sur l'UDF.
    • Créer : définissez une fonction SQL à utiliser comme logique de masquage de colonne.

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

    Dans la section Entrées de fonction , fournissez une valeur pour chaque paramètre de fonction supplémentaire. Chaque entrée peut être une colonne mise en correspondance par des balises, une colonne mise en correspondance par une expression personnalisée ou une valeur constante.

    Cet exemple utilise une valeur constante de 4 pour afficher les 4 derniers caractères du numéro de sécurité sociale.

    Exemple de paramètres de stratégie de masque de colonne ABAC pour la section Entrées de fonction.

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

SQL

Pour obtenir une documentation complète, consultez CREATE POLICY.

CREATE [OR REPLACE] POLICY policy_name
ON { CATALOG catalog_name | SCHEMA schema_name | TABLE table_name }
[COMMENT description]
{ row_filter_body | column_mask_body }

Corps du filtre de ligne :

ROW FILTER function_name
TO principal [, ...]
[EXCEPT principal [, ...]]
FOR TABLES
[WHEN condition]
[MATCH COLUMNS condition [[AS] alias] [, ...]]
[USING COLUMNS (function_arg [, ...])]

Corps du masque de colonne :

COLUMN MASK function_name
TO principal [, ...]
[EXCEPT principal [, ...]]
FOR TABLES
[WHEN condition]
[MATCH COLUMNS condition [[AS] alias] [, ...]]
ON COLUMN alias
[USING COLUMNS (function_arg [, ...])]

Paramètres :

  • policy_name: nom de la stratégie. Doit être unique parmi toutes les stratégies définies sur le même élément sécurisable.
  • ON { CATALOG | SCHEMA | TABLE }: Le champ d'application où la politique est attachée. La stratégie évalue par rapport à toutes les tables descendantes de cet élément sécurisable.
  • function_name: nom complet de l’UDF qui implémente la logique de filtrage ou de masquage.
  • TO principal [, ...]: les utilisateurs, les groupes ou les principaux de service auxquels la stratégie s’applique.
  • EXCEPT principal [, ...]: Principaux acteurs exemptés de la politique. Les entités exemptées ne sont pas soumises au filtrage ou au masquage.
  • FOR TABLES: spécifie que la politique cible les tables. Les tables sont actuellement le seul type sécurisable pris en charge, ce qui inclut les tables en streaming et les vues matérialisées.
  • WHEN condition: expression booléenne qui détermine les tables auxquelles la stratégie s’applique, en fonction de leurs balises. Utilise des fonctions intégrées has_tag('tag_name') et has_tag_value('tag_name', 'tag_value'). S'il est omis, la valeur par défaut est TRUE (s'applique à toutes les tables dans la portée).
  • MATCH COLUMNS condition [[AS] alias] [, ...]: conditions de colonne qui identifient les colonnes cibles de la stratégie. Chaque condition est une expression booléenne construite à partir de has_tag('tag_name') et has_tag_value('tag_name', 'tag_value'), éventuellement combinée avec AND, OR, et NOT. Chaque condition peut être affectée à un alias à utiliser dans ON COLUMN et USING COLUMNS. Une stratégie peut inclure jusqu’à 3 MATCH COLUMNS expressions, et toutes doivent correspondre pour que la stratégie s’applique.
  • ON COLUMN alias: Pour les stratégies de masque de colonne, spécifie la colonne correspondante à masquer, référencée par son alias à partir de MATCH COLUMNS.
  • USING COLUMNS (function_arg [, ...]) : Arguments passés à la fonction définie par l'utilisateur (UDF). Chaque argument peut être un alias de MATCH COLUMNS ou un littéral constant.

Exemple : stratégie de masque de colonne. Masquez toutes les colonnes marquées avec pii:ssn dans le schéma prod.customers, en n'affichant que les 4 derniers caractères. La politique s'applique à us_analysts, sauf à admins.

CREATE FUNCTION ssn_to_last_nr (ssn STRING, nr INT) RETURNS STRING
  RETURN right(ssn, nr);

CREATE POLICY mask_ssn
ON SCHEMA prod.customers
COLUMN MASK ssn_to_last_nr
TO us_analysts EXCEPT admins
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'ssn') AS ssn
ON COLUMN ssn
USING COLUMNS (4);

Exemple : politique de filtre de lignes. Excluez les lignes avec les clients européens des tables marquées avec sensitivity:high dans le schéma prod.customers. La stratégie s’applique à us_analysts et filtre les lignes en fonction de la colonne geo_region.

CREATE FUNCTION non_eu_region (geo_region STRING) RETURNS BOOLEAN
  RETURN geo_region <> 'eu';

CREATE POLICY hide_eu_customers
ON SCHEMA prod.customers
COMMENT 'Exclude rows with European customers from sensitive tables'
ROW FILTER non_eu_region
TO us_analysts
FOR TABLES
WHEN has_tag_value('sensitivity', 'high')
MATCH COLUMNS has_tag('geo_region') AS region
USING COLUMNS (region);

Kit de développement logiciel (SDK) Python

Pour obtenir une documentation complète, consultez le kit sdk Databricks pour Python documentation.

Cet exemple crée une stratégie de filtre de lignes qui exclut les lignes avec des clients européens pour les analystes américains :

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import (
    FunctionArgument,
    MatchColumn,
    PolicyInfo,
    PolicyType,
    RowFilterOptions,
    SecurableType,
)

w = WorkspaceClient()

w.policies.create_policy(PolicyInfo(
    name="hide_eu_customers",
    comment="Exclude rows with European customers from sensitive tables",
    on_securable_type=SecurableType.SCHEMA,
    on_securable_fullname="prod.customers",
    for_securable_type=SecurableType.TABLE,
    policy_type=PolicyType.POLICY_TYPE_ROW_FILTER,
    to_principals=["us_analysts"],
    match_columns=[
        MatchColumn(condition="has_tag('geo_region')", alias="region"),
    ],
    row_filter=RowFilterOptions(
        function_name="prod.customers.non_eu_region",
        using=[FunctionArgument(alias="region")],
    ),
))

Cet exemple crée une stratégie de masque de colonne qui masque les numéros de sécurité sociale pour les analystes américains, à l’exception de ceux du admins groupe :

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import (
    ColumnMaskOptions,
    FunctionArgument,
    MatchColumn,
    PolicyInfo,
    PolicyType,
    SecurableType,
)

w = WorkspaceClient()

w.policies.create_policy(PolicyInfo(
    name="mask_ssn",
    comment="Mask social security numbers",
    on_securable_type=SecurableType.SCHEMA,
    on_securable_fullname="prod.customers",
    for_securable_type=SecurableType.TABLE,
    policy_type=PolicyType.POLICY_TYPE_COLUMN_MASK,
    to_principals=["us_analysts"],
    except_principals=["admins"],
    match_columns=[
        MatchColumn(condition="has_tag_value('pii', 'ssn')", alias="ssn"),
    ],
    column_mask=ColumnMaskOptions(
        function_name="prod.customers.ssn_to_last_nr",
        on_column="ssn",
        using=[FunctionArgument(constant="4")],
    ),
))

Modifier une stratégie

Explorateur de catalogues

  1. Dans votre espace de travail Azure Databricks, cliquez sur Data icon.Catalog.
  2. Sélectionnez l’objet auquel la stratégie est attachée.
  3. Cliquez sur l’onglet Stratégies.
  4. Sélectionnez la stratégie que vous souhaitez modifier.
  5. Mettez à jour tous les champs que vous souhaitez modifier. Vous pouvez modifier la description, les principaux, le type de stratégie, les conditions et les mappages d’entrée de fonction. Le nom de la stratégie et l’objet sécurisable où la stratégie est appliquée ne peuvent pas être modifiés. Pour obtenir des descriptions de champ, consultez Créer une stratégie.
  6. Cliquez sur Mettre à jour la stratégie.

SQL

CREATE OR REPLACE POLICY remplace l’intégralité de la définition de stratégie. Spécifiez toutes les clauses, pas seulement les champs que vous souhaitez modifier. La stratégie de remplacement doit avoir le même nom et être sur le même élément sécurisé.

CREATE OR REPLACE POLICY mask_ssn
ON SCHEMA prod.customers
COLUMN MASK ssn_to_last_nr
TO us_analysts EXCEPT admins, compliance_team
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'ssn') AS ssn
ON COLUMN ssn
USING COLUMNS (4);

Kit de développement logiciel (SDK) Python

Contrairement CREATE OR REPLACE POLICY à SQL, update_policy prend en charge les mises à jour partielles. Utilisez le update_mask paramètre pour spécifier les champs à modifier. Seuls ces champs sont mis à jour. Si update_mask est "*" ou vide, tous les champs dans policy_info sont appliqués.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import PolicyInfo

w = WorkspaceClient()

w.policies.update_policy(
    on_securable_type="SCHEMA",
    on_securable_fullname="prod.customers",
    name="mask_ssn",
    policy_info=PolicyInfo(
        except_principals=["admins", "compliance_team"],
    ),
    update_mask="except_principals",
)

Supprimer une stratégie

Explorateur de catalogues

  1. Dans votre espace de travail Azure Databricks, cliquez sur Data icon.Catalog.
  2. Sélectionnez l’objet auquel la stratégie est attachée.
  3. Cliquez sur l’onglet Stratégies.
  4. Sélectionnez la stratégie.
  5. Cliquez sur Supprimer la stratégie.

SQL

Utilisez DROP POLICY pour supprimer une stratégie.

DROP POLICY policy_name ON { CATALOG | SCHEMA | TABLE } securable_name

Exemples :

DROP POLICY mask_ssn ON SCHEMA prod.customers;
DROP POLICY hide_eu_customers ON SCHEMA prod.customers;

Kit de développement logiciel (SDK) Python

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

w.policies.delete_policy(
    on_securable_type="SCHEMA",
    on_securable_fullname="prod.customers",
    name="mask_ssn",
)

Afficher les stratégies

Utilisez SHOW POLICIES pour répertorier les politiques définies sur un objet sécurisable. Utilisez SHOW EFFECTIVE POLICIES pour inclure également des politiques des étendues parentes, telles que les politiques au niveau du catalogue qui affectent une table.

SHOW [EFFECTIVE] POLICIES ON { CATALOG | SCHEMA | TABLE } securable_name

Le résultat inclut le nom de la stratégie, le type de stratégie et le catalogue, le schéma ou la table où chaque stratégie est définie.

L’affichage des stratégies effectives pour une table ne nécessite pas d’autorisations sur le catalogue parent ou le schéma. Cela permet à un administrateur de table de voir les règles qui s’appliquent sans avoir accès en lecture aux politiques des tables frères.

Exemple :

SHOW EFFECTIVE POLICIES ON SCHEMA prod.customers;
policy_name type_de_politique catalogue schema comment
hide_eu_customers ROW FILTER prod customers
mask_ssn COLUMN MASQUE prod customers

Décrire une stratégie

Permet DESCRIBE POLICY d’afficher les détails d’une stratégie spécifique. Requiert la propriété sur l'objet sécurisable ou objectif cible.

{ DESC | DESCRIBE } POLICY policy_name ON { CATALOG | SCHEMA | TABLE } securable_name

Le résultat montre les propriétés de la politique sous forme de paires clé-valeur, notamment le nom, le type sécurisable, le nom sécurisable, les principaux, les conditions, le nom de la fonction et les horodatages.

Exemple :

DESCRIBE POLICY hide_eu_customers ON SCHEMA prod.customers;
info_name valeur_info
Nom hide_eu_customers
Sur le type sécurisable SCHEMA
Sur Securable prod.customers
Aux directeurs us_analysts
Pour le type sécurisable TABLE
Mettre en correspondance les colonnes has_tag('geo_region') AS région
Type de stratégie ROW_FILTER
Nom de fonction prod.customers.non_eu_region
Utilisation de colonnes region

Journalisation d’audit

Azure Databricks consigne les opérations relatives aux balises et aux politiques ABAC dans la table système du journal d’audit. Vous trouverez ci-dessous des exemples de requêtes. Pour plus d’informations, consultez Journaux d’audit.

-- All tag assignment and deletion events from the audit log
SELECT
  event_time,
  action_name,
  user_identity.email AS actor,
  request_params.workspace_id,
  request_params.metastore_id,
  request_params.tag_assignment,
  response.status_code,
  source_ip_address
FROM system.access.audit
WHERE service_name = 'unityCatalog'
  AND action_name IN (
    'createEntityTagAssignment',
    'deleteEntityTagAssignment'
  )
ORDER BY event_time DESC;

-- All ABAC policy CRUD operations
SELECT
  event_time,
  action_name,
  user_identity.email AS actor,
  request_params.name AS policy_name,
  request_params.on_securable_type,
  request_params.on_securable_fullname,
  request_params.policy_info,
  response.status_code
FROM system.access.audit
WHERE service_name = 'unityCatalog'
  AND action_name IN ('createPolicy', 'deletePolicy', 'getPolicy', 'listPolicies')
ORDER BY event_time DESC;

Plus d’informations