サービスプリンシパルを管理するためのロール

この記事では、Databricks アカウントでサービスプリンシパルのロールを管理する方法について説明します。

サービスプリンシパルは、自動化ツール、ジョブ、アプリケーションで使用するために、お客様がDatabricksで作成するIDです。サービスプリンシパルは、自動化ツールとスクリプトにDatabricksリソースへのAPI専用のアクセス権を提供し、ユーザーやグループを使用するよりも優れたセキュリティを実現します。

Databricks ユーザー、サービスプリンシパル、およびアカウント グループに、サービスプリンシパルを使用するためのアクセス権を付与できます。 これにより、ユーザーは ID としてではなく、サービスプリンシパルとしてジョブを実行できます。 これにより、ユーザーが組織を離れたり、グループが変更されたりした場合にジョブが失敗するのを防ぎます。

サービスプリンシパルの概要については、「サービスプリンシパルの管理」を参照してください。

サービスプリンシパル ロール

サービスプリンシパルロールはアカウントレベルのロールです。 つまり、アカウントで一度定義するだけで、すべてのワークスペースに適用できます。 サービスプリンシパルに付与できるロールには、サービスプリンシパル マネージャーとサービスプリンシパル ユーザーの 2 つがあります。

  • サービスプリンシパル Manager を使用すると、サービスプリンシパルのロールを管理できます。 サービスプリンシパルの作成者は、サービスプリンシパルに対するサービスプリンシパルマネージャーの役割を持ちます。 アカウント管理者は、アカウント内のすべてのサービスプリンシパルに対するサービスプリンシパルマネージャーの役割を持ちます。

サービスプリンシパルが 2023 年 6 月 13 日より前に作成された場合、サービスプリンシパルの作成者にはデフォルトでサービスプリンシパル マネージャーの役割がありません。 マネージャーになる必要がある場合は、サービスプリンシパル マネージャーの役割を付与するようにアカウント管理者に依頼してください。

  • サービスプリンシパル ユーザーは、ワークスペース ユーザーがサービスプリンシパルとしてジョブを実行できるようにします。 ジョブは、ジョブ所有者の ID ではなく、サービスプリンパルシの ID を使用して実行されます。 サービスプリンシパル ユーザーロールを使用すると、ワークスペース管理者がサービスプリンシパルに代わってトークンを作成することもできます。

ワークスペースのRestrictWorkspaceAdmins設定がALLOW ALLに設定されている場合、ワークスペース管理者はワークスペース内のサービス プリンシパルに代わって個人用のアクセストークンを作成できます。 ワークスペース管理者がサービスプリンシパルの個人用アクセストークンを作成できるようにサービスプリンシパル ユーザーロールを適用するには、 「ワークスペース管理者の制限」を参照してください。

サービスプリンシパル Managerロールを持つユーザーは、サービスプリンシパル Userロールを継承しません。 サービスプリンシパルを使用してジョブを実行する場合は、サービスプリンシパルを作成した後でも、サービスプリンシパルのユーザー役割を明示的に自分自身に割り当てる必要があります。

アカウントコンソールを使用したマネージドサービスのプリンシパルロール

アカウント管理者は、アカウントコンソールを使用してサービスプリンシパルロールを管理できます。

サービスプリンシパルのロールの表示

  1. アカウント管理者として、アカウントコンソールにログインします。

  2. サイドバーで、[ユーザー管理] をクリックします。

  3. [ サービスプリンシパル ] タブで、名前を見つけてクリックします。

  4. [権限] タブをクリックします。

プリンシパルの一覧と、プリンシパルに付与されているロールは、サービスプリンシパルで確認できます。 検索バーを使用して、特定のプリンシパルまたはロールを検索することもできます。

サービスプリンシパルでのロールの付与

  1. アカウント管理者として、アカウントコンソールにログインします。

  2. サイドバーで、[ユーザー管理] をクリックします。

  3. [ サービスプリンシパル ] タブで、名前を見つけてクリックします。

  4. [権限] タブをクリックします。

  5. [ アクセス権の付与] をクリックします。

  6. ユーザー、サービスプリンシパル、またはグループを検索して選択し、割り当てるロール(サービスプリンシパル:マネージャーまたはサービスプリンシパル: ユーザー)を選択します。

    サービスプリンシパル Managerロールを持つユーザーは、サービスプリンシパル Userロールを継承しません。 ユーザーにサービスプリンシパルを使用してジョブを実行させたい場合は、サービスプリンシパル Userロールを明示的に割り当てる必要があります。

  7. [保存]をクリックします。

サービスプリンシパルのロールを取り消す

  1. アカウント管理者として、アカウントコンソールにログインします。

  2. サイドバーで、[ユーザー管理] をクリックします。

  3. [ サービスプリンシパル ] タブで、名前を見つけてクリックします。

  4. [権限] タブをクリックします。

  5. ユーザー、サービスプリンシパル、またはグループを検索して、ロールを編集します。

  6. プリンシパルのある行で、ケバブ メニュー 垂直省略記号 をクリックし、[ 編集] を選択します。 または、[ 削除 ] を選択して、プリンシパルのすべてのロールを取り消します。

  7. [編集] をクリックします。

  8. 取り消す役割の横にある [X ] をクリックします。

  9. [保存]をクリックします。

