使用标准访问模式(以前共享访问模式)计算上的 Allowlist 库和 init 脚本

在 Databricks Runtime 13.3 LTS 及更高版本中, allowlist Unity 目录控制哪些库和 init 脚本可以在标准访问模式计算上运行。 在配置了标准访问模式的计算上,用户可以利用这些工件。

默认情况下,允许列表为空。 不能禁用此功能。 若要修改允许列表,你必须是元存储管理员或具有 MANAGE ALLOWLIST 该权限。 请参阅管理允许列表

即使尚未创建目录或文件,也可以将目录或文件添加到允许列表。 请参阅将文件上传到 Unity Catalog 卷

重要

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

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

安全性和操作风险

了解允许列表的安全影响对于维护群集隔离和保护标准访问模式计算上的数据至关重要。 适当的允许列表用法可防止用户添加任意库和 init 脚本。 这可降低安全问题、群集不稳定和其他不可预知行为的可能性。

对于谁获得 MANAGE ALLOWLIST 特权,要慎重考虑。 具有 MANAGE ALLOWLIST 特权的用户可以允许列出任何路径或 Maven 坐标,从而有效地控制可在标准访问模式计算上运行的代码。

作为元存储管理员,定期查看允许列表上的项目,并验证它们是否来自受信任的源。 允许列表的项目可以访问群集资源和用户数据,因此它们应受到与其他敏感组件相同的安全和治理控制。

Databricks 建议使用以下最佳做法来管理允许列表:

  • 仅将MANAGE ALLOWLIST权限授予元存储管理员和受信任的平台管理员。 对于其他用户,仅根据需要临时授予 MANAGE ALLOWLIST
  • 定期查看和审核白名单添加。
  • 使用特定的路径和 Maven 坐标,而不是广泛的模式。
  • 为具有只读权限的允许列表项目配置存储位置。
  • 在生产环境中实现允许列表添加的正式审批过程。
  • 在将库和初始化脚本添加到生产白名单之前,先在非生产环境中测试它们。

如何将项添加到允许列表

可以使用allowlistREST API 将项添加到

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

  1. 在 Azure Databricks 工作区中,单击 “数据”图标。目录

  2. 单击齿轮图标。

  3. 单击元存储名称以打开元存储详细信息和权限 UI。

  4. 选择“允许的 JAR/Init 脚本

  5. 单击“添加” 。

重要

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

将 init 脚本添加到允许列表

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

  1. 在“类型”处,选择“Init 脚本”。

  2. 在“源类型”处,选择“”或对象存储协议。

  3. 指定要添加到允许列表的源路径。 请参阅如何在允许列表中强制实施对路径的权限?

将 JAR 添加到允许列表

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

  1. 对于“类型”,请选择“JAR”。

  2. 在“源类型”处,选择“”或对象存储协议。

  3. 指定要添加到允许列表的源路径。 请参阅如何在允许列表中强制实施对路径的权限?

将 Maven 坐标添加到允许列表

重要

在将 Maven 坐标添加到允许名单之前,必须在想要安装库的计算资源上设置 CAN ATTACH TO 和 CAN MANAGE 权限。 请参阅计算权限

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

  1. 在“类型”处,选择“Maven”。

  2. 在“源类型”处,选择“坐标”。

  3. 按照以下格式输入坐标:groudId:artifactId:version

    • 可以通过将以下格式添加到允许列表来包含某个库的所有版本:groudId:artifactId
    • 可以通过将以下格式添加到允许列表来包含某个组中的所有项目:groupId

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

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

前缀匹配用于存储在 Unity Catalog 卷或对象存储中的所有项目。 若要防止在给定目录级别匹配前缀,请在最后包含正斜杠 (/)。 例如,/Volumes/prod-libraries/ 不会对以 prod-libraries 为前缀的文件执行前缀匹配操作, 而是会将 /Volumes/prod-libraries/ 内的所有文件和目录都添加到允许列表中。

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

  1. 卷或存储容器的基本路径。

  2. 从基本路径嵌套在任意深度的目录。

  3. 单个文件。

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

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

在专用访问模式(以前是单用户访问模式)中,将使用分配的主体(用户或组)的标识。

在标准访问模式下:

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

注意

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

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

Databricks 建议使用 Microsoft Entra ID 服务主体来管理对 Azure Data Lake Storage 中存储的 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 脚本的允许列表权限是单独管理的。 如果使用相同的位置来存储这两种类型的对象,则必须将位置添加到每种对象的允许列表中。