【Databricks】アカウント コンソールの SSO を設定してみた

# 背景・目的
Databricksでは、IDプロバイダーを使用してAccount ConsoleをSSOできます。
本記事では仕様を整理し、実際に試してみたいと思います。なお、本記事では、SAMLを使用したアカウントのシングルサインオン認証を試しています。

# まとめ
- IdPからDatabricksへのSSOが可能です。
- アカウントコンソールでは、SAML2.0、OIDCがサポートされている。IdPでどちらもサポートされていればOIDCを推奨。
    - なお、AWS Identity Centerでは、SAMLのみサポートされています。


# 概要
[Databricks アカウント コンソールの SSO を設定する](https://docs.databricks.com/ja/administration-guide/account-settings-e2/single-sign-on/index.html#enable-account-single-sign-on-authentication-using-oidc)を元に整理します。

> シングル サインオン (SSO) を使用して、組織の ID プロバイダーを使用して account console を認証します。 アカウントコンソールは、ワークスペースの作成、委任された AWS アクセス認証情報、AWS ストレージ設定、オプションの Customer 管理型 VPC など、Databricks アカウントレベルの設定を管理する場所です。
>アカウントコンソール SSO では、SAML 2.0 または OpenID Connect (OIDC) のいずれかの使用がサポートされています。 ID プロバイダー (IdP) は、これらのプロトコルの少なくとも 1 つをサポートしている必要があります。 IdP が OIDC と SAML 2.0 の両方をサポートしている場合、Databricks では、アカウント コンソール認証に OIDC を使用することをお勧めします。

- アカウントコンソールのSSOが可能
- アカウントコンソールでは、SAML2.0、OIDCがサポートされている。IdPでどちらもサポートされていればOIDCを推奨。

>アカウントで SSO を有効にすると、すべてのユーザが SSO を使用してアカウントコンソールにログインする必要があります。 アカウント所有者のみがユーザー名(Eメールアドレス)とパスワードを使用してログインできます。

- 設定後は、全てのユーザはSSO経由になる

>SSO 認証を使用したアカウント コンソールの動作は、ユーザーが Databricks アカウントで admin ロールを持っているかどうかによって異なります。
>admin ロールを使用すると、ユーザーはワークスペースやワークスペースリソースの作成や変更など、アカウントコンソールのアカウント管理機能にアクセスできます。
>admin ロールがない場合、ユーザーは、ログインできるワークスペースのリストの表示や、それらのワークスペースにアクセスするためのリンクなど、管理者以外のアクションに制限されます。

- adminロールの保持次第で、制限されるか決まる。

## 統合ログイン
> アカウントが 2023 年 6 月 21 日以降に作成された場合、アカウントで統合ログインが有効になります。 統合ログインを使用すると、アカウントとすべての Databricks ワークスペースに使用されるアカウント内の 1 つの SSO 構成を管理できます。 アカウントで SSO が有効になっている場合、新規および既存のすべてのワークスペースでアカウント レベルの SSO 構成が使用され、アカウント管理者とワークスペース管理者を含むすべてのユーザーは SSO を使用して Databricks にサインインする必要があります。 ワークスペース レベルで SSO を個別に管理することはできません。

> アカウントが 2023 年 6 月 21 日より前に作成された場合、統合ログインはアカウントで有効になっていません。 つまり、アカウントの SSO と各ワークスペースの SSO を個別に管理する必要があります。 SSO は、アカウント レベルとワークスペースで同じ ID プロバイダーに構成する必要があります。 ワークスペース レベルの SSO を構成するには、「 ワークスペースの SSO を設定する」を参照してください。

- 統合ログインは、2023年6月２１日にリリースされた
- 統合ログインを使用すると、アカウントと全てのワークスペースで利用されるアカウントは1つのSSOで管理できる
- 以前は、ワークスペース毎のSSOがあったが、アカウントSSOを利用すると個別に管理はできなくなる。

>2023 年 6 月 21 日より前に作成されたアカウントの統合ログインは、 プライベート プレビュー段階です。 アクセスについては、Databricks の担当者にお問い合わせください。

- 2023年6月21日以前のアカウントの統合ログインはプライベートプレビュー

# 実践
## SAMLを使用したアカウントのシングルサインオン認証を有効にする
### (Databricks)リダイレクトURLのコピー
1. アカウント管理者でサインインし、ナビゲーションペインの「設定」をクリックします。
1. ① 「シングルサインオンタブ」をクリックし、②「SAML2.0」を選択します。③「DatabricksリダイレクトURL」をコピーしておきます。※後ほど使います。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/af236c39-04db-2394-b76d-f2aed2f5477f.png)