ワークスペース管理者設定ページを使用したサービスプリンシパルロールの管理

ワークスペース管理者は、管理者設定ページを使用して、サービスプリンシパル マネージャー ロールを持つサービスプリンシパルの サービスプリンシパル ロールを管理できます。

サービスプリンシパルのロールの表示

  1. ワークスペース管理者として、Databrickワークスペースにログインします。

  2. Databricks ワークスペースの上部バーにあるユーザー名をクリックし、 [設定]を選択します。

  3. [ ID とアクセス ] タブをクリックします。

  4. [サービスプリンシパル] の横にある [管理] をクリックします。

  5. 名前を見つけてクリックします。

  6. [権限] タブをクリックします。

プリンシパルの一覧と、プリンシパルに付与されているロールは、サービスプリンシパルで確認できます。 検索バーを使用して、特定のプリンシパルまたはロールを検索することもできます。

サービスプリンシパルでのロールの付与

ロールを付与するには、サービス プリンシパルのサービスプリンシパル Manager ロールが必要です。

  1. ワークスペース管理者として、Databrickワークスペースにログインします。

  2. Databricks ワークスペースの上部バーにあるユーザー名をクリックし、 [設定]を選択します。

  3. [ ID とアクセス ] タブをクリックします。

  4. [サービスプリンシパル] の横にある [管理] をクリックします。

  5. 名前を見つけてクリックします。

  6. [権限] タブをクリックします。

  7. [ アクセス権の付与] をクリックします。

  8. ユーザー、サービスプリンシパル、またはグループを検索して選択し、割り当てるロール(サービスプリンシパル:マネージャーまたはサービスプリンシパル: ユーザー)を選択します。

    ロールは、ワークスペースのメンバーでなくても、任意のアカウントレベルのユーザー、サービスプリンシパル、またはグループに付与できます。 ワークスペースローカルグループにロールを付与することはできません。

    サービスプリンシパル Managerロールを持つユーザーは、サービスプリンシパル Userロールを継承しません。 ユーザーにサービスプリンシパルを使用してジョブを実行させたい場合は、サービスプリンシパル Userロールを明示的に割り当てる必要があります。

  9. [保存]をクリックします。

サービスプリンシパルのロールを取り消す

ロールを取り消すには、サービス プリンシパルのサービスプリンシパル Manager ロールが必要です。

  1. ワークスペース管理者として、Databrickワークスペースにログインします。

  2. Databricks ワークスペースの上部バーにあるユーザー名をクリックし、 [設定]を選択します。

  3. [ ID とアクセス ] タブをクリックします。

  4. [サービスプリンシパル] の横にある [管理] をクリックします。

  5. 名前を見つけてクリックします。

  6. [権限] タブをクリックします。

  7. ユーザー、サービスプリンシパル、またはグループを検索して、ロールを編集します。

  8. プリンシパルのある行で、ケバブ メニュー 垂直省略記号 をクリックし、[ 編集] を選択します。 または、[ 削除 ] を選択して、プリンシパルのすべてのロールを取り消します。

  9. [編集] をクリックします。

  10. 取り消す役割の横にある [X ] をクリックします。

  11. [保存]をクリックします。

Databricks CLI を使用してサービスプリンシパル ロールを管理する

サービスプリンシパルのロールを管理するには、 サービスプリンシパル マネージャー ロールが必要です。 Databricks CLI を使用してロールを管理できます。 Databricks CLI のインストールと認証の詳細については、「 Databricks CLI とは」を参照してください。

また、アカウント Access Control API を使用してサービスプリンシパルのロールを管理することもできます。アカウント アクセス制御 API は、Databricks アカウントとワークスペースを通じてサポートされています。

アカウント管理者は、accounts.クラウド.databricks.com ({account-domain}/api/2.0/preview/accounts/{account_id}/access-control) で API を呼び出します。

アカウント管理者ではない、サービスプリンシパル Managerロールを持つユーザーは、ワークスペース ドメイン ( {workspace-domain}/api/2.0/preview/accounts/access-control/ ) で API を呼び出します。

Databricks CLI を使用してサービスプリンシパルにロールを付与する

アカウントのアクセス制御 API では、一貫性を確保するために etag フィールドを使用します。 API を使用してサービスプリンシパルロールを付与または取り消すには、まず GET ルールセットコマンドを発行し、応答として etag を受け取ります。 その後、変更をローカルに適用し、最後に etagPUT ルールセットを発行できます。

たとえば、次のコマンドを実行して、アクセスを許可するサービスプリンシパルに 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 配列に追加する必要があります。

使用できるサービスプリンシパルを一覧表示する

Workspace サービスプリンシパル API を使用すると、 servicePrincipal/useでフィルタリングすることで、ユーザーロールを持つサービスプリンシパルを一覧表示できます。

サービスプリンシパル User ロールを持つサービスプリンシパルを一覧表示するには、次のコマンドを実行します。

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

また、ワークスペース サービスプリンシパル API を使用して、サービス プリンシパルを一覧表示することもできます。