サービスプリンシパルを管理するためのロール
この記事では、 Databricks アカウントのサービスプリンシパルの役割を管理する方法について説明します。
サービスプリンシパルは、自動化ツール、ジョブ、アプリケーションで使用するために、お客様がDatabricksで作成するIDです。サービスプリンシパルは、自動化ツールとスクリプトにDatabricksリソースへのAPI専用のアクセス権を提供し、ユーザーやグループを使用するよりも優れたセキュリティを実現します。
Databricks ユーザー、サービスプリンシパル、およびアカウント グループに、サービスプリンシパルを使用するためのアクセス権を付与できます。これにより、ユーザーは自分のIDとしてではなく、サービスプリンシパルとしてジョブを実行できます。 これにより、ユーザーが組織を離れたり、グループが変更されたりした場合にジョブが失敗するのを防ぐことができます。
サービスプリンシパルの概要については、「 サービスプリンシパルの管理」を参照してください。
サービスプリンシパル roles
サービスプリンシパル ロールは、アカウント レベルのロールです。 つまり、アカウント内で一度だけ定義し、すべてのワークスペースに適用する必要があります。 サービスプリンシパルに付与できるロールには、 サービスプリンシパル Manager と サービスプリンシパル User の 2 つがあります。
- サービスプリンシパル Manager を使用すると、サービスプリンシパル上のロールを管理できます。 サービスプリンシパルの作成者は、サービスプリンシパルに対する サービスプリンシパル Manager ロールを持っています。 アカウント admins は、アカウント内のすべてのサービスプリンシパルに対して サービスプリンシパル Manager ロールを持っています。
サービスプリンシパルが 2023 年 6 月 13 日より前に作成された場合、サービスプリンシパルの作成者は、デフォルトによる サービスプリンシパル Manager ロールを持っていません。 マネージャーになる必要がある場合は、アカウント管理者に サービスプリンシパル マネージャー ロールの付与を依頼してください。
- サービスプリンシパル User は、ワークスペース ユーザーがサービスプリンシパルとしてジョブを実行できるようにします。 ジョブは、ジョブ所有者の ID ではなく、サービスプリンシパルの ID で実行されます。 サービスプリンシパル User ロールを使用すると、ワークスペース管理者はサービスプリンシパルに代わって個人用アクセス トークンを作成することもできます。サービスプリンシパルの OAuth シークレットを作成するには、アカウント admin または ワークスペース admin ロールが必要です。
ワークスペースの RestrictWorkspaceAdmins
設定が ALLOW ALL
に設定されている場合、ワークスペース管理者は、ワークスペース内の任意のサービスプリンシパルに代わって個人用アクセス トークンを作成できます。 ワークスペース管理者に サービスプリンシパル ユーザー ロールを適用して、サービスプリンシパルの個人用アクセス トークンを作成するには、「 ワークスペース管理者を制限する」を参照してください。
サービスプリンシパル Manager ロールを持つユーザーは、 サービスプリンシパル User ロールを継承しません。サービスプリンシパルを使用してジョブを実行する場合は、サービスプリンシパルを作成した後でも、サービスプリンシパルユーザーロールを明示的に割り当てる必要があります。
アカウントコンソールを使用してサービスプリンシパル ロールを管理する
アカウント Admins は、アカウント コンソールを使用してサービスプリンシパル ロールを管理できます。
サービスプリンシパルの役割を表示する
- アカウント管理者として、アカウントコンソールにログインします。
- サイドバーで、[ ユーザー管理 ] をクリックします。
- サービスプリンシパル タブで、名前を見つけてクリックします。
- 「 権限 」タブをクリックします。
プリンシパルのリストと、サービスプリンシパルで付与されているロールを確認できます。 検索バーを使用して、特定のプリンシパルまたはロールを検索することもできます。
サービスプリンシパルにロールを付与する
-
アカウント管理者として、アカウントコンソールにログインします。
-
サイドバーで、[ ユーザー管理 ] をクリックします。
-
サービスプリンシパル タブで、名前を見つけてクリックします。
-
「 権限 」タブをクリックします。
-
[ アクセス権を付与 ] をクリックします。
-
ユーザー、サービスプリンシパル、またはグループを検索して選択し、割り当てるロール ( サービスプリンシパル: Manager または サービスプリンシパル: User ) を選択します。
サービスプリンシパル Manager ロールを持つユーザーは、 サービスプリンシパル User ロールを継承しません。ユーザーがサービスプリンシパルを使用してジョブを実行できるようにする場合は、 サービスプリンシパル User ロールを明示的に割り当てる必要があります。
- [ 保存 ]をクリックします。
サービスプリンシパルの役割を取り消す
- アカウント管理者として、アカウントコンソールにログインします。
- サイドバーで、[ ユーザー管理 ] をクリックします。
- サービスプリンシパル タブで、名前を見つけてクリックします。
- 「 権限 」タブをクリックします。
- ユーザー、サービスプリンシパル、またはグループを検索して、ロールを編集します。
- プリンシパルの行で、ケバブ メニュー
をクリックし、[ 編集 ] を選択します。 または、 [削除 ] を選択して、プリンシパルのすべてのロールを取り消します。
- [ 編集 ] をクリックします。
- 取り消すロールの横にある [X ] をクリックします。
- [ 保存 ]をクリックします。
ワークスペース管理設定ページを使用してサービスプリンシパル ロールを管理する
ワークスペース 管理者は、管理者設定ページを使用して、 サービスプリンシパル マネージャー ロールを持つサービスプリンシパルのロールを管理できます。
サービスプリンシパルの役割を表示する
- ワークスペース管理者として、Databrickワークスペースにログインします。
- Databricksワークスペースの上部のバーにあるユーザー名をクリックし、 [設定] を選択します。
- [ IDとアクセス ] タブをクリックします。
- サービスプリンシパル の横にある [ 管理 ] をクリックします。
- 名前を見つけてクリックします。
- 「 権限 」タブをクリックします。
プリンシパルのリストと、サービスプリンシパルで付与されているロールを確認できます。 検索バーを使用して、特定のプリンシパルまたはロールを検索することもできます。
サービスプリンシパルにロールを付与する
ロールを付与するには、サービスプリンシパルに対する サービスプリンシパル Manager ロールが必要です。
-
ワークスペース管理者として、Databrickワークスペースにログインします。
-
Databricksワークスペースの上部のバーにあるユーザー名をクリックし、 [設定] を選択します。
-
[ IDとアクセス ] タブをクリックします。
-
サービスプリンシパル の横にある [ 管理 ] をクリックします。
-
名前を見つけてクリックします。
-
「 権限 」タブをクリックします。
-
[ アクセス権を付与 ] をクリックします。
-
ユーザー、サービスプリンシパル、またはグループを検索して選択し、割り当てるロール ( サービスプリンシパル: Manager または サービスプリンシパル: User ) を選択します。
ロールは、ワークスペースのメンバーでなくても、アカウントレベルのユーザー、サービスプリンシパル、またはグループに付与できます。 ロールは、ワークスペースローカルグループに付与できません。
サービスプリンシパル Manager ロールを持つユーザーは、 サービスプリンシパル User ロールを継承しません。ユーザーがサービスプリンシパルを使用してジョブを実行できるようにする場合は、 サービスプリンシパル User ロールを明示的に割り当てる必要があります。
- [ 保存 ]をクリックします。
サービスプリンシパルの役割を取り消す
ロールを取り消すには、サービスプリンシパルに対する サービスプリンシパル Manager ロールが必要です。
- ワークスペース管理者として、Databrickワークスペースにログインします。
- Databricksワークスペースの上部のバーにあるユーザー名をクリックし、 [設定] を選択します。
- [ IDとアクセス ] タブをクリックします。
- サービスプリンシパル の横にある [ 管理 ] をクリックします。
- 名前を見つけてクリックします。
- 「 権限 」タブをクリックします。
- ユーザー、サービスプリンシパル、またはグループを検索して、ロールを編集します。
- プリンシパルの行で、ケバブ メニュー
をクリックし、[ 編集 ] を選択します。 または、 [削除 ] を選択して、プリンシパルのすべてのロールを取り消します。
- [ 編集 ] をクリックします。
- 取り消すロールの横にある [X ] をクリックします。
- [ 保存 ]をクリックします。
Databricks CLI を使用してサービスプリンシパル ロールを管理する
サービスプリンシパルの役割を管理するには、 サービスプリンシパル Manager の役割が必要です。 Databricks CLI を使用してロールを管理できます。 Databricks CLIのインストールと認証に関する情報については、「Databricks CLIとは」を参照してください。
サービスプリンシパル ロールは、アカウント Access Control APIを使用して管理することもできます。アカウント Access Control API は、 Databricks アカウントとワークスペースを通じてサポートされます。
アカウント 管理者は、アカウント.gcp.cloud.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 と 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 を使用してルール セットを更新できます。 サービスプリンシパル: ユーザー ロールをユーザー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":"<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
でフィルタリングすることで、ユーザーロールを持つサービスプリンシパルを一覧表示できます。
サービスプリンシパル User ロールを持つサービスプリンシパルを一覧表示するには、次のコマンドを実行します。
databricks service-principals list -p WORKSPACE --filter "permission eq 'servicePrincipal/use'"
ワークスペース サービスプリンシパル APIを使用して、サービスプリンシパルを一覧表示することもできます。