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

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

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

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

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

サービスプリンシパルの役割

サービスプリンシパルの役割はアカウント レベルの役割です。 つまり、アカウント内で一度定義するだけで、すべてのワークスペースに適用されます。 サービスプリンシパルに付与できるロールは、サービスプリンシパル Managerサービスプリンシパル User の2 つです。

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

注:

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

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

注:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    注:

    サービスプリンシパル マネージャーロールを持つユーザーは、サービスプリンシパル ユーザーロールを継承しません。 ユーザーがサービスプリンシパルを使用してジョブを実行できるようにするには、サービスプリンシパル ユーザーロールを明示的に割り当てる必要があります。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ロールを付与するには、 サービスプリンシパル に対する サービスプリンシパル マネージャーロールが必要です。

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

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

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

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

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

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

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

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

    注:

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

    サービスプリンシパル マネージャーロールを持つユーザーは、サービスプリンシパル ユーザーロールを継承しません。 ユーザーがサービスプリンシパルを使用してジョブを実行できるようにするには、サービスプリンシパル ユーザーロールを明示的に割り当てる必要があります。

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

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

ロールを取り消すには、 サービスプリンシパル に対するサービスプリンシパル マネージャーロールが必要です。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

アカウント管理者は、アカウント.クラウド.databricks.com ({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 および CLI は、一貫性を確保するために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 を使用してルール セットを更新できます。 サービスプリンシパル: Userロールをユーザー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を使用して、 サービスプリンシパル を一覧表示することもできます。