将共享计算上的库和 init 脚本加入允许列表
在 Databricks Runtime 13.3 LTS 及更高版本中,可以将库和 init 脚本添加到 Unity Catalog 中 allowlist
。 这允许用户充分利用使用共享访问模式配置的计算上的这些项目。
可以在目录或文件存在之前,将其添加到允许列表。 请参阅将文件上传到 Unity Catalog 卷。
注意
必须是元存储管理员或具有 MANAGE ALLOWLIST
权限才能修改允许列表。 请参阅管理允许列表。
重要
用作启用了 Unity Catalog 的共享计算上的 JDBC 驱动程序或自定义 Spark 数据源的库需要 ANY FILE
权限。
一些已安装的库会将所有用户的数据存储在一个通用临时目录中。 这些库可能会损害用户隔离。
如何将项添加到允许列表
可以使用目录资源管理器 或 REST API 将项添加到 allowlist
。
若要在目录资源管理器中打开将项添加到允许列表的对话框,请执行以下操作:
- 在 Azure Databricks 工作区中,单击 “目录”。
- 单击打开元存储详细信息和权限 UI。
- 选择“允许的 JAR/Init 脚本。
- 单击“添加” 。
重要
此选项仅对具有足够特权的用户显示。 如果无法访问允许列表 UI,请与元存储管理员联系,以获取有关允许列表库和 init 脚本的帮助。
将 init 脚本添加到允许列表
在允许列表对话框中完成以下步骤,将 init 脚本添加到允许列表:
- 在“类型”处,选择“Init 脚本”。
- 在“源类型”处,选择“卷”或对象存储协议。
- 指定要添加到允许列表的源路径。 请参阅如何在允许列表中强制实施对路径的权限?。
将 JAR 添加到允许列表
在允许列表对话框中完成以下步骤,将 JAR 添加到允许列表:
- 对于“类型”,请选择“JAR”。
- 在“源类型”处,选择“卷”或对象存储协议。
- 指定要添加到允许列表的源路径。 请参阅如何在允许列表中强制实施对路径的权限?。
将 Maven 坐标添加到允许列表
在允许列表对话框中完成以下步骤,将 Maven 坐标添加到允许列表:
- 在“类型”处,选择“Maven”。
- 在“源类型”处,选择“坐标”。
- 按照以下格式输入坐标:
groudId:artifactId:version
。- 可以通过将以下格式添加到允许列表来包含某个库的所有版本:
groudId:artifactId
。 - 可以通过将以下格式添加到允许列表来包含某个组中的所有项目:
groupId
。
- 可以通过将以下格式添加到允许列表来包含某个库的所有版本:
如何在允许列表中强制实施对路径的权限?
可以使用允许列表授予对存储在 Unity Catalog 卷和对象存储中的 JAR 或 init 脚本的访问权限。 如果为目录而不是为文件添加路径,则允许列表权限会传播到包含的文件和目录。
前缀匹配用于存储在 Unity Catalog 卷或对象存储中的所有项目。 若要防止在给定目录级别匹配前缀,请在最后包含正斜杠 (/
)。 例如,/Volumes/prod-libraries/
不会对以 prod-libraries
为前缀的文件执行前缀匹配操作, 而是会将 /Volumes/prod-libraries/
内的所有文件和目录都添加到允许列表中。
可以在以下级别定义权限:
- 卷或存储容器的基本路径。
- 从基本路径嵌套在任意深度的目录。
- 单个文件。
将路径添加到允许列表仅意味着该路径可用于 init 脚本或 JAR 安装。 Azure Databricks 仍会检查访问指定位置中的数据的权限。
使用的主体必须对指定的卷具有 READ VOLUME
权限。 请参阅 SELECT。
在单一用户访问模式下,使用已分配主体(用户或服务主体)的标识。
在共享访问模式下:
- 库使用库安装程序的标识。
- init 脚本使用群集所有者的标识。
注意
无隔离共享访问模式不支持卷,但使用与共享访问模式相同的标识分配。
Databricks 建议使用只读权限配置与 init 脚本和库相关的所有对象存储特权。 对这些位置具有写入权限的用户可以修改库文件或 init 脚本中的代码。
Databricks 建议使用 Microsoft Entra ID 服务主体来管理对存储在 Azure Data Lake Storage Gen2 中的 JAR 或 init 脚本的访问。 请使用以下链接的文档完成此设置:
创建对所需 Blob 具有读取和列出权限的服务主体。 请参阅使用服务主体和 Microsoft Entra ID (Azure Active Directory) 访问存储。
使用机密保存凭据。 请参阅机密。
请在创建群集时在 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>}}
(可选)使用 azcopy 或 Azure CLI 重构 init 脚本。
可以在 init 脚本中引用配置群集期间设置的环境变量,以传递作为用来进行验证的机密存储的凭据。
注意
JAR 和 init 脚本的允许列表权限是单独管理的。 如果使用相同的位置来存储这两种类型的对象,则必须将位置添加到每种对象的允许列表中。