用于管理服务主体的角色

本文介绍如何管理 Azure Databricks 帐户中服务主体的角色。

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

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

有关服务主体的概述,请参阅管理服务主体

服务主体角色

服务主体角色属于帐户级角色。 这意味着,只需在帐户中定义服务主体角色一次,然后可将其应用于所有工作区。 可以向服务主体授予两种角色:服务主体管理者和服务主体用户。

  • 服务主体管理者允许管理服务主体的角色。 服务主体的创建者在服务主体上具有“服务主体管理员”角色。 帐户管理员对帐户中的所有服务主体具有服务主体管理员角色。

注意

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

  • 服务主体用户允许工作区用户以服务主体身份运行作业。 作业将以服务主体的标识运行,而不是以作业所有者的标识运行。

具有“服务主体管理员”角色的用户不会继承“服务主体用户”角色。 如果你要使用服务主体来执行作业,则需要显式为自己分配服务主体用户角色,即使在创建服务主体之后也是如此。

注意

Azure Databricks 服务主体角色不会与 Azure 角色或 Microsoft Entra ID(以前称为 Azure Active Directory)角色重叠。 这些角色仅跨 Azure Databricks 帐户。

使用帐户控制台管理服务主体角色

帐户管理员可以使用帐户控制台管理服务主体角色。

查看服务主体的角色

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

可以查看主体列表以及在服务主体上为它们授予的角色。 还可以使用搜索栏搜索特定的主体或角色。

在服务主体上授予角色

  1. 作为帐户管理员,登录到帐户控制台

  2. 在边栏中,单击“用户管理”。

  3. 在“服务主体”选项卡上,查找并单击名称。

  4. 单击“权限”选项卡。

  5. 单击“授予访问权限”。

  6. 搜索并选择用户、服务主体或组,然后选择要分配的一个或多个角色(“服务主体:管理者”或“服务主体:用户”)。

    注意

    具有“服务主体管理员”角色的用户不会继承“服务主体用户”角色。 如果你希望用户使用服务主体来执行作业,则需要显式分配服务主体用户角色。

  7. 单击“ 保存”。

撤销服务主体的角色

  1. 作为帐户管理员,登录到帐户控制台
  2. 在边栏中,单击“用户管理”。
  3. 在“服务主体”选项卡上,查找并单击名称。
  4. 单击“权限”选项卡。
  5. 搜索用户、服务主体或组以编辑其角色。
  6. 在包含主体的行上,单击 kebab 菜单 垂直省略号,然后选择“编辑”。 或者,选择“删除”以撤销主体的所有角色。
  7. 单击 “编辑”
  8. 单击要撤销的角色旁边的“X”。
  9. 单击“ 保存”。

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

工作区管理员可以使用管理员设置页来管理他们具有“服务主体管理者”角色的服务主体的服务主体角色。

查看服务主体的角色

  1. 以工作区管理员身份登录到 Azure Databricks 工作区。
  2. 单击 Azure Databricks 工作区顶部栏中的用户名,然后选择“设置”
  3. 单击“身份验证和访问控制”选项卡。
  4. 单击“服务主体”旁的“管理”。
  5. 查找并单击所需名称。
  6. 单击“权限”选项卡。

可以查看主体列表以及在服务主体上为它们授予的角色。 还可以使用搜索栏搜索特定的主体或角色。

在服务主体上授予角色

必须对服务主体具有“服务主体管理者”角色才能授予角色。

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

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

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

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

  5. 查找并单击所需名称。

  6. 单击“权限”选项卡。

  7. 单击“授予访问权限”。

  8. 搜索并选择用户、服务主体或组,然后选择要分配的一个或多个角色(“服务主体:管理者”或“服务主体:用户”)。

    注意

    可以向任何帐户级别的用户、服务主体或组授予角色,即使他们不是工作区的成员。 无法向工作区本地组授予角色。

    具有“服务主体管理员”角色的用户不会继承“服务主体用户”角色。 如果你希望用户使用服务主体来执行作业,则需要显式分配服务主体用户角色。

  9. 单击“ 保存”。

撤销服务主体的角色

