次の方法で共有


データ エンジニアリング ワークロードに対するワークスペースの送信アクセス保護

ワークスペースの送信アクセス保護により、Microsoft Fabric ワークスペースからの外部通信を正確に制御できます。 この機能を有効にすると、ノートブック、Spark ジョブ定義、レイクハウスなどの データ エンジニアリング ワークスペース項目は、承認されたマネージド プライベート エンドポイント経由でアクセスが明示的に許可されない限り、パブリック エンドポイントへの送信接続を行うことが制限されます。 この機能は、データ流出を防ぎ、組織のネットワーク境界を強制するため、セキュリティで保護された環境または規制された環境の組織にとって非常に重要です。

データ エンジニアリングを使用した送信アクセス保護について

送信アクセス保護が有効になっている場合、ワークスペースからの送信接続はすべて既定でブロックされます。 ワークスペース管理者は、マネージド プライベート エンドポイントを構成することで、承認された宛先にのみアクセス権を付与する例外を作成できます。

データ エンジニアリング シナリオにおけるワークスペース外向きアクセスの保護を示す図。

データ エンジニアリングの送信アクセス保護の構成

データ エンジニアリングの送信アクセス保護を構成するには:

  1. 送信アクセス保護を有効にするには、手順に従います。

  2. 送信アクセス保護を有効にした後、必要に応じて他のワークスペースまたは外部リソースへの送信アクセスを許可するように 、マネージド プライベート エンドポイント を設定できます。

構成が完了すると、データ エンジニアリング項目は承認済みのマネージド プライベート エンドポイントにのみ接続できますが、他のすべての送信接続はブロックされたままです。

サポートされているデータ エンジニアリング項目の種類

送信アクセス保護では、次のデータ エンジニアリング項目の種類がサポートされています。

  • レイクハウス
  • Notebooks
  • Spark ジョブ定義
  • Environments

次のセクションでは、送信アクセス保護がワークスペース内の特定のデータ エンジニアリング項目の種類に与える影響について説明します。

Notebooks

ワークスペースで送信アクセス保護が有効になっている場合、ノートブックは、マネージド プライベート エンドポイントがワークスペースから宛先に設定されている場合にのみ、宛先を参照できます。

情報源 行き先 マネージド プライベート エンドポイントは設定されていますか? ノートブックまたは Spark ジョブは宛先に接続できますか?
ノートブック (ワークスペース A) Lakehouse (ワークスペース B) はい。A から B へのクロスワークスペースマネージド プライベート エンドポイントが A に設定されている イエス
ノートブック (ワークスペース A) Lakehouse (ワークスペース B) いいえ いいえ
ノートブック (ワークスペース A) 外部 Azure Data Lake Storage (ADLS) G2/その他のデータ ソース はい。マネージド プライベート エンドポイントは、A から外部データ ソースに設定されます イエス
ノートブック (ワークスペース A) 外部 ADLS G2/その他のデータ ソース いいえ いいえ

Fabric ノートブックでのファイル パスの動作について

Fabric ノートブックから Lakehouse のデータにアクセスする場合は、相対パスまたは完全修飾 (絶対) パスを使用してファイルを参照できます。 違いを理解することは、特にワークスペース間で作業する場合に、データ アクセスを成功させるために重要です。

相対パス

相対パスは、現在の Lakehouse 内のファイルを参照する最も簡単で一般的な方法です。 Lakehouse エクスプローラーからノートブック セルにファイルをドラッグ アンド ドロップすると、相対パスが自動的に使用されます。

Example:
Files/people.csv

Spark コード:

df = spark.read.format("csv").option("header", "true").load("Files/people.csv")

相対パスはすぐに使用でき、それ以上の構成は必要ありません。

完全修飾パス (絶対パス)

完全修飾パスは、ワークスペースや Lakehouse 情報など、ファイルの完全な場所を指定します。 ただし、これらのパスで表示名を使用すると、Spark セッションで既定で解決できないため、ソケット タイムアウトなどのエラーが発生する可能性があります。

正しくない例 (失敗します):
abfss://your_workspace@onelake.dfs.fabric.microsoft.com/your_lakehouse.Lakehouse/Files/people.csv

ワークスペース間でのデータへのアクセス

別のワークスペースにある Lakehouse 内のファイルにアクセスするには、ワークスペース ID と Lakehouse ID (表示名ではなく) を含む完全修飾パスを使用します。 これにより、Spark がパスを解決し、データにアクセスできるようになります。

