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