管理服务主体

本文介绍如何为 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 Databricks 托管服务主体。

Azure Databricks 托管服务主体可以使用个人访问令牌向 Azure Databricks 进行身份验证。 若要详细了解如何为服务主体进行身份验证,请参阅管理服务主体的令牌

Azure Databricks 托管服务主体直接在 Azure Databricks 中进行管理。

若要创建 Azure Databricks 托管服务主体,请跳过本部分并继续阅读谁可以管理和使用服务主体?

若要在 Azure Databricks 中使用 Microsoft Entra ID 托管服务主体,管理员用户必须在 Azure 中创建 Microsoft Entra ID 应用程序。 若要创建 Microsoft Entra ID 托管服务主体,请按照以下说明操作:

  1. 登录 Azure 门户

    注意

    要使用的门户根据 Microsoft Entra ID 应用程序是在 Azure 公有云中运行还是在国家云或主权云中运行而异。 有关详细信息,请参阅国家云

  2. 如果有权访问多个租户、订阅或目录,请单击顶部菜单中的“目录 + 订阅”(目录包含筛选器)图标,以切换到要预配服务主体的目录。

  3. 在“搜索资源、服务和文档”中,搜索并选择“Microsoft Entra ID”

  4. 单击“+ 添加”,然后选择“应用注册”。

  5. 对于“名称”,请输入应用程序的名称。

  6. 在“支持的帐户类型”部分中,选择“仅组织目录中的帐户(单一租户)”。

  7. 单击“注册”。

  8. 在应用程序页的“概述”页上的“概要”部分中,复制以下值:

    • 应用程序(客户端) ID
    • 目录(租户)ID

    关于 Azure 已注册的应用的概述

  9. 若要生成客户端密码,请在“管理”中单击“证书和机密”

    注意

    使用此客户端密码生成 Microsoft Entra ID 令牌,以使用 Azure Databricks 对 Microsoft Entra ID 服务主体进行身份验证。 若要确定 Azure Databricks 工具或 SDK 是否可以使用 Microsoft Entra ID 令牌,请参阅此工具或 SDK 的文档。

  10. 在“客户端密码”选项卡上,单击“新建客户端密码” 。

    新建客户端机密

  11. 在“添加客户端机密”窗格中的“说明”,输入客户端机密的说明。

  12. 对于“过期”,选择客户端机密的过期时间段,然后单击“添加”。

  13. 复制客户端密码的“值”并将其存储在安全位置,因为此客户端密码是应用程序的密码。

谁可以管理和使用服务主体?

若要在 Azure Databricks 中管理服务主体,必须具有以下角色之一:帐户管理员角色、工作区管理员角色,或服务主体的管理员或用户角色。

  • 帐户管理员可以将服务主体添加到帐户,并为他们分配管理员角色。 只要工作区使用联合身份验证,他们也可以向服务主体分配对工作区的访问权限。
  • 工作区管理员可以将服务主体添加到 Azure Databricks 工作区,为他们分配工作区管理员角色,并管理对工作区中对象和功能的访问权限,例如创建群集或访问指定的基于角色的环境的权利。
  • 服务主体管理器可以管理服务主体上的角色。 服务主体创建者将成为服务主体管理者。 帐户管理员是帐户中所有服务主体上的服务主体管理者。

注意

如果服务主体是在 2023 年 6 月 13 日之前创建的,则默认情况下,服务主体的创建者没有服务主体管理者角色。 请让帐户管理员向你授予服务主体管理者角色。

  • 服务主体用户可以以服务主体身份运行作业。 作业以服务主体的标识运行,而不是以作业所有者的标识运行。 有关详细信息,请参阅作为服务主体运行作业

在帐户中管理服务主体

帐户管理员可以使用帐户控制台将服务主体添加到 Azure Databricks 帐户。

使用帐户控制台将服务主体添加到帐户

可以在 Azure Databricks 中创建服务主体,也可以从现有的 Microsoft Entra ID 服务主体进行链接。 请参阅 Databricks 和 Microsoft Entra ID 服务主体

  1. 作为帐户管理员,登录到帐户控制台
  2. 在边栏中,单击“用户管理”。
  3. 在“服务主体”选项卡上,单击“添加服务主体”。
  4. 在“管理”下,选择“Databricks 管理”或“Microsoft Entra ID 管理”
  5. 如果选择了“Microsoft Entra ID 管理”,请在“Microsoft Entra 应用程序 ID”下粘贴服务主体的应用程序(客户端)ID。
  6. 为服务主体输入名称。
  7. 单击“添加” 。

