Databricksにおけるユーザー、サービスプリンシパル、グループの管理

[Manage users, service principals, and groups \| Databricks on AWS](https://docs.databricks.com/administration-guide/users-groups/index.html) [2022/11/18時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

本書では、Databricksのアイデンティティ管理モデルを紹介し、Databricksにおいてどのようにユーザー、グループ、サービスプリンシパルを管理するのかの概要を説明します。

Databricksにおいてどのようにアイデンティティを管理するのがベストなのかを示している[Databricksにおけるアイデンティティ管理のベストプラクティス](https://qiita.com/taka_yayoi/items/641b9c22e22071c7c17c)もご覧ください。

# Databricksにおけるアイデンティティとロール

Databricksのアイデンティティには3つのタイプが存在します:

- **ユーザー:** Databricksによって識別されるユーザーアイデンティティでありメールアドレスで表現されます。
- **サービスプリンシパル:** ジョブ、自動化ツール、そして、スクリプト、アプリ、CI/CDプラットフォームのようなシステムで使用するアイデンティティです。
- **グループ:** ワークスペース、データ、そのほかのセキュリティ保護可能オブジェクトへのグループのアクセスを管理するために、管理者によって使用されるアイデンティティのコレクションです。

Databricksで定義されるロールが5つ存在します:

- **アカウント管理者**は、ワークスペース、Unity Catalogメタストアの作成、課金、クラウドリソースを含むDatabricksのアカウントレベルの設定を管理することができます。アカウント管理者はアカウントにユーザーを追加し、管理者ロールを割り当てることができます。また、ワークスペースで[アイデンティティフェデレーション](#管理者はどのようにユーザーをワークスペースに割り当てるのか)を使用している場合、ユーザーにワークスペースへのアクセス権を与えることができます。
- **ワークスペース管理者**は、Databricksワークスペースにユーザーを追加し、ワークスペース管理者ロールや、クラスターの作成や特定のペルソナベースの環境へのアクセス権などの能力を割り当てることができます。
- **メタストア管理者**は誰がカタログを作成でき、テーブルをクエリーできるのかと言ったUnity Catalogメタストアの全てのセキュリティ保護可能オブジェクトの権限を管理することができます。
- **アカウントユーザー**はワークスペースを参照し、ワークスペースに接続するためにアカウントコンソールを使用することができます。アカウント管理者とワークスペース管理者はアカウントにユーザーを追加することができます。
- **ワークスペースユーザー**はワークスペースでデータサイエンス、データエンジニアリング、データ分析タスクを実行します。アカウント管理者とワークスペース管理者は、ワークスペースで[アイデンティティフェデレーション](#管理者はどのようにユーザーをワークスペースに割り当てるのか)を使用している場合、アカウントユーザーにワークスペースへのアクセス権を与えることができます。

# 誰がDatabricksでアイデンティティを管理できるのか？

Databricksでアイデンティティを管理するには、アカウント管理者かワークスペース管理者である必要があります。以下の表では、ユーザー管理のアクションに必要な特定のアクセス権の詳細を示しています。

| アクション | 誰がこのアクションを実行できるのか？ |
|:--|:--|
|ユーザーとサービスプリンシパルの追加   | アカウント管理者はアカウントにユーザーとサービスプリンシパルを追加することができます。<br><br>ワークスペース管理者はワークスペースにユーザーとサービスプリンシパルを追加することができます。  |
|ユーザーとサービスプリンシパルの更新   | アカウント管理者はアカウントのユーザーとサービスプリンシパルを更新することができます。  |
|ユーザーとサービスプリンシパルの削除   | アカウント管理者はアカウントのユーザーとサービスプリンシパルを削除することができます。  |
|グループの追加   | アカウント管理者はアカウントにグループを追加することができます。<br><br>ワークスペース管理者はワークスペース管理者のワークスペースに[ワークスペースローカルグループ](#グループに対する特別な検討)を追加することができます。  |
|グループの更新   | アカウント管理者はアカウントのグループを更新することができます。<br><br>ワークスペース管理者はワークスペース管理者のワークスペースの[ワークスペースローカルグループ](#グループに対する特別な検討)を更新することができます。  |
|グループの削除   | アカウント管理者はアカウントからグループを削除することができます。<br><br>ワークスペース管理者はワークスペース管理者のワークスペースから[ワークスペースローカルグループ](#グループに対する特別な検討)を削除することができます。  |

アカウントには合わせて最大10,000ユーザーとサービスプリンシパルを持つことができ、最大5000グループを持つことができます。それぞれのワークスペースでは、最大10,000ユーザーとサービスプリンシパル、最大5000グループを持つことができます。

詳細な手順に関しては、以下をご覧ください:

- [Databricksにおけるユーザー管理](https://qiita.com/taka_yayoi/items/3262ea8529ad96b920ce)
- [Manage service principals](https://docs.databricks.com/administration-guide/users-groups/service-principals.html)
- [Databricksにおけるグループの管理](https://qiita.com/taka_yayoi/items/cf910645f7b7420e58e4)
- [Sync users and groups from your identity provider](https://docs.databricks.com/administration-guide/users-groups/scim/index.html)

# 管理者はどのようにユーザーをワークスペースに割り当てるのか？

Databricksワークスペースで作業するために、ユーザー、サービスプリンシパル、グループを有効化するには、アカウント管理者あるいはワークスペース管理者がそれらをワークスペースに割り当てる必要があります。

アカウント管理者は、ワークスペースで[アイデンティティフェデレーション](#管理者はどのようにワークスペースのアイデンティティフェデレーションを有効化するのか)が有効化されている場合、ワークスペースに対してアカウントに存在するユーザー、サービスプリンシパル、グループにアクセスを割り当てることができます。また、ワークスペース管理者はアイデンティティフェデレーションが有効化されている自分のワークスペースにユーザー、サービスプリンシパル、グループを割り当てることができます。

逆に、新規ユーザーや新規サービスプリンシパルをワークスペースに直接追加すると、それらのユーザー、サービスプリンシパルは自動でアカウントに追加され、ワークスペースに割り当てられます。この上流のフローはお勧めしません。アカウントにユーザーを追加し、ワークスペースに割り当てる方が分かりやすいです。[Databricksはどのようにワークスペースとアカウント間でアイデンティティを同期するのか？](#databricksはどのようにワークスペースとアカウント間でアイデンティティを同期するのか)をご覧ください。

ワークスペースローカルグループとして知られる、ワークスペースで直接作成されたグループは自動でアカウントに追加されません。アカウントのグループとして手動でワークスペースローカルグループを再作成することができます。[グループに対する特別な検討](#グループに対する特別な検討)をご覧ください。
![](https://docs.databricks.com/_images/account-level-identity-diagram.png)

アイデンティティフェデレーションが有効化されていないワークスペースにおいては、ワークスペース管理者がワークスペースのスコープ内でワークスペースユーザー、サービスプリンシパル、グループを管理します(レガシーモデル)。彼らはこれらのワークスペースに対してアカウントからユーザーを割り当てるために、アカウントコンソールやアカウントレベルのAPIを使うことはできませんが、すべてのワークスペースレベルのインタフェースを使用することができます。

ユーザーやサービスプリンシパルがワークスペースに追加されると、そのユーザーやサービスプリンシパルはアカウントレベルに同期されます。アカウントレベルでユーザーやサービスプリンシパルが削除されると、そのユーザーはアカウント内の全てのワークスペースに対するアクセス権を失います。ワークスペースにグループが追加されると、そのグループはワークスペースローカルグループとなり、アカウントには追加されません。[グループに対する特別な検討](#グループに対する特別な検討)をご覧ください。

詳細な手順については以下をご覧ください:

- [ワークスペースにユーザーを追加する](https://qiita.com/taka_yayoi/items/3262ea8529ad96b920ce#%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%AB%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B)
- [Add service principals to a workspace](https://docs.databricks.com/administration-guide/users-groups/service-principals.html#add-sp-workspace)
- [Add groups to a workspace](https://docs.databricks.com/administration-guide/users-groups/groups.html#add-groups-workspace)

# 管理者はどのようにワークスペースのアイデンティティフェデレーションを有効化するのか？

ワークスペースでアイデンティティフェデレーションを有効化するには、ワークスペースをUnity Catalogメタストアに割り当てることで、ワークスペースでUnity Catalogを有効化する必要があります。[Enable a workspace for Unity Catalog](https://docs.databricks.com/data-governance/unity-catalog/enable-workspaces.html)をご覧ください。

# Databricksはどのようにワークスペースとアカウント間でアイデンティティを同期するのか？

2022年8月にすべての既存のワークスペースユーザーとサービスプリンシパルは自動でアカウントレベルのユーザー、アカウントレベルのサービスプリンシパルに同期されました。Databricksはワークスペースにユーザーが追加された際には、常にユーザーとサービスプリンシパルをアカウントに同期し続けます。ワークスペースユーザーがアカウントレベルのユーザーや既に存在している管理者とユーザー名(メールアドレス)を共有している場合にはマージされます。

:::note warn
**重要！**
アカウント管理者がアカウントレベルでユーザーやサービスプリンシパルを削除すると、そのユーザーはアイデンティティフェデレーションが有効化されているかどうかに関係なくワークスペースからも削除されます。アカウントのすべてのワークスペースに対するアクセス権を剥奪したい場合を除いて、アカウントレベルのユーザーやサービスプリンシパルを削除すべきではありません。ユーザー削除による以下の影響に注意してください:

- 当該ユーザーによって生成されたトークンを使用しているアプリケーションやスクリプトはDatabricks APIにアクセスできなくなります。
- 当該ユーザーによって所有されているジョブは失敗します。
- 当該ユーザーによって所有されているクラスターは停止します。
- 当該ユーザーによって作成され`Run as Owner`資格情報で共有されているクエリーやダッシュボードは、共有が失敗しないように新たなオーナーに割り当てる必要があります。
:::

ワークスペースローカルグループはアカウントレベルに同期されません。ワークスペースローカルグループは、ワークスペース管理者のコンソールと(当該ワークスペースでアイデンティティフェデレーションが有効化されている場合)アカウントコンソールのワークスペースアクセス権タブで*ワークスペースローカル*と識別されます。詳細は[グループに対する特別な検討](#グループに対する特別な検討)をご覧ください。

# グループに対する特別な検討

ワークスペースレベルで作成されたユーザーとサービスプリンシパルは[自動でアカウントに同期](#databricksはどのようにワークスペースとアカウント間でアイデンティティを同期するのか)されますが、ワークスペースで作成されたグループは同期されません。代わりに、Databricksには、特殊な挙動を持つ*アカウントグループ*と*ワークスペースローカルグループ*というコンセプトがあります。

- **アカウントグループ**はアカウント管理者によってのみ作成することができます。アカウントグループはアイデンティティフェデレーションが有効化されたワークスペースに割り当てることができ、アカウント管理者とワークスペース管理者によってワークスペースに割り当てることができます。
- **ワークスペースローカルグループ**はワークスペース管理者によってのみ作成することができます。これらのグループはワークスペース管理者コンソールやアカウントコンソールのワークスペースアクセス権のタブで*ワークスペースローカル*として識別されます。

アカウントグループではなくワークスペースローカルグループを使用することはお勧めしません。アカウントグループを使用するためにワークスペースのアイデンティティフェデレーションを有効化すべきです。既存ワークスペースでアイデンティティフェデレーションを有効化すると、アカウントグループとワークスペースローカルグループを同時に使用することができますが、Unity Catalogによるワークスペース割り当てとデータアクセス管理の集中管理を活用できるように、ワークスペースローカルグループをアカウントグループに変換することをお勧めします。

# 管理者ロールの割り当て

アカウント管理者はほかのユーザーをアカウント管理者に割り当てることができます。また、メタストアを作成することでUnity Catalogのメタストア管理者になることもでき、メタストア管理者ロールを別のユーザーやグループに移譲することもできます。

アカウント管理者とワークスペース管理者の両方はほかのユーザーをワークスペースユーザーとして割り当てることができます。ワークスペース管理者のロールは、Databricksのデフォルトグループであり削除できないワークスペースの*admins group*のメンバーシップによって決定されます。

以下もご覧ください:

- [ユーザーにアカウント管理者権限を割り当てる](https://qiita.com/taka_yayoi/items/3262ea8529ad96b920ce#%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AB%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E7%AE%A1%E7%90%86%E8%80%85%E6%A8%A9%E9%99%90%E3%82%92%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%8B)
- [ユーザーにワークスペース管理者ロールを割り当てる](https://qiita.com/taka_yayoi/items/3262ea8529ad96b920ce#%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AB%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E7%AE%A1%E7%90%86%E8%80%85%E3%83%AD%E3%83%BC%E3%83%AB%E3%82%92%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%8B)
- [(推奨)メタストアのオーナーシップをグループに転送する](https://qiita.com/taka_yayoi/items/3f2df6ddea81521ee786#%E6%8E%A8%E5%A5%A8%E3%83%A1%E3%82%BF%E3%82%B9%E3%83%88%E3%82%A2%E3%81%AE%E3%82%AA%E3%83%BC%E3%83%8A%E3%83%BC%E3%82%B7%E3%83%83%E3%83%97%E3%82%92%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AB%E8%BB%A2%E9%80%81%E3%81%99%E3%82%8B)

# 資格情報の割り当て

資格情報(entitlement)とはユーザー、サービスプリンシパル、グループがDatabricksと特定の方法でインタラクションできるようにするプロパティです。資格情報はワークスペースレベルでユーザーに割り当てられます。以下の表では、資格情報とそれらを管理するために使用するワークスペースUI名とAPIのプロパティ名を一覧しています。資格情報を管理するために、ワークスペースの管理コンソールやワークスペースレベルの[SCIM REST API](https://docs.databricks.com/dev-tools/api/latest/scim/index.html)を使用することができます。

| 資格情報名(UI) | 資格情報名(API) | デフォルト | 説明 |
|:--|:--|:--|:--|
| Workspace access  | workspace-access |  デフォルトで生成 | ユーザーやサービスプリンシパルに割り当てると、彼らはData Science & EngineeringやDatabricks Machine Learningのペルソナベースの環境にアクセスできるようになります。<br><br>ワークスペース管理者から削除することはできません。  |
| Databricks SQL access  | databricks-sql-access  | デフォルトで生成  | ユーザーやサービスプリンシパルに割り当てると、彼らはDatabricks SQLにアクセスできるようになります。  |
| Allow unrestricted cluster creation  | allow-cluster-create  | デフォルトではユーザーやサービスプリンシパルには許可されません  |  ユーザーやサービスプリンシパルに割り当てると、彼らはクラスターを作成できるようになります。[クラスターレベルのアクセス権](https://docs.databricks.com/security/access-control/cluster-acl.html)を用いて既存のクラスターへのアクセスを制限することができます。<br><br>ワークスペース管理者から削除することはできません。 |
|  Allow pool creation (UIでは利用不可) | allow-instance-pool-create  | 個々のユーザー、サービスプリンシパルに割り当てることはできません  |グループに割り当てられると、メンバーはインスタンスプールを作成できるようになります。<br><br>ワークスペース管理者から削除することはできません。   |

# シングルサインオン(SSO)のセットアップ

シングルサインオン(SSO)を用いることで、Oktaのようなサードパーティのアイデンティティプロバイダーを用いてユーザーを認証できるようになります。お使いのアイデンティティプロバイダーがSAML 2.0プロトコル(あるいはアカウントレベルのSSOではOIDCプロトコル)をサポートしているのであれば、アイデンティティプロバイダーと連携するためにDatabricks SSOを活用することができます。

アカウントレベルのアイデンティティのSSOとワークスペースレベルのアイデンティティのSSOは別に管理される必要があります。

[Set up single sign\-on](https://docs.databricks.com/administration-guide/users-groups/single-sign-on/index.html)をご覧ください。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)