管理服务主体

本文介绍如何为 Azure Databricks 帐户和工作区创建和管理服务主体。

有关 Azure Databricks 标识模型的概述,请参阅 Azure Databricks 标识

要管理服务主体的访问权限,请参阅身份验证和访问控制

什么是服务主体?

服务主体是在 Azure Databricks 中创建的一个标识,用于自动化工具、作业和应用程序。 服务主体为自动化工具和脚本提供对 Azure Databricks 资源的仅限 API 的访问权限,比使用用户或组提供了更大的安全性。

你可以像对待 Azure Databricks 用户一样,授予和限制服务主体对资源的访问权限。 例如,可以执行以下操作:

  • 为服务主体帐户提供帐户管理员和工作区管理员角色。
  • 在使用 Unity Catalog 的帐户级别或在工作区级别为服务主体提供对数据的访问权限。
  • 在帐户和工作区级别将服务主体添加到组,包括工作区 admins 组。

还可以向 Azure Databricks 用户、服务主体和组授予使用服务主体的权限。 这样,用户就可以作为服务主体而不是标识运行作业。 这可以防止在用户离开组织或修改了组时作业失败。

与 Azure Databricks 用户不同,服务主体是仅限 API 标识;它不可用于访问 Azure Databricks UI。

Databricks 建议为工作区启用联合身份验证。 使用联合身份验证可以在帐户控制台中配置服务主体,然后为其分配对特定工作区的访问权限。 这简化了 Azure Databricks 管理和数据治理。

重要

如果你的帐户是在 2023 年 11 月 9 日之后创建的,则联合身份验证将在所有新工作区上默认启用,并且无法禁用。

Databricks 和 Microsoft Entra ID(以前为 Azure Active Directory)服务主体

服务主体可以是 Azure Databricks 托管服务主体。

Azure Databricks 托管服务主体可以使用 Databricks OAuth 身份验证和个人访问令牌向 Azure Databricks 进行身份验证。

使用帐户控制台将服务主体分配到工作区

若要使用帐户控制台将用户添加到工作区,工作区必须启用联合身份验证。 工作区管理员还可以使用工作区管理员设置页将服务主体分配给工作区。 有关详细信息,请参阅使用工作区管理员设置将服务主体添加到工作区

  1. 作为帐户管理员,登录到帐户控制台
  2. 在边栏中单击“工作区”。
  3. 单击工作区名称。
  4. 在“权限”选项卡上,单击“添加权限”
  5. 搜索并选择服务主体,分配权限级别(工作区“用户”或“管理员”),然后单击“保存”。

使用帐户控制台从工作区中删除服务主体

若要使用帐户控制台从工作区中删除服务主体,工作区必须启用联合身份验证。 从工作区中删除服务主体后,该服务主体将无法再访问该工作区,但服务主体上的权限仍会保留。 如果稍后将该服务主体添加回工作区,它将重新获得其以前的权限。

  1. 作为帐户管理员,登录到帐户控制台
  2. 在边栏中单击“工作区”。
  3. 单击工作区名称。
  4. 在“权限”选项卡上,找到服务主体。
  5. 单击服务主体行最右侧的 Kebab 菜单“Kebab 菜单”,然后选择“删除”。
  6. 在确认对话框中,单击“删除”。

在 Azure Databricks 帐户中停用服务主体

帐户管理员可以在 Azure Databricks 帐户中停用服务主体。 停用的服务主体无法向 Azure Databricks 帐户或工作区进行身份验证。 但是,服务主体的所有权限和工作区对象保持不变。 停用服务主体后,会出现以下情况:

  • 服务主体无法通过任何方法向帐户或其任一工作区进行身份验证。
  • 使用服务主体生成的令牌的应用程序或脚本将无法再访问 Databricks API。 令牌将保留,但不能用于在服务主体停用时进行身份验证。
  • 服务主体拥有的群集保持运行。
  • 由服务主体创建的计划作业将失败,除非它们分配给新的所有者。

重新激活服务主体时,可以使用相同的权限登录 Azure Databricks。 Databricks 建议停用帐户的服务主体而不是移除它们,因为移除服务主体是一项破坏性操作。 请参阅从 Azure Databricks 帐户中删除服务主体。 从帐户停用某个服务主体时,该服务主体也会从其标识联合工作区停用。

无法使用帐户控制台停用用户。 请改用帐户服务主体 API。 请参阅使用 API 停用服务主体

从 Azure Databricks 帐户中删除服务主体

帐户管理员可以从 Azure Databricks 帐户中删除服务主体。 工作区管理员不能执行此操作。 从帐户中删除服务主体时,该主体也会从其工作区中移除。

重要

从帐户中删除服务主体时,该服务主体也将从其工作区中删除,不管是否启用了联合身份验证。 建议不要删除帐户级服务主体,除非希望他们失去对帐户中所有工作区的访问权限。 请注意删除服务主体会产生以下后果:

  • 使用服务主体生成的令牌的应用程序或脚本无法再访问 Databricks API
  • 服务主体拥有的作业失败
  • 服务主体拥有的群集停止
  • 服务主体创建并使用“以所有者身份运行”凭据共享的查询或仪表板必须分配给新所有者,以防共享失败

从帐户中删除 Microsoft Entra ID 服务主体后,该服务主体将无法再访问该帐户或其工作区,但该服务主体上的权限仍会保留。 如果稍后将该服务主体添加回帐户,它将重新获得其以前的权限。

若要使用帐户控制台删除服务主体,请执行以下操作:

  1. 作为帐户管理员,登录到帐户控制台。
  2. 在边栏中,单击“用户管理”。
  3. 在“服务主体”选项卡上,找到并单击用户名。
  4. 在“主体信息”选项卡上,单击右上角的 Kebab 菜单 kebab 菜单,然后选择“删除”。
  5. 在确认对话框中,单击“确认删除”。