正しい URI 形式:
abfss://<workspace_id>@onelake.dfs.fabric.microsoft.com/<lakehouse_id>/Files/people.csv

Spark コードの例:

df = spark.read.format("csv").option("header", "true").load("abfss://4c8efb42-7d2a-4a87-b1b1-e7e98bea053d@onelake.dfs.fabric.microsoft.com/5a0ffa3d-80b9-49ce-acd2-2c9302cce6b8/Files/people.csv")

ワークスペース ID と Lakehouse ID を検索する方法

  • ワークスペース ID: Fabric ワークスペースの URL の/groups/以降にある GUID。
  • Lakehouse ID: URL 内の /lakehouses/ の後の GUID。

URL の例:
https://app.fabric.microsoft.com/groups/4c8efb42-7d2a-4a87-b1b1-e7e98bea053d/lakehouses/5a0ffa3d-80b9-49ce-acd2-2c9302cce6b8/...

ワークスペース間でデータにアクセスするときは、常に URI でワークスペース ID と Lakehouse ID を使用します。

Sparkジョブ

ワークスペースの送信アクセス保護が有効になっている場合、Spark クラスターはパブリック インターネットへの送信接続を行うことができなくなります。 これには次のものが含まれます。

  • を使用して PyPI から Python パッケージを直接インストールする pip install
  • などのパブリック ドメインへのアクセス https://login.microsoftonline.com
  • 外部 API または Web サイトへの接続

Microsoft Fabric では、明示的なアクセスが許可されていない限り、Spark クラスターを外部ネットワークから分離するマネージド仮想ネットワーク (マネージド VNET) を通じてこの制限が適用されます。

マネージド プライベート エンドポイントを使用したセキュリティで保護された接続

セキュリティを維持しながら Spark クラスターが外部リソースに接続できるようにするには、マネージド プライベート エンドポイントを使用する必要があります。 これらのエンドポイントは、セキュリティで保護された承認済みの接続を可能にします。

  • 外部サービス (Azure SQL Database、Azure Blob Storage など)
  • 同じテナント内の他の Fabric ワークスペース

承認されたマネージド プライベート エンドポイントを介して確立された接続のみが許可されます。 他のすべての送信アクセス試行は、既定でブロックされます。

保護されたワークスペースへの送信アクセスにライブラリを安全にインストールする

Fabric はパブリック インターネット トラフィックをブロックするため、Spark クラスターは、 pip installを使用して PyPI からパッケージを直接インストールすることはできません。

送信アクセス保護が有効になっているワークスペースにライブラリをインストールするには、次の 2 つの安全なオプションがあります。

  1. ホイール ファイルをアップロードして使用する: 信頼されたコンピューティング リソースに必要な Python パッケージ ホイール ファイルを手動で準備し、Fabric 環境にアップロードします。 この方法により、承認されたパッケージのみがインストールされ、パブリック インターネット アクセスが回避されます。

  2. プライベート PyPI ミラーをホストします。 Azure Storage にプライベート PyPI リポジトリを設定し、パブリック PyPI インデックスから選択したパッケージと同期します。 マネージド プライベート エンドポイントを使用してこのプライベート ミラーからパッケージをインストールするように Fabric 環境を構成し、ネットワーク セキュリティ ポリシーへの準拠を維持します。

パッケージ管理とセキュリティに関する組織の要件に最も適したアプローチを選択します。

オプション 1: ホイール ファイルをアップロードして使用する

  1. Fabric Spark ランタイムに含まれていない不足しているパッケージを特定します。

  2. コンピューティング リソースで次のスクリプトを実行して、Microsoft Fabric Spark ランタイム 1.3 と同じローカル Python 環境を設定します。 このスクリプトには、プリベイク環境に含まれるすべてのライブラリの一覧を含む YAML ファイルが必要です。

  3. Microsoft でホストされているプライベート ライブラリがこの YAML から削除されていることを確認します。

    wget https://repo.anaconda.com/miniconda/Miniconda3-py310_24.1.2-0-Linux-x86_64.sh 
    bash Miniconda3-py310_24.1.2-0-Linux-x86_64.sh 
    chmod 755 -R /usr/lib/miniforge3/ 
    export PATH="/usr/lib/miniforge3/bin:$PATH" 
    sudo apt-get update 
    sudo apt-get -yq install gcc g++ 
    conda env create -n <custom-env-name> -f Python<version>-CPU.yml 
    source activate <custom-env-name> 
    
  4. このスクリプトを使用して、spark ランタイムにインストールするすべてのパッケージとバージョンを含む requirements.txt ファイルを渡すことができます。 入力ライブラリの要件に合わせて、新しいホイール ファイル/依存関係の名前が出力されます。

    pip install -r <input-user-req.txt> > pip_output.txt 
    cat pip_output.txt | grep "Using cached *" 
    
  5. .whlファイルを手動でダウンロードします。

  6. 環境成果物を使用して、必要なすべてのホイールをアップロードします。

  7. 環境をノートブックまたはジョブにアタッチします。

