Databricksにおけるアイデンティティ管理のベストプラクティス

[Identity best practices \| Databricks on AWS](https://docs.databricks.com/administration-guide/users-groups/best-practices.html) [2022/11/3時点]の翻訳です。

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

本書では、Databricksにおいてどのようにアイデンティティを設定するのがベストなのかに関して主張できる観点を提供します。これには、Databricksアカウントですべてのユーザー、グループ、サービスプリンシパルを管理できる様にするアイデンティティフェデレーションへの移行方法に関するガイドも含まれています。

Databricksのアイデンティティモデルの概要に関しては、[Databricksにおけるアイデンティティとロール](https://qiita.com/taka_yayoi/items/e386507be44aa3abd27e#databricks%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%82%A2%E3%82%A4%E3%83%87%E3%83%B3%E3%83%86%E3%82%A3%E3%83%86%E3%82%A3%E3%81%A8%E3%83%AD%E3%83%BC%E3%83%AB)をご覧ください。

# ユーザー、サービスプリンシパル、グループの設定

Databricksのアイデンティティには3つのタイプがあります。

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

プロダクションジョブの実行やプロダクションデータの変更のためにサービスプリンシパルを作成することをお勧めします。プロダクションデータに対するすべてのプロセスがサービスプリンシパルで動作することで、インタラクティブに作業をしているユーザーはプロダクション環境への書き込み、削除、権限の修正を行う必要がなくなります。これによって、間違ってユーザーがプロダクションデータを上書きしてしまうリスクを排除することができます。

ワークスペースへのアクセスやUnity Catalogにおけるアクセス制御ポリシーをユーザー個人ではなくグループに割り当てることがベストプラクティスとなります。すべてのDatabricksアイデンティティは、グループのメンバーとして割り当てることができ、メンバーはグループに割り当てられた権限を継承します。

Databricksを管理する管理者ロールを以下に示します:

- **アカウント管理者**は、アイデンティティ、課金、クラウドリソースを含むアカウントレベルの設定を行うことができ、ワークスペースやUnity Catalogを作成することができます。
- **ワークスペース管理者**は、Databricksワークスペースにユーザーを追加し、ワークスペース管理者ロールを割り当て、ワークスペースのオブジェクトやクラスター作成やジョブのオーナーシップ変更など機能へのアクセスを管理することができます。
- **メタストア管理者**は、誰がカタログを作成し、テーブルにクエリーを実行できるのかと言ったメタストア内のすべてのセキュリティ保護可能オブジェクトに対する権限を管理することができます。Unity Catalogメタストアを作成するアカウント管理者が、最初のメタストア管理者になります。

アカウントごとのアカウント管理者の数やワークスペースごとのワークスペース管理者の数を制限することをお勧めします。メタストア管理者のロールをグループに委任することがベストプラクティスとなります。[(推奨)メタストアのオーナーシップをグループに転送する](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)をご覧ください。

## お使いのアイデンティティプロバイダーからユーザー、グループをDatabricksアカウントに同期する

お使いのアイデンティティプロバイダーからご自身のDatabricksアカウントにユーザーやグループが自動で同期される様に、SCIMプロビジョニングを使用することをお勧めします。SCIMはDatabricksにユーザーやグループを作成するためにアイデンティティプロバイダーを使用するので、新たな従業員やチームのオンボーディングを容易にし、適切なアクセスレベルを付与します。ユーザーが組織を去ったり、Databricksにアクセスする必要がなくなった場合には、管理者はアイデンティティプロバイダーでユーザーを無効化すると、そのユーザーアカウントはDatabricksからも削除されます。これによって、一貫性のあるオフボーディングを確実なものにし、許可されないユーザーがセンシティブなデータにアクセスすることを防ぐことができます。

Databricksを使用しようとしているすべてのユーザーとグループのすべてを、個々のワークスペースではなくアカウントコンソールに同期する様にすべきです。これによって、アカウント内にあるすべてのワークスペースにおいて、すべてのアイデンティティの一貫性のある状態を保つために、一つのSCIMプロビジョニングアプリケーションを設定するだけで済む様になります。ワークスペースですでにワークスペースレベルのSCIMプロビジョニングをセットアップしているのであれば、アカウントレベルのSCIMプロビジョニングを有効化し、ワークスペースレベルのSCIMプロビジョンをオフにすべきです。[アイデンティティフェデレーションへのアップグレード](#アイデンティティフェデレーションへのアップグレード)をご覧ください。
![](https://docs.databricks.com/_images/account-level-scim-diagram.png)

その後で、アイデンティティフェデレーションを用いてアカウントから特定のユーザー、サービスプリンシパルを特定のワークスペースに割り当てることができます。

# シングルサインオンの設定

シングルサインオン(SSO)を用いることで、組織のアイデンティティプロバイダーを用いてユーザーを認証できる様になります。セキュリティ強化とユーザビリティの改善のためにSSOを設定することをお勧めします。アカウントとそれぞれのワークスペースでSSOを設定する必要があります。アカウントにおいて、アカウントとすべてのワークスペースで同じアイデンティティプロバイダーのSSOを設定する必要があります。望ましくは、アカウントレベルのSSO設定にOICDを用いて、認証機能のサポートを確実なものとします。

ワークスペースでSSOを設定したら、[パスワードアクセスコントロール](https://docs.databricks.com/administration-guide/users-groups/single-sign-on/index.html#password)を設定すべきです。パスワードアクセスコントロールによって、REST APIの認証でユーザー名、パスワードを使用できなくすることができます。代わりに、ユーザーは[パーソナルアクセストークン](https://docs.databricks.com/dev-tools/api/latest/authentication.html)を用いてREST APIの認証を行うべきです。すべてのワークスペースユーザーに対してパスワードに対する**Can Use**権限を許可しないことをお勧めします。パーソナルアクセストークンの詳細については、[Manage personal access tokens](https://docs.databricks.com/administration-guide/access-control/tokens.html)をご覧ください。

# アイデンティティフェデレーションの有効化

アイデンティティフェデレーションによって、アカウントコンソールでユーザー、サービスプリンシパル、グループを設定することができ、これらのアイデンティティを特定のワークスペースに割り当てることができる様になります。これによって、Databricksにおける管理とデータガバナンスをシンプルなものにします。

アイデンティティフェデレーションを用いることで、それぞれのワークスペースで設定を繰り返すことなしに、アカウントコンソールでユーザー、サービスプリンシパル、グループを設定できます。これによって、新たなチームのDatabricksへのオンボーディングにおける摩擦を削減し、ワークスペースごとのSCIMプロビジョニングアプリケーションを別々に管理するのではなく、Databricksアカウントに対してアイデンティティプロバイダーを用いた一つのSCIMプロビジョニングアプリケーションを管理するだけで済む様になります。アカウントにユーザー、サービスプリンシパル、グループが追加されると、それらの権限をワークスペースに割り当てることができます。アイデンティティフェデレーションが有効化されたワークスペースに対してのみ、アカウントレベルのアイデンティティのアクセスを割り当てることができます。
![](https://docs.databricks.com/_images/account-level-identity-diagram.png)

ワークスペースでアイデンティティフェデレーションを有効化するには、[管理者はどのようにワークスペースのアイデンティティフェデレーションを有効化するのか？](https://qiita.com/taka_yayoi/items/e386507be44aa3abd27e#%E7%AE%A1%E7%90%86%E8%80%85%E3%81%AF%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%AE%E3%82%A2%E3%82%A4%E3%83%87%E3%83%B3%E3%83%86%E3%82%A3%E3%83%86%E3%82%A3%E3%83%95%E3%82%A7%E3%83%87%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E6%9C%89%E5%8A%B9%E5%8C%96%E3%81%99%E3%82%8B%E3%81%AE%E3%81%8B)をご覧ください。

アイデンティティフェデレーションはワークスペースレベルで有効化され、アイデンティティフェデレーションが有効化されたワークスペースと、有効化されていないワークスペースを混在させることができます。アイデンティティフェデレーションが有効化されていないワークスペースにおいては、ワークスペース管理者が自身のワークスペースのユーザー、サービスプリンシパル、グループすべてをワークスペースのスコープで管理します(レガシーモデル)。彼らは、アカウントから彼らのワークスペースにユーザーを割り当てるためにアカウントコンソールやアカウントレベルのAPIを使うことはできませんが、すべてのワークスペースレベルのインタフェースを使用することができます。ワークスペースレベルのインタフェースを用いてワークスペースにユーザーやサービスプリンシパルが追加されるときは常に、そのユーザーやサービスプリンシパルはアカウントレベルに同期されます。これによって、アカウント内で一つの一貫性のあるユーザー、サービスプリンシパルのセットを手に入れることができます。

しかし、ワークスペースレベルのインタフェースでアイデンティティフェデレーションが有効化されていないワークスペースにグループが追加された際、そのグループは[ワークスペースローカルのグループ](https://qiita.com/taka_yayoi/items/e386507be44aa3abd27e#%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%E7%89%B9%E5%88%A5%E3%81%AA%E6%A4%9C%E8%A8%8E)となり、アカウントには追加されません。アカウントのグループは、アカウントレベルのインタフェースを用いてアカウント管理者によってのみ作成されます。ワークスペースローカルのグループではなく、赤運のグループを使用する様にすべきです。ワークスペースローカルのグループには、Unity Catalogのアクセスコントロールポリシーや他のワークスペースへの権限を許可することはできません。

# アイデンティティフェデレーションへのアップグレード

既存のワークスペースでアイデンティティフェデレーションを有効化するには、以下を実施します。

1. ワークスペースレベルのSCIMプロビジョニングをアカウントレベルに移行

    ワークスペースでワークスペースレベルのSCIMプロビジョニングが有効化されている場合、アカウントレベルのSCIMプロビジョニングを有効化し、ワークスペースレベルのSCIMプロビジョンをオフにします。ワークスペースレベルのSCIMはワークスペースローカルのグループを作成、アップデートし続けます。Unity Catalogによる集中管理されたワークスペース割り当てとデータアクセス管理のメリットを活用するために、ワークスペースローカルグループではなく、アカウントグループを使用することをお勧めします。ワークスペースレベルのSCIMの無効化の方法に関しては、[ワークスペースレベルSCIMプロビジョニングをアカウントレベルに移行](https://qiita.com/taka_yayoi/items/6509db71832ae5df9295#%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%83%AC%E3%83%99%E3%83%ABscim%E3%83%97%E3%83%AD%E3%83%93%E3%82%B8%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0%E3%82%92%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%83%AC%E3%83%99%E3%83%AB%E3%81%AB%E7%A7%BB%E8%A1%8C)をご覧ください。

1. ワークスペースローカルのグループをアカウントグループに変換

    既存のワークスペースローカルのグループをアカウントグループに変換することをお勧めします。手順に関しては[Migrate workspace\-local groups to account groups](https://docs.databricks.com/administration-guide/users-groups/groups.html#migrate)をご覧ください。グループをアカウントに移行した後は、グループメンバーがアクセスし続けられる様に、ワークスペース、オブジェクト、ワークスペースの機能に対して新規のアカウントグループに権限を許可する必要があります。

# グループにワークスペース権限を割り当てる

ワークスペースでアイデンティティフェデレーションが有効化されたので、当該ワークスペースでアカウントアクセス権限をユーザー、サービスプリンシパル、グループを割り当てることができます。ワークスペースの権限をユーザー個人ではなく、ワークスペースにはグループの権限を割り当てることをお勧めします。すべてのDatabricksアイデンティティはグループのメンバーとして割り当てることができ、メンバーはグループに割り当てら得れた権限を継承します。
![](https://docs.databricks.com/_images/add-workspace-permissions.png)

# さらに詳細を学ぶには

- [Databricksにおけるユーザー、サービスプリンシパル、グループの管理](https://qiita.com/taka_yayoi/items/e386507be44aa3abd27e)でDatabricksのアイデンティティモデルを学びます。
- [Databricksにおけるアイデンティティプロバイダーとのユーザー、グループの同期](https://qiita.com/taka_yayoi/items/6509db71832ae5df9295)で、SCIMプロビジョニングを始めてみます。
- [Databricks Unity Catalogのベストプラクティス](https://qiita.com/taka_yayoi/items/b34b89d8e158935c3095)でUnity Catalogでどの様に設定するのがベストなのかを学びます。

### Databricks 無料トライアル

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