Databricks アセット バンドルのリソースのアクセス許可を設定する

この記事では、Databricks アセット バンドルで Azure Databricks ジョブ、Delta Live Tables パイプライン、MLOps スタックのアクセス許可を設定する方法について説明します。 「Databricks アセット バンドルとは」をご覧ください。

Azure Databricks のバンドル構成ファイルでは、バンドルで定義されているすべてのリソースに適用するアクセス許可を定義することや、特定のリソースに適用する 1 つ以上のアクセス許可を定義することができます。

Note

重複するアクセス許可は指定できません。 つまり、ユーザー、グループ、またはサービス プリンシパルのアクセス許可を、最上位の permissions マッピングと resources マッピングの両方で定義することはできません。

すべてのリソースに適用するアクセス許可を定義する

最上位の permissions マッピングを使って、resources で定義されたすべての実験、ジョブ、モデル、パイプラインに適用するアクセス許可を定義できます。 「permissions」を参照してください。

Databricks では、Databricks Asset Bundles リソースのアクセス許可を管理するために、このアプローチをお勧めします。

特定のリソースのアクセス許可を定義する

resources の実験、ジョブ、モデル、またはパイプライン定義で permissions マッピングを使い、そのリソースに対する 1 つ以上のアクセス許可を定義できます。

permissions マッピング内の各アクセス許可には、次の 2 つのマッピングが含まれている必要があります。

  • user_namegroup_name、またはservice_principal_nameのいずれかに、ユーザー、グループ、またはサービス プリンシパルの名前をそれぞれ指定します。
  • level、アクセス許可レベルの名前を指定します。 各リソースで使用できるアクセス許可レベルは次のとおりです。
    • 実験: CAN_EDITCAN_MANAGE および CAN_READ
    • ジョブ: CAN_MANAGECAN_MANAGE_RUNCAN_VIEWIS_OWNER
    • モデル: CAN_EDITCAN_MANAGECAN_MANAGE_STAGING_VERSIONSCAN_MANAGE_PRODUCTION_VERSIONS、および CAN_READ
    • パイプライン: CAN_MANAGECAN_RUNCAN_VIEW、および IS_OWNER

特定のアクセス許可レベルの詳細については、以下を参照してください:

Note

リソースで使用できるアクセス許可レベルを、最上位レベルの 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"
          }
        ],
        "...": "..."
      }
    }
  }
}