西日本リージョンのAzure Databricksでストレージファイアウォールを設定してサーバレスSQLを使う

こちらの続編です。

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

前回の手順で接続自体はできましたが、西日本のストレージアカウントでストレージファイアウォールを設定すると(当たり前ですが)データにアクセスできなくなってしまいました。

弊社のAzureスーパーエキスパートの方の記事に助けられました。

https://qiita.com/nakazax/items/745d1cc01ad1dfaa418c#ncc%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%AE%E6%B5%81%E3%82%8C%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88%E3%83%AA%E3%83%B3%E3%82%AF

こちらの**NCCの設定の流れ：プライベートリンク**で解決できました。

マニュアルはこちら。

[**サーバーレス コンピューティングのプライベート接続の概要**](https://learn.microsoft.com/ja-jp/azure/databricks/security/network/serverless-network-security/serverless-private-link)

> NCC 内にプライベート エンドポイントを追加すると、Azure Databricks によって Azure リソースへのプライベート エンドポイント要求が作成されます。 リソース側で要求が受け入れられると、プライベート エンドポイントは、サーバーレス コンピューティング プレーンからリソースにアクセスするために使用されます。 プライベート エンドポイントはユーザーの Azure Databricks アカウント専用であり、認可されたワークスペースからのみアクセスできます。

# Delta Sharingによるテーブルの共有

[以前の記事](https://qiita.com/taka_yayoi/items/ac0c3f2cb561e1b8bcb3)の手順に従って、西日本のテーブルを東日本に共有してください。

# NCCの追加

[アカウントコンソール](https://accounts.azuredatabricks.net/)にログインし、東日本のAzure DatabricksワークスペースにNCCを追加します。

![Screenshot 2024-10-16 at 10.33.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1906c8ff-256f-3b4c-048b-399c6c1af148.png)

NCCの設定を進める前に、Azure Portalに移動します。

# ストレージアカウントのリソースIDの取得

Azureリソース(ここではストレージアカウント)へのプライベートエンドポイント要求を作成するには、要求先のストレージアカウントのリソースIDが必要となります。

[こちら](https://learn.microsoft.com/ja-jp/azure/databricks/security/network/serverless-network-security/serverless-private-link#create-endpoint-rules)にあるように、西日本で使用しているストレージアカウントにアクセスし、**Essential(日本語だと要点)** の**JSON ビュー**をクリックします。リソースIDをコピーしておきます。また、使用しているストレージがBlog StorageなのかADLSなのかも確認しておきます。

![Screenshot 2024-10-16 at 10.39.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/dc63ec1c-8ee6-5924-ecea-2cc8293bb287.png)

再度、Databricksアカウントコンソールに移動します。

# プライベートエンドポイントルールの追加

NCCにアクセスし、**プライベートエンドポイントルール**タブを開き、**プライベートエンドポイントルールを追加**をクリックします。

上でコピーしたストレージアカウントのリソースIDを**適用先AzureリソースのID**に貼り付け、使用しているストレージに応じて**サブリソース名**を入力します。以下の例では、ADLSの`dfs`を指定しています。

![Screenshot 2024-10-16 at 10.49.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f88483eb-1b58-b6a5-730f-e0204dc9ba5c.png)

**追加**をクリックすることで、ストレージアカウントへのプライベートエンドポイント要求が作成されます。この時点ではステータスは`PENDING`です。承認するために再度Azure Portalに移動します。

![Screenshot 2024-10-16 at 10.50.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f349db28-dd59-0ced-fc00-73cacc885e88.png)

# プライベートエンドポイント要求の承認

Azure PortalのPrivate Linkセンター、あるいは、要求先のストレージアカウントの画面で承認を行うことができます。

**Private Linkセンター**
![Screenshot 2024-10-16 at 10.52.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/82802e48-f094-57fb-b46b-e59fe866b96b.png)
![Screenshot 2024-10-16 at 10.53.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f9fb976b-bf33-a6b8-29a8-1bf8791b6e11.png)

**ストレージアカウント**
![Screenshot 2024-10-16 at 11.02.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/08fc4f4a-d46b-3521-9cf5-778c18812cf8.png)
![Screenshot 2024-10-16 at 10.55.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/691dc8c5-751a-ccad-d93f-5232b3b04da7.png)

承認されると、Azure Databricksアカウントコンソールでの表示が`ESTABLISHED`になります。

![Screenshot 2024-10-16 at 11.21.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/507ca87b-b4c6-ddcc-dbb8-769a14c66ff0.png)

# パブリックネットワークアクセスを禁止するようにストレージアカウントを設定する

このままではパブリックアクセスは許可された状態なので、適切にネットワークの設定を行います。

**無効**に設定した場合、**サーバレスSQLウェアハウス**からプライベートエンドポイント経由でストレージにはアクセスできますが、それ以外のクラスターや非サーバレスのウェアハウスからはアクセスできなくなっています。

[こちら](https://qiita.com/nakazax/items/745d1cc01ad1dfaa418c#4-%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB%E3%82%92%E6%9C%89%E5%8A%B9%E5%8C%96azure%E3%83%9D%E3%83%BC%E3%82%BF%E3%83%AB)でも説明されているように、要件に応じてファイアウォールの設定を変更ください。

![Screenshot 2024-10-16 at 11.43.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6b120b29-c13f-e792-e835-97dc1e09f31c.png)


> 対象のストレージアカウントのファイアウォールについて、「すべてのネットワークから有効」から「選択した仮想ネットワークとIPアドレスから有効」に変更する場合、上記画面の「仮想ネットワーク」のセクションにAzure Databricksワークスペースの2つのサブネット（通称 public-subnet と private-subnet）のIDを追加してサービスエンドポイントを有効化してください。
>
> 上記を行わないと、非サーバーレスのクラスターやSQLウェアハウスから対象のストレージアカウントにアクセスできなくなります。
>
> なお、サービスエンドポイントが利用できるのは[VNetインジェクションされたAzure Databricksワークスペース](https://learn.microsoft.com/ja-jp/azure/databricks/security/network/classic/vnet-inject)である点に留意ください。

# 動作確認

設定が反映されるまで5分ほど待ち、東日本のサーバレスSQLウェアハウスを再起動して西日本のテーブルにアクセスします。

![Screenshot 2024-10-16 at 11.24.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/645817ef-65bf-bc93-b6a3-328e07303776.png)

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

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