Azure Databricksにおけるクラスターのアウトバウンド通信制御
なぜこんな記事を書くか
Azure Databricksをユーザーが作成したVNet上にデプロイ(VNet インジェクション)した際、クラスターのサブネットに自動的にNSGが付与されます。そのNSGにはサービスタグSQL, Storage, EventHub宛ての通信を許可する規則が記述されていますが、この規則の削除およびこれを妨げる規則の追加が出来ないようになっています。アクセスを特定のAzureストレージに絞りたいときは、サービスエンドポイントポリシーを使う手がありますが、上記同様ポリシー競合によりDatabricks用サブネットに適用することは出来ません。
これにより、DatabricksクラスターからどのAzureストレージ、AzureのSQL系サービス、EventHubにもアクセス出来てしまいます。つまり、企業でAzure Databricksを用いてデータ分析等を行っている場合、悪意を持った社員が容易にデータを流出させてしまうリスクがあるのです。
実現したいこと
Databricksクラスターからの通信を制限したい
そこでDatabricksの正常動作に必要な通信のみを許可し、セキュアなクラスター環境を実装したいと考えます。
Databirkcsクラスターのアウトバウンド通信制御のためにやること
1. ユーザー定義ルートを作成し、全ての通信をファイアウォールにルーティングする
全ての通信をファイアウォールにルーティングするユーザー定義ルートを作成し、クラスター用サブネットに付与します。図の例では、10.1.1.2がファイアウォールのIPアドレスです。必要に応じて、Databricks用VNetとファイアウォール用VNet間のピアリング設定をします。
2. ファイアウォールで必要な通信のみ許可する
Databricksの正常動作に必要な通信は、Azure Databricks のためのユーザー定義のルート設定を参考にします。日本語に機械翻訳されたページだと許可対象一覧表が見えない場合があるので、そのときは元の英文ページを参考にしてください。
東日本リージョンの場合、図のようなファイアウォール許可設定になります。
DBFS ルート BlobのFQDNはDatabricksリソースによって異なります。Databricksの管理対象リソースグループに移動し、ストレージアカウントのBlobエンドポイントを参照してください。
また必要に応じて、Databircksクラスターからアクセス対象とするAzureストレージ等のエンドポイントへの通信許可をファイアウォールに追加してください。
3. クラスター用サブネットからサービスエンドポイントを外す
Databricksクラスター用サブネットにStorageなどのサービスエンドポイントを付与している場合は、それらを外してください。サービスエンドポイントのルートはユーザー定義ルートをオーバーライドします。サービスエンドポイントが付与されたままの場合、Azureストレージ宛ての通信はファイアウォールにルーティングされず、サービスエンドポイントを経由するため、アクセス先のストレージを絞ることが出来ません。サービスエンドポイントはファイアウォール用サブネットに付与しましょう。
まとめ
これでDatabricksクラスターのアウトバウンド通信を絞ることができ、悪意を持った内部犯による外部Storage等へのデータ流出を防ぐことが可能となります。
Discussion