向服务主体分配帐户管理员角色

  1. 作为帐户管理员,登录到帐户控制台
  2. 在边栏中,单击“用户管理”。
  3. 在“服务主体”选项卡上,找到并单击用户名。
  4. 在“角色”选项卡上,启用“帐户管理员”。

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

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

  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. 在确认对话框中,单击“确认删除”。

在工作区中管理服务主体

工作区管理员可以使用工作区管理员设置页管理工作区中的服务主体。

使用工作区管理员设置将服务主体添加到工作区

可以在 Azure Databricks 中创建服务主体,也可以从现有的 Microsoft Entra ID 服务主体进行链接。 请参阅 Databricks 和 Microsoft Entra ID 服务主体

  1. 以工作区管理员身份登录到 Azure Databricks 工作区。

  2. 单击 Azure Databricks 工作区顶部栏中的用户名,然后选择“设置”

  3. 单击“身份验证和访问控制”选项卡。

  4. 单击“服务主体”旁的“管理”。

  5. 单击“添加服务主体”。

  6. 选择要分配给工作区的现有服务主体,或单击“添加新建”以创建新服务主体。

    若要添加新的服务主体,请选择“Databricks 管理”或“Microsoft Entra ID 管理”。 如果选择“Microsoft Entra ID 管理”,请粘贴服务主体的应用程序(客户端)ID,然后输入显示名称。

  7. 单击“添加” 。

注意

如果没有为工作区启用联合身份验证,则无法将现有帐户服务主体分配到工作区。

使用工作区管理员设置页将工作区管理员角色分配给服务主体

  1. 以工作区管理员身份登录到 Azure Databricks 工作区。
  2. 单击 Azure Databricks 工作区顶部栏中的用户名,然后选择“设置”
  3. 单击“标识和访问”选项卡
  4. 在“组”旁边,单击“管理”
  5. 选择 admins 系统组。
  6. 单击“添加成员”。
  7. 选择服务主体并单击“确认”。

若要删除某个服务主体的工作区管理员角色,请从管理员组中删除该服务主体。

在 Azure Databricks 工作区中停用服务主体

工作区管理员可以停用 Azure Databricks 工作区中的服务主体。 已停用的服务主体无法从 Azure Databricks API 访问工作区,但服务主体的所有权限和工作区对象保持不变。 停用服务主体时:

  • 服务主体无法通过任何方法向工作区进行身份验证。
  • 服务主体的状态在工作区管理员设置页面中显示为“非活动”
  • 使用服务主体生成的令牌的应用程序或脚本无法再访问 Databricks API。 令牌将保留,但不能用于在服务主体停用时进行身份验证。
  • 服务主体拥有的群集保持运行。
  • 由服务主体创建的计划作业必须分配给新的所有者,以防止它们失败。

重新激活服务主体时,可以使用相同的权限向工作区进行身份验证。 Databricks 建议停用服务主体而不是删除它们,因为删除服务主体是一项破坏性操作。

  1. 以工作区管理员身份登录到 Azure Databricks 工作区。
  2. 单击 Azure Databricks 工作区顶部栏中的用户名,然后选择“设置”
  3. 单击“身份验证和访问控制”选项卡。
  4. 单击“服务主体”旁的“管理”。
  5. 选择要停用的服务主体。
  6. 在“状态”下,取消选中“活动”。

若要将服务主体设置为活动状态,请执行相同的步骤,但改为选中该复选框。

使用工作区管理员设置页从工作区中删除服务主体

从工作区中删除服务主体不会从帐户中删除服务主体。 若要从帐户中删除服务主体,请参阅从 Azure Databricks 帐户中删除服务主体

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

  1. 以工作区管理员身份登录到 Azure Databricks 工作区。
  2. 单击 Azure Databricks 工作区顶部栏中的用户名,然后选择“设置”
  3. 单击“身份验证和访问控制”选项卡。
  4. 单击“服务主体”旁的“管理”。
  5. 选择服务主体。
  6. 在右上角,单击“删除”。
  7. 单击“删除”进行确认。

使用 API 管理服务主体

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

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

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

  • 帐户管理员使用 {account-domain}/api/2.1/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.1/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 Databricks 上的 API 进行身份验证。

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

要仅对 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 的值,这是服务主体的访问令牌。

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

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