【Databricks】PrivateLink 接続について調べてみた

# 背景・目的
DatabricksでAWS PrivateLinkを構成する[記事](https://qiita.com/taka_yayoi/items/aeb5002308d8e8f5fd49)を見つけたので、調べてみました。

# まとめ
AWS PrivateLinkを使用したDatabricksへの接続は、下記の特徴があります。

|特徴 | 説明|
|:--|:--|
|概要 |フロントエンドPrivateLinkとバンクエンドPrivateLinkがある。<BR><BR>・フロントエンドPrivateLinkは、ユーザとDatabricksコントロールプレーン間の接続<BR>・バックエンドPrivateLinkは、Databricksアカウント内のコントロールプレーンとユーザアカウントのコンピュートプレーン間の接続|
|目的| トラフィックをパブリックNWに公開しないですむ|
|前提| ・E2バージョンのプラットフォームであること<BR>・Enterprise の料金プランであること|
|制約| ・一度作成したNW構成や、VPCエンドポイントの登録は更新ができない|

# 概要
[AWS PrivateLink を有効にする](https://docs.databricks.com/en/security/network/classic/privatelink.html)を元に整理します。

> AWS PrivateLink は、トラフィックをパブリック ネットワークに公開することなく、AWS VPC およびオンプレミス ネットワークから AWS のサービスへのプライベート接続を提供します。E2 バージョンのプラットフォーム上の Databricks ワークスペースは、次の 2 つの接続タイプの PrivateLink 接続をサポートします。


- そもそも、AWSのPrivate Linkとは？
    - トラフィックのパブリックNWに公開しない
    - VPC、オンプレミスNWからAWSサービスへのプライベート接続を提供

> フロントエンド (ユーザーからワークスペースへ) : フロントエンド PrivateLink 接続により、ユーザーは VPC インターフェイス エンドポイント経由で Databricks Web アプリケーション、REST API、および Databricks Connect API に接続できます。

> バックエンド (コンピューティング プレーンからコントロール プレーン) :顧客管理の VPC (コンピューティング プレーン) 内の Databricks ランタイム クラスターは、Databricks クラウド アカウント内のDatabricks ワークスペースのコア サービス (コントロール プレーン) に接続します。クラスターは、R​​EST API (Secrets API など) と安全なクラスター接続リレーという 2 つの宛先のコントロール プレーンに接続します。この PrivateLink 接続タイプには、2 つの異なる宛先サービスがあるため、2 つの異なる VPC インターフェイス エンドポイントが関係します。

- Databricks E2バージョンのプラットフォーム上のDatabricks Workspaceは2つの接続タイプをサポート
    - フロントエンド：
        - フロントエンド PrivateLink接続により、ユーザはVPCe経由で下記に接続可能。
            - Databricks Webアプリケーション
            - REST API
            - Databricks Connect API
    - バックエンド：
        - 顧客管理のVPC内のDatabricksランタイムクラスタは、Databricksクラウドアカウント内のDatabricksワークスペース内のコントロールプレーンに接続する。
        - クラスタは、下記の2つの宛先コントロールプレーンに接続する。
            - REST API（Secrets APIなど）
            - [Secure cluster connectivity](https://docs.databricks.com/en/security/network/classic/secure-cluster-connectivity.html)
        - 異なる宛先サービスがあるため、2つの異なるVPCインターフェイスエンドポイントが関係する。

> フロントエンドとバックエンドの PrivateLink 接続の両方を実装することも、そのうちの 1 つだけを実装することもできます。この記事では、PrivateLink 接続タイプの一方または両方を構成する方法について説明します。フロントエンド接続とバックエンド接続の両方に PrivateLink を実装する場合、オプションでワークスペースのプライベート接続を必須にすることができます。これは、Databricks がパブリック ネットワーク経由の接続を拒否することを意味します。これらの接続タイプのいずれかの実装を拒否した場合、この要件を強制することはできません。

- フロントエンドとバックエンドのPrivateLinkの両方を実装することも、そのうち1つだけを実装することもできる
- 両方に対して、PrivateLinkを有効にした場合に、オプションでワークスペースのプライベート接続を必須にすることができる。
    - つまり、パブリックNW経由の接続を拒否することができる。


PrivateLink 接続を有効にするには、Databricks 構成オブジェクトを作成し、既存の構成オブジェクトに新しいフィールドを追加する必要があります。

## 用語の整理
|分類| 用語| 説明 |
|:-|:--|:--|
|AWS| AWS プライベートリンク| トラフィックをパブリック ネットワークに公開することなく、AWS VPC およびオンプレミス ネットワークから AWS サービスへのプライベート接続を提供する AWS テクノロジー。|
|| AWS VPCエンドポイントサービス| AWS VPC エンドポイント サービスは、PrivateLink を利用したサービス。<BR><BR>各 Databricks コントロール プレーン (通常はリージョンごとに 1 つ) は、PrivateLink の 2 つの AWS VPC エンドポイント サービスを公開します。<BR>ワークスペース VPC エンドポイント サービスは、REST API の Databricks フロントエンド PrivateLink 接続または Databricks バックエンド PrivateLink 接続の両方に適用されます。Databricks は、安全なクラスター接続リレー用に別の VPC エンドポイント サービスを公開します。 |
|| AWS VPC エンドポイント| AWS VPC インターフェイス エンドポイントにより、 VPC と AWS PrivateLink を利用した VPC エンドポイント サービス間のプライベート接続が可能になります。AWS VPC インターフェイス エンドポイントを作成して、Databricks に登録する必要があります。VPC エンドポイントを登録すると、AWS VPC エンドポイントを参照する VPC エンドポイント登録と呼ばれる Databricks 固有のオブジェクトが作成されます。  |
|Databricks| フロントエンド PrivateLink               | ユーザーが Databricks Web アプリケーション、REST API、および Databricks Connect API に接続するための PrivateLink 接続。|
|| バックエンド PrivateLink                 | Databricksコントロール プレーンに接続するための AWS アカウントのコンピューティング プレーンの PrivateLink 接続)。|
|| Databricks ネットワーク構成                | 「顧客管理 VPC の構成」に関する重要な情報を記述する Databricks オブジェクト。PrivateLink 接続 (フロントエンドまたはバックエンド) を実装する場合、ワークスペースは顧客管理の VPC を使用する必要があります。PrivateLink バックエンド サポートの場合のみ、ネットワーク構成には、バックエンド接続の VPC エンドポイントを識別する追加のプロパティが必要です。                      |
|| Databricks プライベート アクセス設定オブジェクト  | ワークスペースの PrivateLink 接続を記述する Databricks オブジェクト。フロントエンド、バックエンド、またはその両方を使用するかどうかに関係なく、ワークスペースの作成中にプライベート アクセス設定オブジェクトをワークスペースにアタッチする必要があります。これは、ワークスペースで AWS PrivateLink を使用する意図を表します。パブリック ネットワーク アクセス用の AWS PrivateLink のフロントエンド ユースケースの設定を制御します。どの VPC エンドポイントにワークスペースへのアクセスを許可するかを制御します。 |
| |Databricks ワークスペース構成オブジェクト      | ワークスペースを記述する Databricks オブジェクト。PrivateLink を有効にするには、このオブジェクトが Databricks プライベート アクセス設定オブジェクトを参照する必要があります。バックエンド PrivateLink の場合、ワークスペースには、使用する VPC エンドポイント登録を指定する 2 つの追加フィールドを備えた Databricks ネットワーク構成オブジェクトも必要です。1 つはコントロール プレーンの安全なクラスター接続リレー用で、もう 1 つは REST API にアクセスするためにワークスペースに接続します。   |

## 既存の PrivateLink 構成オブジェクトの更新
新規と既存のWorkspaceに対して変更ができないオブジェクトがあるので、注意が必要とのことです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/63275213-2dc7-c793-a966-b44ff2c5b3ed.png)

※ 出典：「[既存の PrivateLink 構成オブジェクトの更新](https://docs.databricks.com/en/security/network/classic/privatelink.html)」

## ネットワークの流れ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/4776f480-44f4-c688-2cee-99ef4db3cc9f.png)

## 要件
- Databricksアカウント
    - E2バージョンのプラットフォームにあること
    - Enterprise のプランであること
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/3f539c2d-b75e-d692-af7a-e293c971465a.png)

    ※出典：[Platform Tiers and Add-Ons](https://www.databricks.com/product/pricing/platform-addons)

- Databricksワークスペース
    - ワークスペースは、E２バージョンをサポートするAWSリージョンに存在すること
    - フロントエンドのPrivateLink接続を追加するには、顧客管理のVPCの構成を使用する
    - バックエンドの実装する場合は、[セキュアクラスター接続](https://docs.databricks.com/en/security/network/classic/secure-cluster-connectivity.html)を使用する必要がある

# 考察
今回、PrivateLinkを使用したDatabricksへの接続について整理しました。
私が契約している料金プランは、PremiumのためPrivateLinkを有効にできず、実際手を動かしていません。
やはり手を動かして確認しないとリアリティがありませんでした。

今後、契約プランを見直して試してみるかもしれません。


# 参照

https://docs.databricks.com/en/security/network/classic/privatelink.html

https://qiita.com/taka_yayoi/items/aeb5002308d8e8f5fd49

https://www.databricks.com/blog/2023/03/22/announcing-general-availability-privatelink-and-cmk-databricks-aws.html

https://docs.databricks.com/en/security/network/classic/secure-cluster-connectivity.html

https://docs.databricks.com/en/security/network/classic/secure-cluster-connectivity.html

https://docs.databricks.com/en/resources/supported-regions.html#privatelink-vpc-endpoint-services