将共享计算上的库和 init 脚本加入允许列表

重要

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

在 Databricks Runtime 13.3 LTS 及更高版本中,可以将库和 init 脚本添加到 Unity Catalog 中 allowlist。 这允许用户充分利用使用共享访问模式配置的计算上的这些项目。

可以在目录或文件存在之前,将其添加到允许列表。 请参阅将文件上传到 Unity Catalog 卷

注意

必须是元存储管理员或具有 MANAGE ALLOWLIST 权限才能修改允许列表。 请参阅管理允许列表

重要

用作启用了 Unity Catalog 的共享计算上的 JDBC 驱动程序或自定义 Spark 数据源的库需要 ANY FILE 权限。

一些已安装的库会将所有用户的数据存储在一个通用临时目录中。 这些库可能会损害用户隔离。

如何将项添加到允许列表

可以使用目录资源管理器REST API 将项添加到 allowlist

若要在目录资源管理器中打开将项添加到允许列表的对话框,请执行以下操作:

  1. 在 Azure Databricks 工作区中,单击“目录”图标“目录”。
  2. 单击齿轮图标打开元存储详细信息和权限 UI。
  3. 选择“允许的 JAR/Init 脚本
  4. 单击“添加” 。

重要

此选项仅对具有足够特权的用户显示。 如果无法访问允许列表 UI,请与元存储管理员联系,以获取有关允许列表库和 init 脚本的帮助。

将 init 脚本添加到允许列表

在允许列表对话框中完成以下步骤,将 init 脚本添加到允许列表:

  1. 在“类型”处,选择“Init 脚本”。
  2. 在“源类型”处,选择“”或对象存储协议。
  3. 指定要添加到允许列表的源路径。 请参阅如何在允许列表中强制实施对路径的权限?

将 JAR 添加到允许列表

在允许列表对话框中完成以下步骤,将 JAR 添加到允许列表:

  1. 对于“类型”,请选择“JAR”。
  2. 在“源类型”处,选择“”或对象存储协议。
  3. 指定要添加到允许列表的源路径。 请参阅如何在允许列表中强制实施对路径的权限?

将 Maven 坐标添加到允许列表

在允许列表对话框中完成以下步骤,将 Maven 坐标添加到允许列表:

  1. 在“类型”处,选择“Maven”。
  2. 在“源类型”处,选择“坐标”。
  3. 按照以下格式输入坐标:groudId:artifactId:version
    • 可以通过将以下格式添加到允许列表来包含某个库的所有版本:groudId:artifactId
    • 可以通过将以下格式添加到允许列表来包含某个组中的所有项目:groupId

如何在允许列表中强制实施对路径的权限?

可以使用允许列表授予对存储在 Unity Catalog 卷和对象存储中的 JAR 或 init 脚本的访问权限。 如果为目录而不是为文件添加路径,则允许列表权限会传播到包含的文件和目录。

前缀匹配用于存储在 Unity Catalog 卷或对象存储中的所有项目。 若要防止在给定目录级别匹配前缀,请在最后包含正斜杠 (/)。 例如:/Volumes/prod-libraries/

可以在以下级别定义权限:

  1. 卷或存储容器的基本路径。
  2. 从基本路径嵌套在任意深度的目录。
  3. 单个文件。

将路径添加到允许列表仅意味着该路径可用于 init 脚本或 JAR 安装。 Azure Databricks 仍会检查访问指定位置中的数据的权限。

使用的主体必须对指定的卷具有 READ VOLUME 权限。 请参阅读取卷

在单用户访问模式下,使用已分配主体(用户或服务主体)的标识。

在共享访问模式下:

  • 库使用库安装程序的标识。
  • init 脚本使用群集所有者的标识。

注意

无隔离共享访问模式不支持卷,但使用与共享访问模式相同的标识分配。

Databricks 建议使用只读权限配置与 init 脚本和库相关的所有对象存储特权。 对这些位置具有写入权限的用户可以修改库文件或 init 脚本中的代码。

Databricks 建议使用 Microsoft Entra ID 服务主体来管理对存储在 Azure Data Lake Storage Gen2 中的 JAR 或 init 脚本的访问。 请使用以下链接的文档完成此设置:

  1. 创建对所需 Blob 具有读取和列出权限的服务主体。 请参阅通过 Microsoft Entra ID(以前称为 Azure Active Directory)使用服务主体访问存储

  2. 使用机密保存凭据。 请参阅机密

  3. 请在创建群集时在 Spark 配置和环境变量中设置属性,如以下示例所示:

    Spark 配置:

    spark.hadoop.fs.azure.account.auth.type.<storage-account>.dfs.core.chinacloudapi.cn OAuth
    spark.hadoop.fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.chinacloudapi.cn org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
    spark.hadoop.fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.chinacloudapi.cn <application-id>
    spark.hadoop.fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.chinacloudapi.cn {{secrets/<secret-scope>/<service-credential-key>}}
    spark.hadoop.fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.chinacloudapi.cn https://login.chinacloudapi.cn/<tenant-id>/oauth2/token
    

    环境变量:

    SERVICE_CREDENTIAL={{secrets/<secret-scope>/<service-credential-key>}}
    
  4. (可选)使用 azcopyAzure CLI 重构 init 脚本。

    可以在 init 脚本中引用配置群集期间设置的环境变量,以传递作为用来进行验证的机密存储的凭据。

注意

JAR 和 init 脚本的允许列表权限是单独管理的。 如果使用相同的位置来存储这两种类型的对象,则必须将位置添加到每种对象的允许列表中。