本文介绍如何使用“专用”访问模式创建分配给组的计算资源。
专用组访问模式允许用户获得标准访问模式群集的作效率,同时安全地支持标准访问模式不支持的语言和工作负载,例如用于 ML 的 Databricks Runtime、Spark 机器学习库(MLlib)、RDD API 和 R。
要使用专用组访问模式:
- 必须为 Unity Catalog 启用工作区。
- 必须使用 Databricks Runtime 15.4 或更高版本。
- 分配的组必须拥有工作区文件夹的
CAN MANAGE
权限,他们可以在该文件夹中保存组集群使用的笔记本、ML 试验和其他工作区项目。
专用访问模式是最新版本单用户访问模式。 通过专用访问权限,可将计算资源分配给单个用户或组,仅允许分配的用户访问使用计算资源。
当用户连接到专用于组(组群集)的计算资源时,用户的权限会自动缩小到组的权限范围,让用户能够安全地与组内其他成员共享资源。
在 Azure Databricks 工作区中,转到“计算”并单击“创建计算”。
展开“高级”部分。
在“访问模式”下,单击“手动”,然后从下拉菜单中选择“专用”(原名:单用户)。
在“单个用户或组”字段中,选择要分配给此资源的组。
配置其他所需计算设置,然后单击“创建”。
在使用组群集时,用户权限的范围会缩小到组,因此 Databricks 建议为计划用于组群集的每个组创建一个 /Workspace/Groups/<groupName>
文件夹。 然后,将文件夹的 CAN MANAGE
权限分配给组。 这使组能够避免出现权限错误。 组的所有笔记本和工作区资产均应在组文件夹中进行管理。
还必须修改以下工作负载,以在组群集上运行:
- MLflow:确保从组文件夹运行笔记本,或者运行
mlflow.set_tracking_uri("/Workspace/Groups/<groupName>")
。 - AutoML:为 AutoML 运行将可选的
experiment_dir
参数设置为"/Workspace/Groups/<groupName>"
。 -
dbutils.notebook.run
:确保组对要执行的笔记本拥有READ
权限。
对组群集执行的所有命令、查询和其他作都使用分配给组的权限,而不是单个用户。
无法强制实施单个用户权限,因为所有组成员都对 Spark API 和共享计算环境具有完全访问权限。 如果应用了基于用户的权限,一个成员可以查询受限数据,另一个没有访问权限的成员仍可以通过共享环境检索结果。 因此,组本身(而不是属于组成员的用户)必须具有成功执行作所需的权限。
例如,组需要显式权限来查询表、访问机密范围或机密、使用 Unity 目录连接凭据、访问 Git 文件夹或创建工作区对象。
使用组群集创建数据对象时,该组将分配为对象所有者。
例如,如果您的笔记本电脑已连接到某个群集组,并且执行以下命令:
use catalog main;
create schema group_cluster_group_schema;
然后运行此查询,以检查架构的所有者:
describe schema group_cluster_group_schema;
组群集运行工作负载时涉及两个关键标识:
在组群集上运行工作负载的用户
其权限用于执行实际工作负载操作的组
审核日志系统表在以下参数下记录这些标识:
-
identity_metadata.run_by
:执行操作的身份验证用户 -
identity_metadata.run_as
:其权限用于操作的授权组。
以下示例查询拉取对组群集执行的操作的标识元数据:
select action_name, event_time, user_identity.email, identity_metadata
from system.access.audit
where user_identity.email = "uc-group-cluster-group" AND service_name = "unityCatalog"
order by event_time desc limit 100;
- 从组群集中创建的工作区文件和文件夹会使指定的对象所有者为
Unknown
。 这会导致对这些对象的后续操作(如read
、write
和delete
)失败,并出现权限被拒绝错误。
专用组访问具有以下限制:
- 世系系统表不会记录在组群集上运行的工作负载的
identity_metadata.run_as
(授权组)或identity_metadata.run_by
(正在身份验证的用户)。 - 提供给客户存储的审核日志不会记录在组群集上运行的工作负载的
identity_metadata.run_as
(授权组)或identity_metadata.run_by
(正在身份验证的用户)。 必须使用system.access.audit
表来查看标识元数据。 - 当附加到群集组时,目录浏览器不会只筛选群组可以访问的资产。
- 并非组成员的组管理员无法创建、编辑或删除组群集。 仅有工作区管理员和组成员才能执行此操作。
- 如果重命名了组,必须手动更新引用组名称的任何计算策略。
- 当工作区 ACL 被禁用时,由于安全性和数据访问控制的固有缺失,已禁用 ACL 的工作区 (isWorkspaceAclsEnabled == false) 不支持组群集。
- 在
%run
笔记本上下文中执行的命令和其他操作始终使用用户的权限,而不是组的权限。 这是因为这些作由笔记本环境处理,而不是群集的环境。 例如dbutils.notebook.run()
,在群集上运行替代命令,因此使用组的权限。 - 该
is_member(<group>)
函数在组群集上调用时返回false
,因为该组不是其自身的成员。 若要正确检查组群集和其他访问模式的成员身份,请使用is_member(<group>) OR current_user() == <group>
。 - 无法将计算日志传送到卷。
- 不支持创建和访问服务终结点的模型。