オプション 2: Azure Storage でプライベート PyPI ミラーをホストする

[前提条件]
PyPI リポジトリの初期同期

最初の手順として、PyPI リポジトリの同期を実行する必要があります。 完全な PyPI リポジトリには多数のパッケージが含まれており、継続的に拡張されているため、ハードウェアとネットワークによっては、最初のダウンロードに 8 から 48 時間かかる場合があります。 現在のリポジトリのサイズとパッケージ数については、統計を参照してください 。PyPI

Maintenance

ミラーの同期を維持するには、定期的な監視と更新が必要です。同期速度には、次の要因が影響します。

  • ネットワーク速度。
  • Bandersnatch を実行しているコンピューティング リソースの CPU、メモリ、ディスク I/O などのサーバー リソース。
  • ディスク速度 (SSD と HDD) は、Bandersnatch がデータを書き込む速度に影響します。
  • 初期セットアップとメンテナンス同期: 初期同期ではリポジトリ全体がダウンロードされ、8 から 48 時間かかる場合がありますが、以降の同期は新しいパッケージまたは変更されたパッケージのみを更新するため高速です。
セットアップ手順
  1. Linux VM または Windows Subsystem for Linux (WSL)) 開発マシンを設定します。

    wget https://repo.anaconda.com/miniconda/Miniconda3-py310_24.1.2-0-Linux-x86_64.sh 
    bash Miniconda3-py310_24.1.2-0-Linux-x86_64.sh 
    chmod 755 -R /usr/lib/miniforge3/ 
    
    # Add Python executable to PATH 
    export PATH="/usr/lib/miniforge3/bin:$PATH" 
    
  2. PyPI をミラー化するために Bandersnatch をインストールします。 Bandersnatch は、PyPI リポジトリ全体と関連するインデックス ファイルを ローカル ファイルシステムにダウンロードする PyPI ミラーリング ツールです。

    # Install Bandersnatch 
    pip install bandersnatch
    
  3. バンダーナッチの構成: Bandersnatch/ src/bandersnatch/example.conf の GitHub の例で指定された構成で bandersnatch.conf ファイルを作成します。

  4. ミラー コマンドを実行して、PyPI プライマリ サーバーとの 1 回限りの同期を実行します。

    bandersnatch --config <path-to-bandersnatch.conf> mirror

    このコマンドは、ローカル ファイルシステム上のミラー ディレクトリに次のサブディレクトリを作成します。

    初期同期の実行には時間がかかります (統計を参照 してください。PyPI)。 Bandersnatch では、許可リストプラグインとブロックリスト プラグインを使用した選択的ミラーリングもサポートされ、依存関係をより効率的に管理できます。 不要なパッケージをフィルター処理することで、ミラーのサイズを小さくし、コストとメンテナンス作業の両方を最小限に抑えることができます。 たとえば、ミラーが Fabric のみを対象としている場合は、Windows バイナリを除外してストレージを最適化できます。 ユース ケースに基づいて、これらのフィルター処理オプションを評価することをお勧めします。

    「ミラー フィルタリング」 ( Bandersnatch のドキュメント) も参照してください。

  5. ミラーのセットアップを確認するには、HTTP サーバーを使用してローカル PyPI ミラーにサービスを提供します。 このコマンドは、ミラー ディレクトリの内容を提供するポート 8000 で単純な HTTP サーバーを起動します。

    cd <directory-to-mirror>
    python -m http.server 8000
    
  6. ローカル PyPI ミラーを使用するように pip を構成します。

    pip install <package> -index-url http://localhost:8000/simple 
    
  7. ミラーをストレージ アカウントにアップロードし、 Azure ストレージ アカウントで [静的 Web サイトを有効にする] を選択します。 この設定を使用すると、PyPI などの静的コンテンツをインデックス ページでホストできます。 この設定を有効にすると、$webという名前のコンテナーが自動的に生成されます。

    Azure CLI または blobfuse2 の AzCopy を使用して、開発マシンから Azure ストレージ アカウントにローカル ミラーをアップロードできます。

    • ストレージ アカウント コンテナー上の選択したコンテナーにパッケージ フォルダーをアップロードします。
    • 単純な PyPI、ローカル統計、JSON フォルダーをストレージ アカウントのコンテナー$webアップロードします。
  8. Fabric 環境項目でこのミラーを使用するには、Fabric で 2 つのマネージド プライベート エンドポイントを作成します。

    • BLOB コンテナー用の 1 つ (パッケージ)
    • 静的 Web サイト用の 1 つ (インデックス)
  9. 環境アーティファクトを使用して、 Fabric 環境にライブラリ管理をインストールする yml ファイルを指定します。

    dependencies: 
      - pip 
      - pip: 
        - pytest==8.2.2 
        - --index-url https://<storage-account-name>.z5.web.core.windows.net/simple 
    
  10. または、 %pip install コマンドを使用して、ノートブック内にパッケージを直接インストールすることもできます。

   %pip install pytest --index-url https://<storage-account-name>.z5.web.core.windows.net/simple

