Share via


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

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

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

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

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

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

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

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

Note

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

  • サービス プリンシパル ユーザーは、ワークスペース ユーザーがサービス プリンシパルとしてジョブを実行することを許可できます。 ジョブは、ジョブの所有者の ID ではなく、サービス プリンシパルの ID を使用して実行されます。

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

Note

Azure Databricks のサービス プリンシパルのロールは、Azure のロールまたは Microsoft Entra ID (旧称 Azure Active Directory) のロールと重複していません。 これらのロールは、Azure Databricks アカウントでのみ適用されます。

アカウント コンソールを使用してサービス プリンシパルのロールを管理する

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

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

  1. アカウント管理者として、アカウント コンソールにログインします。
  2. サイドバーで、[ユーザー管理] をクリックします。
  3. [サービス プリンシパル] タブで、名前を見つけてクリックします。
  4. [Permissions] タブをクリックします。

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

サービス プリンシパルにロールを付与する

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

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

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

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

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

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

    Note

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

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

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

  1. アカウント管理者として、アカウント コンソールにログインします。
  2. サイドバーで、[ユーザー管理] をクリックします。
  3. [サービス プリンシパル] タブで、名前を見つけてクリックします。
  4. [Permissions] タブをクリックします。
  5. ロールを編集するユーザー、サービス プリンシパル、またはグループを検索します。
  6. プリンシパルがある行で、ケバブ メニュー 縦方向の省略記号 を選択し、[編集] を選択します。 または、[削除] を選択して、プリンシパルのすべてのロールを取り消します。
  7. 編集 をクリックします。
  8. 取り消すロールの横にある X を選択します。
  9. [保存] をクリックします。

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

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

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

  1. ワークスペース管理者として、Azure Databricks ワークスペースにログインします。
  2. Azure Databricks ワークスペースの上部バーでユーザー名を選択し、[設定] を選択します。
  3. [ID およびアクセス管理] タブをクリックします。
  4. [サービス プリンシパル] の横にある [管理] をクリックします。
  5. 名前を見つけてクリックします。
  6. [Permissions] タブをクリックします。

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

サービス プリンシパルにロールを付与する

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

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

  2. Azure Databricks ワークスペースの上部バーでユーザー名を選択し、[設定] を選択します。

  3. [ID およびアクセス管理] タブをクリックします。

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

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

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

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

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

    Note

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

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

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

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

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

  1. ワークスペース管理者として、Azure Databricks ワークスペースにログインします。
  2. Azure Databricks ワークスペースの上部バーでユーザー名を選択し、[設定] を選択します。
  3. [ID およびアクセス管理] タブをクリックします。
  4. [サービス プリンシパル] の横にある [管理] をクリックします。
  5. 名前を見つけてクリックします。
  6. [Permissions] タブをクリックします。
  7. ロールを編集するユーザー、サービス プリンシパル、またはグループを検索します。
  8. プリンシパルがある行で、ケバブ メニュー 縦方向の省略記号 を選択し、[編集] を選択します。 または、[削除] を選択して、プリンシパルのすべてのロールを取り消します。
  9. 編集 をクリックします。
  10. 取り消すロールの横にある X を選択します。
  11. [保存] をクリックします。

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

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

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

アカウント管理者は、accounts.azuredatabricks.net ({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 では、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 を使用してルール セットを更新することができます。 "サービス プリンシパル: ユーザー" ロールをユーザー 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 を使用して、サービス プリンシパルを一覧表示することもできます。