使用 API 管理服务主体

帐户管理员和工作区管理员可以使用 Databricks API 管理 Azure Databricks 帐户和工作区中的服务主体。 若要使用 API 管理服务主体上的角色,请参阅使用 Databricks CLI 管理服务主体角色

使用 API 管理帐户中的服务主体

管理员可以使用帐户服务主体 API 在 Azure Databricks 帐户中添加和管理服务主体。 帐户管理员和工作区管理员使用不同的终结点 URL 调用 API:

  • 帐户管理员使用 {account-domain}/api/2.0/accounts/{account_id}/scim/v2/
  • 工作区管理员使用 {workspace-domain}/api/2.0/account/scim/v2/

有关详细信息,请参阅帐户服务主体 API

使用 API 停用服务主体

帐户管理员可以使用帐户服务主体 API 将服务主体的状态更改为 false,以停用服务主体。

例如:

curl --netrc -X PATCH \
https://${DATABRICKS_HOST}/api/2.0/accounts/{account_id}/scim/v2/ServicePrincipals/{id} \
--header 'Content-type: application/scim+json' \
--data @update-sp.json \
| jq .

update-sp.json

{
  "schemas": [ "urn:ietf:params:scim:api:messages:2.0:PatchOp" ],
  "Operations": [
    {
      "op": "replace",
      "path": "active",
      "value": [
        {
          "value": "false"
        }
      ]
    }
  ]
}

已停用的服务主体的状态在帐户控制台中标记为“非活动”。 从帐户停用服务主体时,该服务主体也会从其工作区停用。

使用 API 管理工作区中的服务主体

帐户和工作区管理员可以使用工作区分配 API 将服务主体分配到已启用联合身份验证的工作区。 通过 Azure Databricks 帐户和工作区支持工作区分配 API。

  • 帐户管理员使用 {account-domain}/api/2.0/accounts/{account_id}/workspaces/{workspace_id}/permissionassignments
  • 工作区管理员使用 {workspace-domain}/api/2.0/preview/permissionassignments/principals/{principal_id}

请参阅工作区分配 API

如果工作区未启用联合身份验证,则工作区管理员可以使用工作区级 API 将服务主体分配到其工作区。 请参阅工作区服务主体 API

管理服务主体的令牌

服务主体可以使用 Azure Databricks OAuth 令牌或 Azure Databricks 个人访问令牌向 Azure Databricks 上的 API 进行身份验证,如下所示:

  • Azure Databricks OAuth 令牌可用于向 Azure Databricks 帐户级别和工作区级别 API 进行身份验证。
    • 在 Azure Databricks 帐户级别创建的 Azure Databricks OAuth 令牌可用于向 Azure Databricks 帐户级别和工作区级别 API 进行身份验证。
    • 在 Azure Databricks 工作区级别创建的 Azure Databricks OAuth 令牌仅可用于向 Azure Databricks 工作区级别 API 进行身份验证。
  • Azure Databricks 个人访问令牌仅可用于向 Azure Databricks 工作区级别 API 进行身份验证。

服务主体还可以使用 Microsoft Entra ID(以前称为 Azure Active Directory)令牌向 Azure Databricks 上的 API 进行身份验证。

管理服务主体的 Databricks OAuth 身份验证

若要对帐户级别和工作区级别的 Databricks REST API 进行身份验证,帐户管理员可以对服务主体使用 Azure Databricks OAuth 令牌。 可以使用服务主体的客户端 ID 和客户端密码来请求 OAuth 令牌。

管理服务主体的个人访问令牌

要仅对 Azure Databricks 上的工作区级别 API 进行服务主体身份验证,服务主体可以为自身创建 Databricks 个人访问令牌,如下所示:

注意

不能使用 Azure Databricks 用户界面为服务主体生成 Azure Databricks 个人访问令牌。 此过程使用 Databricks CLI 版本 0.205 或更高版本为服务主体生成访问令牌。 如果尚未安装 Databricks CLI,请参阅安装或更新 Databricks CLI

此过程假定你使用 Microsoft Entra ID 服务主体身份验证设置 Databricks CLI 对服务主体进行身份验证,从而为其自身生成 Azure Databricks 个人访问令牌。 请参阅 Microsoft Entra ID 服务主体身份验证

  1. 使用 Databricks CLI 运行以下命令,该命令为服务主体生成另一个访问令牌。

    在以下命令中,替换下列占位符:

    • (可选)将 <comment> 替换为有关访问令牌用途的任何有意义的注释。 如果未指定 --comment 选项,则不会生成注释。
    • (可选)将 <lifetime-seconds> 替换为访问令牌的有效时间,以秒为单位。 例如,1 天为 86400 秒。 如果未指定 --lifetime-seconds 选项,则访问令牌将设置为永不过期(不建议)。
    • (可选)将 <profile-name> 替换为 Azure Databricks 配置文件的名称,其中包含服务主体和目标工作区的身份验证信息。 如果未指定 -p 选项,Databricks CLI 将尝试查找和使用名为 DEFAULT 的配置文件。
    databricks tokens create --comment <comment> --lifetime-seconds <lifetime-seconds> -p <profile-name>
    
  2. 在响应中,复制 token_value 的值,这是服务主体的访问令牌。

    请务必将复制的令牌保存到安全的位置。 请勿与他人共享复制的令牌。 如果丢失了复制的令牌,你将无法重新生成完全相同的令牌, 而必须重复此过程来创建新令牌。

    如果你无法在工作区中创建或使用令牌,可能是因为工作区管理员已禁用令牌或未授予你创建或使用令牌的权限。 请与工作区管理员联系,或参阅以下内容: