Aller au contenu principal

Contrôles d'accès inter-moteurs basés sur les attributs (ABAC)

info

Bêta

L’ABAC inter-moteur est en Bêta.

Les moteurs externes peuvent lire les tables Unity Catalog avec des contrôles d'accès précis appliqués. Cela inclut à la fois les politiques de contrôles d'accès basés sur les attributs (ABAC) et les filtres de lignes et masques de colonnes autonomes, tous appliqués dynamiquement même lors de l'interrogation depuis l'extérieur de Databricks.

Lorsqu'un moteur externe interroge une table avec des stratégies ABAC, des filtres de lignes ou des masques de colonne associés, Databricks utilise une couche de compute Serverless spécialisée pour filtrer et renvoyer les données assainies au moteur externe.

Exigences

Pour appliquer des contrôles d'accès précis sur les tables interrogées à partir de moteurs externes, vous devez effectuer les opérations suivantes :

Créer une table Delta gérée avec des commits de catalogue

Pour créer une nouvelle table Delta gérée avec des commits de catalogue (nécessite Databricks Runtime 16.4 et versions supérieures) :

SQL
CREATE TABLE <catalog>.<schema>.<table> (id INT, name STRING)
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported') USING delta;

Pour mettre à niveau une table gérée existante (nécessite Databricks Runtime 18.0 et versions ultérieures) :

SQL
ALTER TABLE <catalog>.<schema>.<table>
SET TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');

Après avoir créé la table, vous pouvez appliquer des politiques ABAC, des filtres de ligne ou des masques de colonne.

Consultez Créer une politique ou Appliquer manuellement des filtres de ligne et des masques de colonne.

Lire les tables avec Apache Spark (Delta)

Configurez Apache Spark avec Delta-Spark 4,1 ou supérieur et le connecteur Spark Unity Catalog 0,4 ou supérieur.

ini
"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>",
"spark.sql.catalog.<uc-catalog-name>.auth.type": "oauth",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.uri": "<oauth-token-endpoint>",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.clientId": "<oauth-client-id>",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.clientSecret": "<oauth-client-secret>",
"spark.sql.catalog.<uc-catalog-name>.ServerSidePlanning.enabled": "true",
"spark.sql.defaultCatalog": "<uc-catalog-name>",
"spark.hadoop.fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
"spark.jars.packages": "io.delta:delta-spark_4.0_2.13:4.1.0,io.delta:delta-iceberg_2.13:4.1.0,io.unitycatalog:unitycatalog-spark_2.13:0.4.0,org.apache.hadoop:hadoop-aws:3.4.1"
remarque

Définissez ServerSidePlanning.enabled sur true pour activer l'application du contrôle d'accès précis à partir de moteurs externes.

Substituez les variables suivantes :

  • <uc-catalog-name>: le nom du catalogue dans Unity Catalog qui contient vos tables.
  • <workspace-url>: L'URL du Workspace Databricks, y compris l'ID du Workspace.
  • <oauth-token-endpoint>: URL de l'Endpoint du jeton OAuth. Consultez Autoriser l'accès de service principal à Databricks avec OAuth.
  • <oauth-client-id>: ID client OAuth pour le principal d'authentification.
  • <oauth-client-secret>: secret client OAuth pour le principal d'authentification.

Lire les tables avec Apache Spark (Iceberg)

Configurez Apache Spark avec Iceberg-Spark 1.11 ou supérieur et Apache Spark 4.0 ou supérieur.

ini
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.sql.catalog.<uc-catalog-name>": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.<uc-catalog-name>.type": "rest",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>/api/2.1/unity-catalog/iceberg-rest/",
"spark.sql.catalog.<uc-catalog-name>.credential": "<oauth-client-id>:<oauth-client-secret>",
"spark.sql.catalog.<uc-catalog-name>.oauth2-server-uri": "<oauth-token-endpoint>",
"spark.sql.catalog.<uc-catalog-name>.warehouse": "<uc-catalog-name>",
"spark.sql.catalog.<uc-catalog-name>.cache-enabled": "false",
"spark.sql.defaultCatalog": "<uc-catalog-name>"

Substituez les variables suivantes :

  • <uc-catalog-name>: le nom du catalogue dans Unity Catalog qui contient vos tables.
  • <workspace-url>: L'URL du Workspace Databricks, y compris l'ID du Workspace.
  • <oauth-token-endpoint>: URL de l'Endpoint du jeton OAuth. Consultez Autoriser l'accès de service principal à Databricks avec OAuth.
  • <oauth-client-id>: ID client OAuth pour le principal d'authentification.
  • <oauth-client-secret>: secret client OAuth pour le principal d'authentification.

Query des données

Vous pouvez interroger la table à l’aide des APIs Apache Spark SQL ou DataFrame. Databricks applique des politiques d'accès précis en arrière-plan.

SQL
SELECT * FROM <uc-catalog-name>.<schema>.<table>;
attention

Les écritures concurrentes pendant la planification des requêtes peuvent entraîner la lecture de la même table à partir de différents instantanés de table dans des requêtes de jointure automatique et multi-analyses, ce qui peut potentiellement générer des résultats incorrects.

Coûts du compute Serverless

ABAC inter-moteur utilise les ressources de compute Serverless pour appliquer des politiques d'accès granulaire côté serveur. Ces ressources sont facturées aux clients. Pour plus d'informations sur les tarifs, consultez Tarifs des produits en version bêta.

Les utilisateurs ayant accès à la table du système de facturation peuvent interroger system.billing.usage pour voir combien ils ont été facturés. Par exemple, la query suivante ventile les coûts de compute par utilisateur :

SQL
SELECT usage_date,
sku_name,
identity_metadata.run_as,
SUM(usage_quantity) AS `DBUs consumed by cross-engine ABAC`
FROM system.billing.usage
WHERE usage_date BETWEEN '2026-06-01' AND '2026-07-01'
AND billing_origin_product = 'EXTERNAL_COMPATIBILITY'
GROUP BY 1, 2, 3 ORDER BY 1;

Limitations

  • Seules les lectures sont prises en charge à partir de moteurs externes lorsque les contrôles d'accès précis (FGAC) sont appliqués. Pour écrire, vous devez exempter le principal d’écriture de la politique ABAC.
  • Les vues dynamiques ne sont pas prises en charge.
  • La projection de VARIANT colonnes n'est pas prise en charge.
  • Le filtrage sur BINARY colonnes n'est pas pris en charge.
  • Les fonctions de masquage de colonne dont le type de retour diffère du type de colonne d’origine ne sont pas prises en charge.
  • Les agrégations importantes pourraient subir une dégradation des performances.