### IAM Identity Centerの設定
1. AWSにサインインし、IAM Identity Center（旧 AWS SSO）に移動します。
1. ナビゲーションペインの「アプリケーション」をクリックします。
1. 「アプリケーションを追加」をクリックします。
1. ①検索窓に「Databricks」を入力し、②「Databricks」を選択し、次へをクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/0c9ac750-329f-6bd9-f442-5e2c48c2b389.png)

1. ①「メタデータ値をマニュアルを入力する」をクリックし、②「アプリケーションACS URL」、③「アプリケーションSAML 対象者」に、上記のDatabricksで「DatabricksリダイレクトURL」でコピーしたものを貼り付けます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a69ec72a-6338-c9ed-12f8-545802ed3bb1.png)

1. 「IAM Identity Center メタデータ」に下記のURLが表示されているので、それぞれコピーします。
    - IAM Identity Center SAML メタデータファイル（ダウンロードします）
    - IAM Identity Center サインイン URL
    - IAM Identity Center サインアウト URL
    - IAM Identity Center SAML 発行者 URL
    - IAM Identity Center 証明書（ダウンロードします）

1. 「保存」をクリックします。登録されました。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ca18fd91-5442-522f-c3a9-b17891642e95.png)

### (AWS)ユーザを追加する

1. IAM Identity Center のナビゲーションペインで「ユーザ」を追加します。
1. 「ユーザを追加」をクリックします。
1. 下記を入力し、「次へ」をクリックします。
    - ユーザ名
    - Eメールアドレス
    - 名
    - 姓
    - 表示名
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ed80a2c5-468a-d51a-6ced-92109aa497ec.png)

1. ユーザをグループに追加画面では、そのまま「次へ」をクリックします。※ここでは省略しています。必要に応じてグループを作成し追加してください。
1. 確認画面で「ユーザを追加」をクリックしてください。
1. メールにInvitationが送られてくるので、「Accept Invitation」をクリックします。
1. パスワードを設定します。

### (AWS)アプリケーションにユーザを割り当てる
1. Databricksのアプリケーションで、「ユーザを割り当て」をクリックします。
1. 上記で作成したユーザを選択し、「ユーザを割り当て」をクリックします。

### (Databricks)SSOの設定
1. 下記にコピーし、「保存」をクリックします。
    - シングルサインオンURL
    - エンティティID
    - x.509証明書
1. SSO接続テストをクリックします。
1. 成功したら、SSOを有効化をクリックします。

## SSOを試す
1. IAM Identity Center　に表示されている AWS アクセスポータルの URLをクリックします。
1. 別タブが起動されるので、サインインします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/278ba92d-9482-0222-a0b8-6a28f33b33b2.png" width=300 />

1. Databricksのアイコンが表示されるので、クリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/4a07e5a3-e672-cb06-2b46-5fde7a1b9511.png" width=300 />

1. 別タブでワークスペースを選択できる画面が起動されるので、選択します。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/7d019ead-967e-3d1f-1195-ce3148d6df85.png" width=300>

1. ワークスペースが表示されました。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/f6f7914d-fbef-0891-6d95-57d3d836f2b4.png)

# 考察
今回は、AWS Identity Centerを利用してDatabricksへのSSOを設定しました。
これにより、IDパスワードが一元管理できる点、Databricksでは私の知っている限りではMFAを設定できないので、AWS Identity Center のMFAを使うことでよりセキュアになるのは良いですね！

# 参考
https://docs.databricks.com/ja/administration-guide/account-settings-e2/single-sign-on/index.html#enable-account-single-sign-on-authentication-using-oidc