必须具有服务主体的“服务主体管理者”角色才能撤销角色。

  1. 以工作区管理员身份登录到 Azure Databricks 工作区。
  2. 单击 Azure Databricks 工作区顶部栏中的用户名,然后选择“设置”
  3. 单击“身份验证和访问控制”选项卡。
  4. 单击“服务主体”旁的“管理”。
  5. 查找并单击所需名称。
  6. 单击“权限”选项卡。
  7. 搜索用户、服务主体或组以编辑其角色。
  8. 在包含主体的行上,单击 kebab 菜单 垂直省略号,然后选择“编辑”。 或者,选择“删除”以撤销主体的所有角色。
  9. 单击 “编辑”
  10. 单击要撤销的角色旁边的“X”。
  11. 单击“ 保存”。

使用 Databricks CLI 管理服务主体角色

必须具有服务主体的“服务主体管理者”角色才能管理角色。 可以使用 Databricks CLI 管理角色。 若要了解如何安装 Databricks CLI 并向其进行身份验证,请参阅什么是 Databricks CLI?

还可以使用帐户访问控制 API 管理服务主体角色。 通过 Azure Databricks 帐户和工作区支持帐户访问控制 API。

帐户管理员对 accounts.azuredatabricks.net ({account-domain}/api/2.0/preview/accounts/{account_id}/access-control) 调用 API。

具有“服务主体管理员”角色但不是帐户管理员的用户在工作区域 ({workspace-domain}/api/2.0/preview/accounts/access-control/) 上调用 API。

使用 Databricks CLI 授予服务主体的角色

帐户访问控制 API 使用 etag 字段来确保一致性。 若要通过 API 授予或撤销服务主体角色,请先发出 GET 规则集命令并在响应中接收 etag。 然后,可以在本地应用更改,最后使用 etag 发出 PUT 规则集。

例如,通过运行以下命令,对要授予访问权限的服务主体发出 GET 规则集:

databricks account access-control get-rule-set accounts/<account-id>/servicePrincipals/<application-id>/ruleSets/default <etag>

替换:

  • <account-id> 替换为帐户 ID。
  • <application-id> 替换为服务主体应用程序 ID。
  • 带 “” 的 <etag>

示例响应:

{
  "etag":"<etag>",
  "grant_rules": [
    {
      "principals": [
        "users/user@example.com"
      ],
      "role":"roles/servicePrincipal.manager"
    },
    {
      "principals": [
        "users/user@example.com"
      ],
      "role":"roles/servicePrincipal.user"
    }
  ],
  "name":"<name>"
}

复制响应正文中的 etag 字段供稍后使用。

然后,可以在确定规则的最终状态时在本地进行更新,并使用 etag 更新规则集。 若要将“服务主体:用户”角色授予用户 user2@example.com,请运行以下命令:

databricks account access-control update-rule-set --json '{
  "name": "accounts/<account-id>/servicePrincipals/<application-id>/ruleSets/default",
  "rule_set": {
      "name": "accounts/<account-id>/servicePrincipals/<application-id>/ruleSets/default",
      "grant_rules": [
        {
            "role": "roles/servicePrincipal.user",
            "principals": ["users/user2@example.com"]
        }
      ],
      "etag": "<etag>"
  }
}'

替换:

  • <account-id> 替换为帐户 ID。
  • <application-id> 替换为服务主体应用程序 ID。
  • <etag> 替换为从最后一个响应中复制的 etag。

示例响应:

{
  "etag":"<new-etag>",
  "grant_rules": [
    {
      "principals": [
        "users/user2@example.com"
      ],
      "role":"roles/servicePrincipal.user"
    }
  ],
  "name":"accounts/<account-id>/servicePrincipals/<application-id>/ruleSets/default"
}

重要

由于这是一个 PUT 方法,因此将覆盖所有现有角色。 若要保留任何现有角色,必须将其添加到 grant_roles 数组。

列出可用的服务主体

使用工作区服务主体 API,可以通过在 servicePrincipal/use 上进行筛选来列出具有用户角色的服务主体。

若要列出你拥有“服务主体用户”角色的服务主体,请运行以下命令:

databricks service-principals list -p WORKSPACE --filter "permission eq 'servicePrincipal/use'"

还可以使用工作区服务主体 API 列出服务主体。