Databricks アプリのネットワークを構成する
Databricks アプリは、きめ細かなネットワーク制御をサポートしており、アプリがインターネットや内部リソースと通信する方法を安全に管理するのに役立ちます。IP アクセス リスト、フロントエンド プライベート接続、およびネットワーク ポリシーを組み合わせて使用することで、入力 (着信) トラフィック ルールと出力 (発信) トラフィック ルールの両方を構成できます。
ネットワークアーキテクチャ
Databricks 、トラフィックを直接受信するサーバレス コンピュート プレーンにアプリをデプロイします。 これは、モデルサービングや連続検索などの他のルート最適化サービスと同様です。
接続プロセスは次のように動作します。
- Databricks アプリへの最初のユーザー リクエストは、コントロール プレーンで OAuth 認証を開始し、セッションを検証してアプリへのアクセスを承認します。
- 認証が成功すると、後続のすべてのリクエストは、コントロール プレーンを経由せずに、サーバレス コンピュート プレーンに直接ルーティングされます。
サーバーレス コンピュート プレーン用に構成されたネットワーク セキュリティ ポリシーは、 Databricks Apps トラフィックに適用されます。 これには、IP アクセス リストとフロントエンドのプライベート接続構成が含まれます。
イングレスコントロール
次の機能を使用して、パブリック インターネットから Databricks ワークスペースとアプリへのアクセスを制限します。
-
IP アクセス リスト: ワークスペース レベルで IP アクセス リストを有効にして、ワークスペースとアプリのアクセスを既知の信頼できる IP 範囲に制限します。設定された IP 範囲からのトラフィックのみが許可されます。詳細については、 「ワークスペースの IP アクセス リストを構成する」を参照してください。
-
フロントエンドプライベート接続: パブリックインターネットではなく、独自の VPC インターフェースエンドポイントを介して入力トラフィックをルーティングします。
プライベート接続を通じて適切な名前解決を確実に行うには、
databricksapps.comドメインに対して条件付き DNS 転送を構成する必要があります。そうしないと、アプリのドメインに対する DNS クエリが、プライベート エンドポイントではなくパブリック IP アドレスに解決される可能性があります。セットアップ手順については、 「Inbound PrivateLink の構成」を参照してください。
エグレス制御
アプリからの送信トラフィックを制御するには、ネットワーク接続構成 (NCC) を作成し、アプリをホストしているワークスペースにネットワーク ポリシーを適用します。
ネットワーク接続の構成
ネットワーク接続構成を使用して、安定したエグレス IP を割り当て、アプリが外部サービスに接続する方法を制御します。NCC は、Databricks トラフィックを安全に許可するために外部システム許可リストに追加できる固定パブリック IP アドレスを提供します。
S3 バケットやネットワークロードバランサー (NLB) などのプライベートデスティネーションへのエグレスを制限するには、NCC セットアップの一部として PrivateLink 接続を設定します。
ネットワークポリシー
network ポリシー を使用して、Databricks アプリケーションやその他のサーバレス ワークロードに出力制限を適用します。これは、送信接続を制御するための組織要件またはコンプライアンス要件を満たす必要がある場合に便利です。
ネットワーク ポリシーは、Enterprise レベルでのみ使用できます。
アプリが次の場合にネットワーク ポリシーを適用する
- 特定の承認済み外部ドメインのセットへのアクセスを制限する必要があります
- 偶発的なデータ流出を防ぐ必要がある
- 送信インターネットトラフィックを制限するセキュリティまたはコンプライアンス基準に準拠する必要があります
アプリのデプロイに必要な送信ドメイン
制限付き送信ネットワークポリシーを使用する場合、アプリのビルドまたはランタイムを成功させるには、特定のドメインを許可リストに追加する必要があります。これらのドメインがないと、ビルドプロセスが依存関係をダウンロードしたり、必要なサービスと通信したりできないため、アプリのデプロイは失敗します。
Databricksアプリのデプロイメントには、以下のドメインが必要です。
ドメイン | 目的 |
|---|---|
| アプリの提供とユーザー接続 |
| アプリのビルド中にPythonパッケージをダウンロードします(アプリが |
| アプリのビルド中にNode.jsパッケージをダウンロードします(アプリが |
さらに、AWS のデプロイには、以下のドメインが必要になる場合があります。
ドメイン | 目的 |
|---|---|
| AWSリソースに接続するアプリによって使用されるAWSサービス エンドポイント ( S3 、 STS) |
:::
:::
:::
アプリによっては、特定の依存関係や呼び出す外部APIsに応じて、追加のドメインが必要になる場合があります。 例えば、アプリがサードパーティのREST APIを呼び出す場合は、そのAPIのドメインを許可リストに追加してください。
プライベートリンク環境では、送信制限がある場合、ドメインの許可リストエントリが欠落していると、アプリケーションのデプロイが失敗することがよくあります。アプリのデプロイに失敗した場合は、追加するドメインを特定するために、 system.access.outbound_networkシステムテーブルで拒否された接続試行がないか確認してください。 拒否ログを確認してください。
ネットワークポリシーの設定に関するベストプラクティス
次のガイドラインに従って、意図しない中断を回避し、アプリが必要なリソースにアクセスできるようにします。
-
必要な宛先のみを許可する。アプリが必要とする公開リソースまたはプライベートリソースの完全修飾ドメイン名(FQDN)を追加します。アプリケーションのデプロイに必要な最小限のドメインセットについては、「アプリケーションデプロイに必要な送信ドメイン」を参照してください。
-
必要に応じてパッケージリポジトリを含めます。アプリが公開されている Python または Node.js パッケージをインストールする場合、Python の場合は
pypi.org、Node の場合はregistry.npmjs.orgなどのドメインを許可する必要があるかもしれません。アプリケーションによっては、特定の依存関係に応じて、追加または異なるドメインが必要になる場合があります。これらのリポジトリがないと、requirements.txtまたはpackage.jsonに依存するアプリのビルドが失敗する可能性があります。 -
dry-run モードを使用して、ネットワーク ポリシーを検証します。 このモードは、トラフィックをブロックせずにポリシーの適用をシミュレートします。
-
system.access.outbound_networkテーブルを使用して、拒否された接続試行を確認します。これにより、許可する必要がある可能性のあるドメインを特定できます。「拒否ログを確認する」を参照してください。 -
信頼されたAPIs AWSS3や や STS などの サービス エンドポイントなど、必要な外部ドメインを追加します。
プライベートリンク環境にアプリをデプロイする
ワークスペースがフロントエンドのプライベート接続を使用している場合は、 Databricksアプリをデプロイして使用するための追加の構成ステップを完了する必要があります。 この設定がないと、アプリのデプロイが失敗したり、ユーザーがアプリにアクセスできなくなる可能性があります。
DNS設定
アプリケーションの URL がパブリック IP アドレスではなくプライベート IP アドレスに解決されるように、 databricksapps.comドメインに対して条件付き DNS 転送を設定する必要があります。この設定がないと、プライベートネットワークの背後にいるユーザーは、デプロイされたアプリケーションにアクセスできません。
databricksapps.comに対して、クエリを VPC の DNS リゾルバに転送する条件付き DNS 転送ルールを追加します。これにより、アプリのURLがPrivateLink接続を介して解決されることが保証されます。DNS設定の詳細な手順については、 「受信プライベートリンクの設定」を参照してください。
避難経路に関する要件
プライベートリンク環境では、送信が制限されているため、アプリはビルド時と の両方で特定のドメインへの送信接続を必要とします。 許可リストに追加すべきドメインの完全なリストについては、 「アプリ展開に必要な送信ドメイン」を参照してください。
プライベートリンク環境でアプリの送信設定を行うには:
- ネットワーク接続構成(NCC)を作成または更新し、アプリをホストするワークスペースに添付します。
- 必要なドメインを 許可リストに追加するネットワークポリシー を作成または更新します。
- トラフィックをブロックせずに設定を検証するには、まずドライ実行モードを使用してください。
- アプリケーションのデプロイ中に拒否された接続試行がないか、
system.access.outbound_networkシステムテーブルを確認してください。
プライベートリンクの展開失敗のトラブルシューティング
プライベートリンク環境でアプリのデプロイに失敗した場合:
-
送信拒否ログを確認してください。 最近の拒否イベントについては、
system.access.outbound_networkシステムテーブルにクエリを実行します。 拒否ログを確認してください。SQLSELECT *
FROM system.access.outbound_network
WHERE event_time >= CURRENT_TIMESTAMP() - INTERVAL 2 HOUR
ORDER BY event_time DESC; -
DNS解決を確認してください。 アプリのURLがパブリックIPアドレスではなく、プライベートIPアドレスに解決されることを確認してください。プライベートネットワーク内から
nslookupを使用して以下を確認してください。Bashnslookup <your-app-name>.databricksapps.com -
ネットワークポリシーの設定を確認してください。 必要なドメインが許可リストに含まれていることを確認してください。パッケージリポジトリのドメインが欠落していること(
pypi.org、registry.npmjs.org)が、ビルド失敗の最も一般的な原因です。 -
アプリを再起動してください。 ネットワークポリシーを更新した後は、更新されたポリシーを有効にするために、アプリを再デプロイまたは再起動してください。「サーバレス ワークロードの再起動または再デプロイ」を参照してください。
暗号化とトラフィックルーティング
Databricks アプリは、専用のルーティング パスと複数の暗号化レイヤーを使用して、ネットワーク通信をセキュリティで保護し、データを保護します。
トラフィックルーティング
Databricksコントロール プレーン、コンピュート プレーン、その他のDatabricksリソース、およびクラウド サービス間のトラフィックは、クラウド プロバイダーのグローバル ネットワーク上を移動し、パブリック インターネットを経由しません。
ユーザーのネットワークの場所によっては、ユーザーとdatabricksapps.comのトラフィックがパブリック インターネットを通過する可能性があります。パブリック インターネット ルーティングを回避するには、フロントエンド プライベート接続を構成します。
転送中の暗号化
アプリとの間のすべてのネットワーク通信は暗号化されます。
- ユーザー トラフィック: ユーザーと
databricksapps.comの通信には、トランスポート層セキュリティ (TLS) 1.3 暗号化が使用されます。 - コントロール プレーン トラフィック: Databricksコントロール プレーンとコンピュート プレーン間の通信では、アプリの作成、更新、削除などの管理操作に相互 TLS (mTLS) が使用されます。
保存時の暗号化
Databricks アプリは、次の方法を使用して保存されたデータを暗号化します。
- アプリケーション コード: Databricks はアプリ コードをワークスペース ファイルに保存し、ノートブックやその他のワークスペース ファイルと同じ暗号化を使用します。
- コンピュート ストレージ: アプリは、AES-256 とクラウド プロバイダーの確実な暗号化実装で暗号化された一時的なホスト オペレーティング システム ディスクを使用します。