将计算资源分配给组

本文介绍如何使用 专用 访问模式创建分配给组的计算资源。

专用组访问模式允许用户获得标准访问模式群集的运行效率,同时安全地支持标准访问模式不支持的语言和工作负载,例如用于 ML 的 Databricks Runtime、RDD API 和 R。

要求

若要使用专用组访问模式,请执行以下操作:

  • 必须为 Unity Catalog 启用该工作区。
  • 必须使用 Databricks Runtime 15.4 或更高版本。
  • 被指派的组必须对工作区文件夹具有 CAN MANAGE 权限,这个文件夹可以存放用于组群集的笔记本、ML 试验和其他工作区工件。

什么是专用访问模式?

专用访问模式是最新版本的单用户访问模式。 使用专用访问权限,可以将计算资源分配给单个用户或组,仅允许分配的用户(s)访问使用计算资源。

当用户连接到专用于组(组群集)的计算资源时,用户的权限会自动缩小到组的权限范围,让用户能够安全地与组内其他成员共享资源。

创建专用于组的计算资源

  1. 在 Azure Databricks 工作区中,转到“计算”,然后单击“创建计算”
  2. 展开“高级”部分。
  3. 访问模式下,单击 手动,然后从下拉菜单中选择 专用(前者:单用户)
  4. 单个用户或组 字段中,选择要分配给此资源的组。
  5. 配置其他所需的计算设置,然后单击“ 创建”。

管理组群集的最佳做法

由于使用组群集时,用户权限的范围限定为组,Databricks 建议为计划用于组群集的每个组创建 /Workspace/Groups/<groupName> 文件夹。 然后,将文件夹的 CAN MANAGE 权限分配给组。 这允许组避免权限错误。 组的所有笔记本和工作区资产均应在组文件夹中进行管理。

还必须修改以下工作负荷,以在组群集上运行:

  • MLflow:确保从组文件夹运行笔记本或运行 mlflow.set_tracking_uri("/Workspace/Groups/<groupName>")
  • AutoML:将可选的 experiment_dir 参数设置为 “/Workspace/Groups/<groupName>”,以用于您的 AutoML 运行。
  • dbutils.notebook.run:确保组对正在执行的笔记本具有 READ 权限。

组群集上的权限行为

对组群集执行的所有命令、查询和其他作都使用分配给组的权限,而不是单个用户。

无法强制实施单个用户权限,因为所有组成员都对 Spark API 和共享计算环境具有完全访问权限。 如果应用了基于用户的权限,一个成员可以查询受限数据,另一个没有访问权限的成员仍可以通过共享环境检索结果。 因此,组本身(而不是属于组成员的用户)必须具有成功执行作所需的权限。

例如,组需要显式权限来查询表、访问机密范围或机密、使用 Unity 目录连接凭据、访问 Git 文件夹或创建工作区对象。

组权限示例

使用组群集创建数据对象时,该组将分配为对象所有者。

例如,如果你的笔记本已附加到组群集,并运行以下命令:

use catalog main;
create schema group_cluster_group_schema;

然后运行此查询来检查架构的所有者:

describe schema group_cluster_group_schema;

组架构 的示例说明

审核组专用的计算活动

群集运行负载时涉及两个关键标识:

  1. 在组群集上运行工作负荷的用户
  2. 其权限用于执行实际工作负载操作的组

审核日志系统表将基于以下参数记录这些标识:

  • 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。 对这些对象的后续操作(例如 readwritedelete)会失败,并出现权限被拒绝的错误。

已知限制

专用组访问具有以下限制:

  • 无法使用 API 和 SDK 创建的作业分配组访问权限。 这是因为作业 run_as 的参数仅支持单个用户或服务主体。
  • 使用 Git 的作业 将失败,因为作业用于检出 Git 仓库的临时目录不可写。 请改用 Git 文件夹
  • 世系系统表不会记录在组群集上运行的工作负载的 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>
  • 无法将计算日志传送到卷。
  • 不支持创建和访问服务终结点的模型。
  • 不支持创建和访问矢量搜索终结点或索引。