Manage network ポリシー for サーバレス egress control
プレビュー
この機能は パブリック プレビュー段階です。
このドキュメントでは、 Databricksのサーバレスワークロードからの送信ネットワーク接続を制御するために、ネットワーク ポリシーを設定および管理する方法について説明します。
必要条件
-
Databricks ワークスペースは Enterprise レベルにある必要があります。
-
ネットワークポリシーを管理するための権限は、アカウント管理者に制限されています。
ネットワークポリシーへのアクセス
アカウントでネットワークポリシーを作成、表示、更新するには:
- アカウントコンソールで、 クラウドリソース をクリックします。
- ネットワーク タブをクリックします。
新しいネットワーク ポリシーを作成する
-
新しいネットワーク ポリシーの作成 をクリックします。
-
ネットワークアクセスモードを選択します。
- フルアクセス :無制限のアウトバウンドインターネットアクセス。 フル アクセス を選択した場合、外向きのインターネット アクセスは制限されません。
- 制限付きアクセス : 送信アクセスは、指定された宛先に制限されます。 詳細については、「 ネットワーク ポリシーの概要」を参照してください。
ネットワークポリシーの設定
次の手順では、制限付きアクセスモードのオプション設定の概要を示します。
エグレス ルールを設定する
-
サーバレス コンピュートに追加のドメインへのアクセス権を付与するには、 許可されたドメイン リストの上にある 宛先の追加 をクリックします。
FQDN フィルターを使用すると、同じ IP アドレスを共有するすべてのドメインにアクセスできます。 エンドポイント全体でモデルサービング プロビジョニングは、ネットワーク アクセスが制限付きに設定されている場合、インターネット アクセスを防ぎます。 ただし、FQDN フィルタリングによるきめ細かな制御はサポートされていません。
-
ワークスペースが追加の S3 バケットにアクセスできるようにするには、 許可されたストレージ アカウント リストの上にある 宛先の追加 ボタンをクリックします。
エグレス ルールを設定するときは、次の点に注意してください。
- UC 外部ロケーションのメタストアバケットと S3 バケットバケットが異なるリージョンにある場合、アクセスを成功させるには、バケットをエグレス許可リストに明示的に追加する必要があります。
- サポートされる宛先の最大数は 2500 です。
Unity Catalog 接続の暗黙的な許可リストは非推奨です。廃止前に暗黙的な許可リストを使用していたワークスペースを含むアカウントの場合、この動作は限られた移行期間中は有効です。
ポリシーの施行
dry-run モードを使用すると、リソースへのアクセスを中断することなく、ポリシー設定をテストし、送信接続を監視できます。 dry-run モードが有効な場合、ポリシーに違反する要求はログに記録されますが、ブロックされません。 次のオプションから選択できます。
-
Databricks SQL :Databricks SQLウェアハウスはドライ実行モードで動作します。
-
AI モデルサービング : モデルサービング エンドポイントはドライ実行モードで動作します。
-
すべての製品 : すべての Databricks サービスはドライ実行モードで動作し、他のすべての選択をオーバーライドします。
デフォルトポリシーを更新する
各 Databricks アカウントには 、デフォルト ポリシー が含まれています。 デフォルト・ポリシーは 、明示的にネットワーク・ポリシーが割り当てられていないすべてのワークスペース(新しく作成されたワークスペースを含む)に関連付けられます。このポリシーは変更できますが、削除することはできません。 デフォルト ポリシーは、少なくとも Enterprise レベルのワークスペースにのみ適用されます。
ネットワークポリシーをワークスペースに関連付ける
デフォルトのポリシーを追加の設定で更新した場合、既存のネットワークポリシーがないワークスペースにも自動的に適用されます。ワークスペースは Enterprise レベルである必要があります。
ワークスペースを別のポリシーに関連付けるには、次の操作を行います。
- ワークスペースを選択します。
- ネットワーク ポリシー で、 ネットワーク ポリシーの更新 をクリックします。
- リストから目的のネットワークポリシーを選択します。
ネットワーク ポリシーの変更を適用する
ほとんどのネットワーク設定の更新は、10 分で自動的にサーバレス コンピュートに反映されます。 これには以下が含まれます。
- 新しい Unity Catalog 外部ロケーションまたは接続を追加する。
- ワークスペースを別のメタストアにアタッチする。
- 許可されたストレージまたはインターネットの宛先を変更します。
インターネットアクセスまたはドライ実行モードの設定を変更する場合は、コンピュートを再起動する必要があります。
サーバレスワークロードの再起動または再デプロイ
更新する必要があるのは、インターネットアクセスモードを切り替えるとき、またはドライ実行モードを更新するときだけです。
適切な再始動手順を決定するには、以下の製品別リストを参照してください。
- Databricks ML Serving : ML サービング エンドポイントを再デプロイします。 カスタム モデルサービング エンドポイントを作成するを参照してください。
- DLT : 実行中の DLT パイプラインを停止してから再起動します。DLT パイプラインで更新プログラムを実行するを参照してください。
- サーバレス SQLウェアハウス : SQLウェアハウスを停止して再起動します。 SQLウェアハウスの管理を参照してください。
- ワークフロー : ネットワーク ポリシーの変更は、新しいジョブの実行がトリガーされたとき、または既存のジョブの実行が再開されたときに自動的に適用されます。
- ノートブック :
- ノートブックが Sparkと対話しない場合は、新しいサーバレス クラスターを終了してアタッチし、ノートブックに適用されているネットワーク設定を更新できます。
- ノートブックが Sparkと対話すると、サーバレス リソースが更新され、変更が自動的に検出されます。 ほとんどの変更は 10 分で更新されますが、インターネット アクセス モードの切り替え、ドライ実行モードの更新、または適用の種類が異なるアタッチされたポリシー間の変更には、最大 24 時間かかる場合があります。 これらの特定の種類の変更の更新を迅速化するには、関連付けられているすべてのノートブックとジョブをオフにします。
ネットワーク ポリシーの適用を確認する
ネットワーク ポリシーが正しく適用されていることを確認するには、さまざまなサーバレス ワークロードから制限されたリソースへのアクセスを試みます。 検証プロセスは、サーバレス製品によって異なります。
DLTによる検証
-
Python ノートブックを作成します。DLT wikipedia の Python チュートリアルで提供されているサンプル ノートブックを使用できます。
-
DLT パイプラインを作成します。
-
ワークスペースのサイドバーで、 データエンジニアリング の下にある パイプライン をクリックします。
-
パイプラインの作成 をクリックします。
-
次の設定でパイプラインを構成します。
- パイプライン Mode : サーバレス
- ソース コード : 作成したノートブックを選択します。
- ストレージオプション : Unity Catalog。 目的のカタログとスキーマを選択します。
-
作成 をクリックします。
-
-
DLT パイプラインを実行します。
-
パイプライン ページで、 開始 をクリックします。
-
パイプラインが完了するまで待ちます。
-
結果を確認する
- 信頼できる宛先 : パイプラインは正常に実行され、宛先にデータを書き込む必要があります。
- 信頼できない宛先 : パイプラインは失敗し、ネットワーク アクセスがブロックされていることを示すエラーが表示されます。
Databricks SQL による検証
-
SQLウェアハウスを作成します。
-
SQL エディタでテストクエリを実行し、ネットワークポリシーによって制御されるリソースへのアクセスを試みます。
-
結果を確認します。
- 信頼できる宛先 : クエリは成功する必要があります。
- 信頼できない宛先 : クエリはネットワーク アクセス エラーで失敗します。
-
標準の Python ライブラリを使用して UDF からネットワークに接続するには、次の UDF 定義を実行します。
SQLCREATE OR REPLACE TEMPORARY FUNCTION ping_google(value DOUBLE)
RETURNS STRING
LANGUAGE python
AS $$
import requests
url = "https://www.google.com"
response = requests.get(url, timeout=5)
if response.status_code == 200:
return "UDF has network!"
else:
return "UDF has no network!"
$$;
モデルサービングで検証
始める前に
モデルサービング エンドポイントが作成されると、モデルを提供するコンテナ イメージが構築されます。 ネットワーク ポリシーは、このビルド ステージ中に適用されます。ネットワークポリシーでモデルサービングを使用する場合は、次の点を考慮してください。
-
依存関係アクセス: PyPI や conda-forge の Python パッケージ、ベース コンテナ イメージ、モデルの環境やモデルの環境で必要な Docker コンテキストで指定された外部 URL のファイルなど、外部ビルドの依存関係は、ネットワーク ポリシーで許可する必要があります。
- たとえば、モデルでビルド中にダウンロードする必要がある特定のバージョンの scikit-learn が必要な場合、ネットワーク ポリシーでパッケージをホストしているリポジトリへのアクセスを許可する必要があります。
-
ビルドの失敗: ネットワーク ポリシーが必要な依存関係へのアクセスをブロックしている場合、モデルサービング コンテナのビルドは失敗します。 これにより、配信エンドポイントが正常にデプロイされなくなり、保存や正しく機能しなくなる可能性があります。「拒否ログを確認する」を参照してください。
-
拒否のトラブルシューティング: ビルド フェーズ中のネットワーク アクセス拒否はログに記録されます。これらのログには、値
ML Build
のnetwork_source_type
フィールドが表示されます。この情報は、ビルドを正常に完了するためにネットワーク ポリシーに追加する必要がある特定のブロックされたリソースを特定するために重要です。
ランタイム・ネットワーク・アクセスの検証
次の手順では、デプロイされたモデルのネットワーク ポリシー をランタイムで検証する方法、特に推論中に外部リソースにアクセスしようとする試みについて検証する方法を示します。 これは、モデルサービングコンテナが正常にビルドされた、つまり、ビルド時の依存関係がネットワークポリシーで許可されていることを前提としています。
-
テストモデルの作成
-
Python ノートブックで、推論時にパブリック インターネット リソースへのアクセスを試みるモデル (ファイルのダウンロードや API 要求の作成など) を作成します。
-
このノートブックを実行して、テスト ワークスペースにモデルを生成します。 例えば:
Pythonimport mlflow
import mlflow.pyfunc
import mlflow.sklearn
import requests
class DummyModel(mlflow.pyfunc.PythonModel):
def load_context(self, context):
# This method is called when the model is loaded by the serving environment.
# No network access here in this example, but could be a place for it.
pass
def predict(self, _, model_input):
# This method is called at inference time.
first_row = model_input.iloc[0]
try:
# Attempting network access during prediction
response = requests.get(first_row['host'])
except requests.exceptions.RequestException as e:
# Return the error details as text
return f"Error: An error occurred - {e}"
return [response.status_code]
with mlflow.start_run(run_name='internet-access-model'):
wrappedModel = DummyModel()
# When this model is deployed to a serving endpoint,
# the environment will be built. If this environment
# itself (e.g., specified conda_env or python_env)
# requires packages from the internet, the build-time SEG policy applies.
mlflow.pyfunc.log_model(
artifact_path="internet_access_ml_model",
python_model=wrappedModel,
registered_model_name="internet-http-access"
)
-
-
配信エンドポイントを作成する
-
ワークスペースのナビゲーションで、 機械学習 を選択します。
-
サービング タブをクリックします。
-
サービングエンドポイントの作成 をクリックします。
-
次の設定でエンドポイントを構成します。
- サービングエンドポイント名 : わかりやすい名前を指定します。
- エンティティの詳細 : モデル レジストリ モデル を選択します。
- モデル : 前の手順で作成したモデルを選択します (
internet-http-access
)。
-
[確認] をクリックします。この段階で、モデルサービングコンテナのビルドプロセスが開始されます。
ML Build
のネットワークポリシーが適用されます。依存関係のネットワーク アクセスがブロックされたためにビルドが失敗した場合、エンドポイントは準備完了になりません。 -
サービス エンドポイントが [準備完了 ] 状態に達するまで待ちます。準備完了にならない場合は、拒否ログで
network_source_type: ML Build
エントリを確認します。「拒否ログを確認する」を参照してください。
-
-
エンドポイントをクエリします。
-
[サービス エンドポイント] ページの [クエリ エンドポイント ] オプションを使用して、テスト要求を送信します。
JSON{ "dataframe_records": [{ "host": "[https://www.google.com](https://www.google.com)" }] }
-
-
実行時アクセスの結果を確認します。
- ランタイムでインターネット アクセスが有効 になる: クエリは成功し、
200
のようなステータス コードを返す必要があります。 - ランタイムでインターネット アクセスを制限 : クエリは、モデル コード内の
try-except
ブロックからのエラー メッセージ (接続タイムアウトまたはホスト解決エラーを示す) などのネットワーク アクセス エラーで失敗する必要があります。
- ランタイムでインターネット アクセスが有効 になる: クエリは成功し、
ネットワークポリシーを更新する
ネットワーク ポリシーは、作成後いつでも更新できます。 ネットワークポリシーを更新するには:
-
アカウントコンソールのネットワークポリシーの詳細ページで、ポリシーを変更します。
- ネットワークアクセスモードを変更します。
- 特定のサービスのドライ実行モードを有効または無効にします。
- FQDN またはストレージの宛先を追加または削除します。
-
更新 をクリックします。
-
ネットワーク ポリシーの変更を適用する を参照して、更新プログラムが既存のワークロードに適用されることを確認します。
拒否ログを確認する
拒否ログは、Unity Catalog の system.access.outbound_network
テーブルに格納されます。 これらのログは、送信ネットワーク要求が拒否されたタイミングを追跡します。 拒否ログにアクセスするには、Unity Catalog メタストアでアクセス スキーマが有効になっていることを確認します。 「システムテーブル スキーマの有効化」を参照してください。
次のような SQL クエリを使用して、拒否イベントを表示します。 dry-run logs が有効になっている場合、クエリは拒否ログと dry-run ログの両方を返します。これらは access_type
列を使用して区別できます。 拒否ログには DROP 値がありますが、dry-run ログには DRY_RUN_DENIAL が表示されます。
次の例では、過去 2 時間のログを取得します。
select * from system.access.outbound_network
where event_time >= current_timestamp() - interval 2 hour
sort by event_time desc
dry-run モードと external 生成AI モデルの場合、次のようになります。
- ネットワーク ポリシーが必要な依存関係へのアクセスをブロックしている場合は、まず
system.access.outbound_network
の拒否ログを確認します。さらに、モデルサービングコンテナのビルドログには、ブロックされたドメインに関する有用な情報が得られる場合があります。 - モデルサービングコンテナのビルドが失敗した場合は、
system.access.outbound_network
の拒否ログを確認して、ブロックされたドメインを特定します。 - Mosaic AI Serving による外部モデルアクセスの適用は、ドライ実行モードでも継続されます。
アクセス時から拒否ログが表示されるまでの間には、知覚可能な遅延が発生する可能性があります。
制限
-
設定 : この機能は、アカウントコンソールからのみ設定できます。 API のサポートはまだ利用できません。
-
アーティファクトのアップロードサイズ : MLflowの内部 Databricks Filesystem を
dbfs:/databricks/mlflow-tracking/<experiment_id>/<run_id>/artifacts/<artifactPath>
形式で使用する場合、アーティファクトのアップロードはlog_artifact
、log_artifacts
、およびlog_model
APIで5GBに制限されます。 -
モデルサービング : モデルサービングのイメージを構築する場合、エグレスコントロールは適用されません。
-
短時間のみ有効なガベージコレクション (GC) ワークロードのログ配信拒否 : 存続時間が 120 秒未満の短時間 GC ワークロードからのログ拒否ログは、ログの遅延によりノードが終了する前に配信されない場合があります。アクセスは引き続き適用されますが、対応するログ エントリが欠落している可能性があります。
-
Databricks SQL ユーザー定義関数 (UDF) のネットワーク接続 : Databricks SQL でネットワーク アクセスを有効にするには、Databricks アカウント チームにお問い合わせください。
-
DLT Eventhook のログ記録 : 別のワークスペースを対象とする DLT Eventhook はログに記録されません。これは、クロスリージョンワークスペースと同じリージョン内のワークスペースの両方に対して設定された Eventhook に適用されます。
-
リージョンをまたいだUnity CatalogS3 S3Unity Catalogロケーションへのネットワークアクセス:AWS メタストアとは異なる リージョンにある 外部ロケーションに使用される バケットは、サーバレス ネットワーク ポリシーによって自動的に許可されません。これらのクロスリージョン S3 ロケーションは、サーバレスワークロードからのアクセスを有効にするために、ネットワークポリシーの許可された宛先に明示的に追加する必要があります。