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