Azure Databricks と Azure Firewall を組み合わせたときのデータ プレーンからコントロール プレーンへのアクセス許可設定

## はじめに
Azure 内部からインターネットにアクセスするときに Azure Firewall を経由することでセキュリティを強化できます。今回は Azure Databricks と Azure Firewall を組み合わせるときのデータ プレーンからコントロール プレーンへのアクセス許可設定について説明します。

## Azure Databricks のアーキテクチャーについて
Azure Databricks ではデータ プレーンとコントロール プレーンが存在します。コードを実行するのはデータ プレーンの VM となります。この VM は [VNet Injection](https://learn.microsoft.com/ja-jp/azure/databricks/administration-guide/cloud-configurations/azure/vnet-inject) によって独自の VNet 上にデプロイできます。しかしながら、コントロール プレーンのデプロイ場所はユーザーは設定できません。Azure Firewall を導入している場合は、データ プレーンからコントロール プレーンへの接続方式を考える必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307853/05f87599-36b1-994f-7820-70fc3c12ab15.png)


## Azure Firewall 設定

Azure Firewall を導入しているときの、Azure Databricks のデータ プレーンからコントロール プレーンにアクセスする際の設定について説明していきます。なお、[Secure Cluster Connectivity (SCC)](https://learn.microsoft.com/ja-jp/azure/databricks/security/secure-cluster-connectivity) が有効であることを前提としています。

### 1. FQDN / IP 許可
Azure Firewall で[このページ](https://learn.microsoft.com/ja-jp/azure/databricks/administration-guide/cloud-configurations/azure/udr) に記載された FQDN と IP を許可します。

![databricks-9.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307853/611a20f0-e86a-c3ce-51b1-c45396c4e9cf.png)

Japan East リージョンの場合は以下となります。

| 名前| ソースの種類| 　ソース |プロトコル|宛先ポート|宛先の種類|宛先|
|:-----------|:------------|:------------|:---|:---|:---|:---|
| Webapp       | IP アドレス       | `10.0.0.0/16`        |TCP|443|IP アドレス|`52.246.160.72/32`|
| Extended Infrastructure     | IP アドレス     | `10.0.0.0/16`    |TCP|443|IP アドレス|`20.78.226.176/28`|
| SCC Relay     | IP アドレス        | `10.0.0.0/16`  |TCP|443|FQDN| `tunnel.japaneast.azuredatabricks.net` |
| DBFS Root         | IP アドレス       | `10.0.0.0/16`      |TCP|443|FQDN|`dbstorage*****.blob.core.windows.net`|
| Metastore       | IP アドレス       | `10.0.0.0/16`  |TCP|3306|FQDN|`consolidated-japaneast-prod-metastore.mysql.database.azure.com`|
| Artifact Blob storage primary    | IP アドレス    | `10.0.0.0/16`   |TCP|443|FQDN|`dbartifactsprodjapaneast.blob.core.windows.net`|
| Artifact Blob storage secondary        | IP アドレス        |`10.0.0.0/16`  |TCP|443|FQDN|`dbartifactsprodjapanwest.blob.core.windows.net`|
| Log Blob storage      | IP アドレス       | `10.0.0.0/16`  |TCP|443|FQDN|`dblogprodjapaneast.blob.core.windows.net`|
| Event Hub endpoint | IP アドレス    | `10.0.0.0/16` |TCP|9093|FQDN|`prod-japaneast-observabilityeventhubs.servicebus.windows.net`|



### 2. サービス タグ許可

Azure Firewall でサービス タグを許可します。設定項目は少ないですが、FQDN や IP を許可する場合より許可範囲が大きくなります。

![databricks-10.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307853/88d55799-ecd0-0cf3-168d-be2b748140dc.png)

許可するサービス タグは以下となります。

| 名前| ソースの種類| 　ソース |プロトコル|宛先ポート|宛先の種類|宛先|
|:-----------|:------------|:------------|:---|:---|:---|:---|
| Databricks      | IP アドレス       | `10.0.0.0/16`        |TCP|443|サービス タグ|`Azure Databricks`|
| Storage  | IP アドレス     | `10.0.0.0/16`    |TCP|443|サービス タグ|`Storage`|
| Event Hub | IP アドレス        | `10.0.0.0/16`  |TCP|9093|サービス タグ| `EventHub` |
| Sql  | IP アドレス       | `10.0.0.0/16`      |TCP|3306|サービス タグ|`Sql`|

## SCC 設定に関する注意点

Azure Firewall を経由してコントロール プレーンにアクセスする場合は SCC 設定を有効 (パブリック IP 無効) にすべきです。
SCC 設定が無効 (パブリック IP 有効) の場合、クラスター作成時にコントロール プレーンからデータ プレーンへのパブリック アクセスが発生し、戻り通信が Azure Firewall によってブロックされます。

![databricks-11.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307853/8251e43f-3c1f-bdfc-1de7-91ae4f712c62.png)

## おわりに

Azure Databricks と Azure Firewall を組み合わせるときのデータ プレーンからコントロール プレーンへのアクセス許可設定について説明しました。User Defined Route でコントロール プレーンへのルーティングを設定すれば、Azure Firewall を経由する必要もなくなりますが、各 FQDN のグローバル IP を確認しなくてはならず、IP 変更のリスクを考えると長期運用には向いていません。

![databricks-11.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307853/ad2a9084-4a1a-9094-c87c-cb7acdce45a0.png)