控制对 Unity Catalog 数据的外部访问

重要

此功能目前以公共预览版提供。

提示

有关如何使用 Microsoft Fabric 读取 Azure Databricks 数据的信息,请参阅使用 Microsoft Fabric 读取 Unity Catalog 中注册的数据

本文介绍在外部处理引擎使用 Unity Catalog Open API 或 Iceberg API 访问 Azure Databricks 中的数据时(尤其是当引擎使用 Unity Catalog 凭据售卖功能获取访问权限时),如何控制对该数据的访问。

本文中所述的访问控制涵盖使用临时凭据利用外部引擎和下列等接口从 Unity Catalog 读取数据的多种情形:

  • Iceberg REST API
  • Microsoft Fabric
  • duckDB
  • Apache Spark 和 Trino

注意

Unity Catalog 通过 Delta Lake UniForm 实现了 Iceberg REST API,这是为 Iceberg 客户端提供对 Unity Catalog 中 Delta 表的只读访问权限的替代方法。 请参阅通过 Iceberg 客户端使用 UniForm 读取 Delta 表

凭据售卖和外部引擎访问权限授予概述

如果要使用外部引擎访问在 Unity Catalog 元存储中注册的数据,则必须使用 Unity Catalog REST API 请求短期有效的凭据。 Unity Catalog 授予凭据的过程称为“凭据售卖”

要获得临时凭据,发出请求的 Azure Databricks 主体(用户、组或服务主体)必须具有对架构的 EXTERNAL USE SCHEMA 特权。此架构中包含要从外部引擎访问的表。 包含该架构的 Unity Catalog 元存储还必须显式启用外部访问。

特权主体获得临时凭据后,会收到一个短期有效的访问令牌字符串和云存储位置 URL,外部引擎的用户可以使用该令牌字符串和 URL 从云存储位置访问数据对象(表)。 外部引擎如何使用凭据和令牌因外部引擎而异,在此不做介绍。

外部引擎和 Azure Databricks Unity Catalog 配置还必须满足后续章节中所述的特定网络要求。

要求

本章节列出了使用 Unity Catalog Open API 或 Iceberg REST API 的外部引擎安全访问 Unity Catalog 数据对象所需的网络配置、Unity Catalog 元存储选项、表类型和权限。

网络要求

  • 若要使用 Unity Catalog Open API 或 Iceberg REST API 访问 Azure Databricks 工作区,工作区 URL 必须可供执行请求的引擎访问。 这包括使用 IP 访问列表或 Azure 专用链接的工作区。
  • 若要访问 Unity Catalog 中注册的数据对象所在的基础云存储位置,Unity Catalog 临时凭据 API 生成的存储 URL 必须可供执行请求的引擎访问。 这意味着必须在基础云存储帐户的防火墙和网络访问控制列表中允许该引擎。

Unity Catalog 元存储和数据对象要求

  • 元存储必须启用外部数据访问
  • 公共预览版仅支持表格。
    • 外部表支持读取和写入。
    • 托管表只能读取。
  • 不支持以表格类型:
    • 应用了行筛选器或列掩码的表。
    • 使用 Delta Sharing 共享的表。
    • Lakehouse 联合表(外表)。
    • 视图
    • 具体化视图
    • 增量实时表流式处理表
    • 在线表
    • 矢量搜索索引

权限要求

请求临时凭据的主体必须具有:

  • 对包含架构或其父目录的 EXTERNAL USE SCHEMA 特权。

    此特权必须始终显式授予。 只有父目录所有者可以授予此特权。 为了避免数据意外外泄,ALL PRIVILEGES 不包括 EXTERNAL USE SCHEMA 特权,架构所有者默认不具有此特权。

  • 对表的 SELECT 权限、对父目录的 USE CATALOG 权限及对父架构的 USE SCHEMA 权限。

在元存储上启用外部数据访问

若要允许外部引擎访问元存储中的数据,元存储管理员必须启用元存储的外部数据访问。 此选项默认禁用,以防止未经授权的外部访问。

  1. 在附加到元存储的 Azure Databricks 工作区中,单击 目录图标“目录”。
  2. 单击“目录”窗格顶部的 齿轮图标 齿轮图标,然后选择“元存储”
  3. 在“详细信息”选项卡上,启用“外部数据访问”。

请求用于外部数据访问的临时凭据

若要请求用于外部数据访问的临时凭据,满足上述要求的工作区用户必须使用 /api/2.1/unity-catalog/temporary-table-credentials API。

注意

启用 include_manifest_capabilities 选项后,可以调用 ListTables API 来检索支持凭据售卖的表格列表。 只有标记 HAS_DIRECT_EXTERNAL_ENGINE_READ_SUPPORTHAS_DIRECT_EXTERNAL_ENGINE_WRITE_SUPPORT 的表格有资格在临时表凭据 API 中引用。 请参阅 GET /api/2.1/unity-catalog/tables

例如:

curl -X POST -H "Authentication: Bearer $OAUTH_TOKEN" \
https://<workspace-instance>/api/2.1/unity-catalog/temporary-table-credentials \
-d '{"table_id": "<string>", "operation_name": "<READ|READ_WRITE>"}'

有关详细信息,请参阅 Azure Databricks REST API 参考中的 POST /api/2.1/unity-catalog/temporary-table-credentials