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

この記事では、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. Databrickワークスペースの上部のバーにあるユーザー名をクリックし、[管理者設定] を選択します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Databricks CLI を使用してサービスプリンシパル ロールを管理するManage serviceprincipal roles using the 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 を使用してサービスプリンシパルにロールを付与するGrant roles on a serviceprincipal using the 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 を使用して、サービス プリンシパルを一覧表示することもできます。