DatabricksアカウントコンソールでMicrosoft Entra IDとのSSOを設定する

# はじめに
本記事では、DatabricksアカウントコンソールでMicrosoft Entra IDとのSSO設定を行った際の手順、キャプチャをまとめる。

- Databricks on AWSを利用する
- SSOのプロトコルはOpenID Connect (OIDC) を利用する

# 参考ドキュメント
- [Databricks アカウント コンソールで SSO を設定する |Databricks on AWS](https://docs.databricks.com/ja/administration-guide/account-settings-e2/single-sign-on/index.html)
- [Microsoft Entra ID (旧称 Azure Active Directory) を使用した Databricks への SSO |Databricks on AWS](https://docs.databricks.com/ja/administration-guide/account-settings-e2/single-sign-on/azure-ad.html)

# 1. Databricks側でリダイレクトURLを取得
アカウントコンソールに管理者ユーザーでログインし、[Settings] > [Single sign-on] アクセスする。Databricks redirect URLの値をコピーする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/a9320f8f-fa62-d36e-5304-703b8b999730.png)

URLは一様に以下の値になっているはず。
`https://accounts.cloud.databricks.com/oidc/consume`

# 2. Microsoft Entra IDアプリケーションの作成と情報の取得
[Azureポータル](https://portal.azure.com) に管理者としてログインし、以下の作業を実施する。

## 2-1. アプリケーションの登録
- Entra IDのアプリの登録画面に遷移し、新規登録をクリックする
- [アプリケーションの登録] 画面で以下を設定し [登録] をクリックする 

項目 | 値
--- | ---
名前 | 任意の名前を入力する
サポートされているアカウントの種類 | `この組織ディレクトリのみに含まれるアカウント`にチェック
リダイレクトURL | `Web`を選択しDatabricks側のリダイレクトURLを入力する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/354ba7c7-4101-2e41-03c3-ebf4bddc03b8.png)

## 2-2. アプリケーション (クライアント) IDの取得
- 登録したアプリの概要ページから [アプリケーション (クライアント) ID] をコピーする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/e60d2fdd-810a-04f4-55a8-fdeac525184b.png)

## 2-3. OpenID Connectメタデータドキュメントの取得
- 登録したアプリの概要ページ上部の [エンドポイント] をクリックする
- [OpenID Connectメタデータドキュメント] の値をコピーする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/d549e429-01b0-fbc1-aada-f51711a43a56.png)

## 2-4. クライアントシークレットの値の取得
- 登録したアプリの [証明書とシークレット] にアクセスする
- 新しいクライアントシークレットを追加し、値をコピーする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/dcac75e9-5f5f-7750-4da4-4532c089107d.png)

# 3. Databricks側でSSO設定を行う
DatabricksのSSOの設定ページに行き、Entra ID側で取得した情報を入力し [Test SSO] をクリックする。

項目 | 値
--- | ---
(上部のプロトコル選択のリストボックス) | OpenID Connect
Client ID | Entra IDのアプリケーション (クライアント) IDを貼り付け
Client secret | Entra IDのクライアントシークレットの値を貼り付け
OpenID issuer URL | OpenID Connectメタデータドキュメントの値を貼り付け<br>注意点として、URL末尾の`/.well-known`以降はOpenID issuer URL側に設定されてるため除去する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/1c91636a-25ed-008f-a07b-422102a8752a.png)

- [Test SSO]をクリックするとMicrosoft Entra IDの画面が表示される（キャプチャ取り忘れ）ので、指示に従ってボタンをクリックすると設定が完了する
- DatabricksのSSO設定画面に戻ってくるので [Enable SSO] をクリックするとSSOが有効化される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/c62675b9-a2da-99e0-ae3a-ba4052be413e.png)

- 必要に応じてSSOを無効化することもできる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/0521cdc6-0d1d-9938-1991-b674e77b7ab8.png)

# 4. SSOでのDatabricksサインイン確認
以上でSSOの設定は完了、以降はSSOを使ったDatabricksへのサインインを確認する。

## 4-1. SSOテスト用のユーザー
- IdP側に存在するユーザーでDatabricksに存在しないユーザーについて、Databricks側に登録する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/5a623851-d7cf-c9db-876b-c75259cb7b94.png)

- シークレットウィンドウを開きアカウントコンソール (https://accounts.cloud.databricks.com) にアクセスする
- すると自動的にEntra IDのサインインページに遷移するのでEntra IDのユーザーアカウントのメールアドレスを入力する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/7cfd4f82-db92-7262-2879-68c2b2708720.png)

- 続いてパスワードを入力する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/230dc905-3c52-bc65-229e-d47eddc77a43.png)

- Entra IDでサインインが完了、自動的にDatabricks側に遷移する
- アカウントコンソール、ワークスペースいずれにも権限がないユーザーの場合は404が表示される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/1f3656a2-28f8-3859-f028-924d5c091bf6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/cb1657f9-2a57-1b54-f8d3-1b1b60fef8e5.png)

- Databricksの管理者でSSOテスト用ユーザーに権限を付与
- SSO用テスト用ユーザーでブラウザをリロードすると権限に応じた画面が表示される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/b7ffbf9c-6f0a-d947-499a-936bd83b1d48.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284925/37cc9fba-d9c1-8e56-2d41-324bf01c7635.png)

以上です。