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.
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
Dans votre espace de travail Azure Databricks, cliquez sur
Catalog.
Sélectionnez l’objet qui détermine l’étendue de la stratégie, telle qu’un catalogue, un schéma ou une table.
Cliquez sur l’onglet Stratégies.
Cliquez sur Nouvelle stratégie.
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_ssnDescription 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 usersTerminez 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émacustomers.É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_tagethas_tag_value, combinée àAND,ORetNOTpour une logique de correspondance plus complexe. Applique la politique aux tables où l'expression s'évalue àTRUEet 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é sensitivityd’étiquette avec la valeurhighpour restreindre la stratégie aux tables sensibles uniquement.
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 FALSEsont 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. 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
FALSEsont exclues des résultats de la requête. Vous devez avoirEXECUTEsur UDF. - Créer : définissez une fonction SQL à utiliser comme logique 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.
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_tagethas_tag_value, combinées avecAND,ORetNOTpour une logique de correspondance plus complexe. Les colonnes où l'expression est évaluée àTRUEsont masquées.
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
EXECUTEsur l'UDF. - Créer : définissez une fonction SQL à utiliser comme logique de masquage de colonne.
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
4pour afficher les 4 derniers caractères du numéro de sécurité sociale.
-
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
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éeshas_tag('tag_name')ethas_tag_value('tag_name', 'tag_value'). S'il est omis, la valeur par défaut estTRUE(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 dehas_tag('tag_name')ethas_tag_value('tag_name', 'tag_value'), éventuellement combinée avecAND,OR, etNOT. Chaque condition peut être affectée à un alias à utiliser dansON COLUMNetUSING COLUMNS. Une stratégie peut inclure jusqu’à 3MATCH COLUMNSexpressions, 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 deMATCH COLUMNS. -
USING COLUMNS (function_arg [, ...]): Arguments passés à la fonction définie par l'utilisateur (UDF). Chaque argument peut être un alias deMATCH COLUMNSou 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
- Dans votre espace de travail Azure Databricks, cliquez sur
Catalog.
- Sélectionnez l’objet auquel la stratégie est attachée.
- Cliquez sur l’onglet Stratégies.
- Sélectionnez la stratégie que vous souhaitez modifier.
- 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.
- 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
- Dans votre espace de travail Azure Databricks, cliquez sur
Catalog.
- Sélectionnez l’objet auquel la stratégie est attachée.
- Cliquez sur l’onglet Stratégies.
- Sélectionnez la stratégie.
- 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;