レイクハウススキーマと送信アクセス保護

スキーマを使用する Lakehouse は、送信アクセス保護が有効になっている場合を含め、同じワークスペース内の項目からアクセスする場合に完全にサポートされます。

ワークスペース間アクセスのシナリオでは、使用しているワークスペースで送信アクセス保護が有効になっている場合の Lakehouse へのアクセス方法によって動作が異なります。

サポートされているシナリオ

  • プロデューサー項目とコンシューマー項目が同じワークスペース内にある
  • Lakehouse はスキーマを使用します
  • アクセスは Spark DataFrame ベースの API を使用して実行されます

これらのシナリオでは、Lakehouse スキーマ操作は想定どおりに機能します。

アウトバウンドアクセス保護が有効になっている場合のワークスペース間の動作

ワークスペースで送信アクセス保護が有効になっていて、 スキーマが有効な Lakehouse に別のワークスペースからアクセスする場合、次の動作が適用されます。

  • Spark DataFrame API を使用したアクセス (DataFrame へのテーブルの読み取りなど) は引き続き機能します
  • Spark SQL ステートメントを使用したアクセスが失敗する可能性があります。

たとえば、 spark.read.table() は成功しますが、送信アクセス保護が有効になっている場合、ワークスペース間のシナリオでは SELECT * FROM table が失敗する可能性があります。

ファイル パスの動作について

Fabric ノートブックを使用して Lakehouse のデータを操作する場合は、主に次の 2 つの方法でファイルを参照できます。

  • ワークスペースで送信アクセス保護が有効になっている場合、Spark にはマネージド仮想ネットワーク (VNET) が使用されます。 この場合、スターター プールは無効になり、Spark セッションの開始には 3 分から 5 分かかることが予想されます。

  • 送信アクセス保護では、Spark からのパブリック アクセスはすべてブロックされます。 この制限により、ユーザーは pip を使用して PyPI などのパブリック チャネルから直接ライブラリをダウンロードできなくなります。 データ エンジニアリング ジョブのライブラリをインストールするには、次の 2 つのオプションがあります (詳細については、 送信アクセスで保護されたワークスペースにライブラリを安全にインストールするを参照してください)。

    • マネージド プライベート エンドポイントを介して Fabric ワークスペースに接続されているデータ ソースからライブラリ パッケージを参照します。

    • 必要なライブラリと依存関係 (プリベイクされたランタイムにまだ含まれていない) のホイール ファイルをアップロードします。

  • 送信アクセス保護を有効にすると、ワークスペースからのすべてのパブリック アクセスがブロックされます。 そのため、別のワークスペースから Lakehouse に対してクエリを実行するには、Spark ジョブが接続を確立できるように、ワークスペース間で管理されるプライベート エンドポイントを作成する必要があります。

  • ワークスペース名とレイクハウス名で完全修飾パスを使用すると、ソケットタイムアウト例外が発生する可能性があります。 ファイルにアクセスするには、現在の Lakehouse の相対パスを使用するか、ワークスペース ID と lakehouse ID (表示名ではなく) を含む完全修飾パスを使用します。 この方法により、Spark セッションでパスを正しく解決でき、ソケット タイムアウト エラーが回避されます。 詳細については、こちらを参照してください