为 Databricks 资产捆绑包中的资源设置权限

本文介绍如何为 Databricks 资产捆绑包中的 Azure Databricks 作业、Delta Live Tables 管道和 MLOps 堆栈设置权限。 请参阅什么是 Databricks 资产捆绑包?

在 Azure Databricks 捆绑配置文件中,可以定义应用于捆绑包中定义的所有资源的权限,也可以定义一个或多个应用于特定资源的权限。

注意

权限不能重叠。 换句话说,不能在顶级 permissions 映射和 resources 映射中定义用户、组或服务主体的权限。

定义应用于所有资源的权限

可以定义权限以应用于使用顶级 permissions 映射在 resources 中定义的所有试验、作业、模型和管道。 请参阅权限

定义特定资源的权限

可以在 resources 中的试验、作业、模型或管道定义中使用 permissions 映射来为该资源定义一个或多个权限。

permissions 数组中的每个权限必须包含以下两个映射:

  • user_namegroup_nameservice_principal_name,它们分别包含用户、组或服务主体的名称。
  • level,包含权限级别的名称。 每个资源允许的权限级别如下:
    • 试验:CAN_EDITCAN_MANAGECAN_READ
    • 作业:CAN_MANAGECAN_MANAGE_RUNCAN_VIEWIS_OWNER
    • 模型:CAN_EDITCAN_MANAGECAN_MANAGE_STAGING_VERSIONSCAN_MANAGE_PRODUCTION_VERSIONSCAN_READ
    • 管道:CAN_MANAGECAN_RUNCAN_VIEWIS_OWNER

有关特定权限级别的信息,请参阅:

注意

资源允许的权限级别不一定应用于使用顶级 permissions 映射的资源。 有关 permissions 映射的有效权限级别,请参阅权限

以下语法显示了如何为顶级 resources 映射或目标内的 resources 映射中的每种资源类型声明多个权限(为简洁起见,此处用省略号表示省略的内容):

# ...
resources:
  experiments:
    <some-programmatic-identifier-for-this-experiment>:
      # ...
      permissions:
        - user_name: <user-name> # Or:
          group_name: <group-name> # Or:
          service_principal_name: <service-principal-name>
          level: <permission-level>
      # ...
  jobs:
    <some-programmatic-identifier-for-this-job>:
      # ...
      permissions:
        - user_name: <user-name> # Or:
          group_name: <group-name> # Or:
          service_principal_name: <service-principal-name>
          level: <permission-level>
      # ...
  models:
    <some-programmatic-identifier-for-this-model>:
      # ...
      permissions:
        - user_name: <user-name> # Or:
          group_name: <group-name> # Or:
          service_principal_name: <service-principal-name>
          level: <permission-level>
      # ...
  pipelines:
    <some-programmatic-identifier-for-this-pipeline>:
      # ...
      permissions:
        - user_name: <user-name> # Or:
          group_name: <group-name-1> # Or:
          service_principal_name: <service-principal-name>
          level: <permission-level>
      # ...

targets:
  <some-programmatic-identifier-for-this-target>:
    resources:
      experiments:
        <some-programmatic-identifier-for-this-experiment>:
          # ...
          permissions:
            - user_name: <user-name> # Or:
              group_name: <group-name> # Or:
              service_principal_name: <service-principal-name>
              level: <permission-level>
          # ...
      jobs:
        <some-programmatic-identifier-for-this-job>:
          # ...
          permissions:
            - user_name: <user-name> # Or:
              group_name: <group-name> # Or:
              service_principal_name: <service-principal-name>
              level: <permission-level>
          # ...
      models:
        <some-programmatic-identifier-for-this-model>:
          # ...
          permissions:
            - user_name: <user-name> # Or:
              group_name: <group-name> # Or:
              service_principal_name: <service-principal-name>
              level: <permission-level>
          # ...
      pipelines:
        <some-programmatic-identifier-for-this-pipeline>:
          # ...
          permissions:
            - user_name: <user-name> # Or:
              group_name: <group-name> # Or:
              service_principal_name: <service-principal-name>
              level: <permission-level>
          # ...
    # ...

为顶级 resources 映射中的资源声明的任何权限将与为单个目标中相同 resources 映射声明的任何权限相结合。 例如,假设最高级别和目标中的同一资源具有以下 resources 映射(为简洁起见,此处用省略号表示省略的内容):

bundle:
  name: my-bundle

resources:
  jobs:
    my-job:
      # ...
      permissions:
        - user_name: someone@example.com
          level: CAN_VIEW
      # ...

targets:
  dev:
    # ...
    resources:
      jobs:
        my-job:
          # ...
          permissions:
            - user_name: someone@example.com
              level: CAN_RUN
          # ...

在为此示例运行 databricks bundle validate 时,生成的图形如下所示(为简洁起见,下面用省略号表示省略的内容):

{
  "...": "...",
  "resources": {
    "jobs": {
      "my-job": {
        "permissions": [
          {
            "level": "CAN_VIEW",
            "user_name": "someone@example.com"
          },
          {
            "level": "CAN_RUN",
            "user_name": "someone@example.com"
          }
        ],
        "...": "..."
      }
    }
  }
}