Azure Private Link のバックエンド接続とフロントエンド接続を有効にする

この記事では、Azure Private Link を使用して、ユーザーとその Databricks ワークスペース間、およびクラシック コンピューティング プレーン上のクラスターと Databricks ワークスペース インフラストラクチャ内のコントロール プレーン上のコア サービス間のプライベート接続を有効にする方法についてまとめています。

この機能では、サーバーレス SQL ウェアハウスのネットワーク アクセスは変更されません。 ただし、SQL ウェアハウスからデータ ソースへのネットワーク アクセスを制御するための別個の機能があります。 「サーバーレス コンピューティングからのプライベート接続を構成する」を参照してください。

概要

Private Link を使用すると、パブリック ネットワークにトラフィックをさらすことなく、Azure VNet とオンプレミス ネットワークから Azure サービスにプライベート接続できます。 Azure Databricks では、Private Link の次の接続の種類がサポートされています。

  • フロントエンド Private Link (ユーザーからワークスペースへ): フロントエンド Private Link 接続を使用すると、ユーザーは VNet インターフェイス エンドポイント経由で Azure Databricks Web アプリケーション、REST API、Databricks Connect API に接続できます。 フロントエンド接続は、JDBC/ODBC と Power BI 統合でも使われます。 トランジット VNet とワークスペースの Azure Databricks コントロール プレーン間のフロントエンド Private Link 接続のネットワーク トラフィックは、Microsoft バックボーン ネットワークを経由します。
  • バックエンド Private Link ("コンピューティング プレーンからコントロール プレーン"): カスタマーマネージド VNet (コンピューティング プレーン) 内の Databricks Runtime クラスターから、Azure Databricks クラウド アカウント内の Azure Databricks ワークスペースのコア サービス (コントロール プレーン) に接続します。 これにより、クラスターから、セキュリティで保護されたクラスター接続リレー エンドポイントと REST API エンドポイントへのプライベート接続が可能になります。
  • ブラウザー認証プライベート エンドポイント: パブリック インターネットに接続されていないクライアントのために Azure Databricks Web アプリケーションへのプライベート フロントエンド接続をサポートするには、Microsoft Entra ID (旧称 Azure Active Directory) から Azure Databricks Web アプリケーションへのシングル サインオン (SSO) コールバックをサポートするため、ブラウザー認証プライベート エンドポイントを追加する必要があります。 お使いのネットワークからパブリック インターネットへの接続を許可する場合、ブラウザー認証プライベート エンドポイントの追加は推奨されますが、必須ではありません。 ブラウザー認証プライベート エンドポイントは、サブリソースの種類が browser_authentication のプライベート接続です。

フロントエンド接続とバックエンド接続の両方に Private Link を実装する場合、必要に応じてワークスペースのプライベート接続を義務付ける、つまり、Azure Databricks でパブリック ネットワーク経由のすべての接続を拒否することができます。 フロントエンドとバックエンドの両方で接続の種類の実装を拒否する場合は、この要件を適用することはできません。

この記事のほとんどは、新しいワークスペースの作成に関する記事ですが、既存のワークスペースで Private Link を有効または無効にすることができます。 「既存のワークスペースで Azure Private Link を有効または無効にする」を参照してください。

用語

次の表は、重要な用語についての説明です。

用語 説明
Azure Private Link パブリック ネットワークにトラフィックをさらすことなく、Azure VNet とオンプレミス ネットワークから Azure サービスへのプライベート接続を提供する Azure テクノロジ。
Azure Private Link サービス Private Link 接続の宛先に指定できるサービス。 Azure Databricks コントロール プレーン インスタンスごとに、Azure Private Link サービスを発行します。
Azure プライベート エンドポイント Azure プライベート エンドポイントを使用すると、VNet と Private Link サービス間をプライベート接続できます。 フロントエンドおよびバックエンド接続の場合、Azure プライベート エンドポイントのターゲットは Azure Databricks コントロール プレーンです。

プライベート エンドポイントの一般的な情報については、Microsoft の記事の「プライベート エンドポイントとは」を参照してください。

標準または簡略化されたデプロイを選択する

Azure Databricks でサポートされる Private Link デプロイには 2 種類があり、いずれかを選択する必要があります。

  • 標準デプロイ (推奨): セキュリティを強化するために、Databricks では、"トランジット VNet" とは別のプライベート エンドポイントをフロントエンド接続に使うことをお勧めします。 フロントエンドとバックエンドの両方の Private Link 接続を実装することも、バックエンド接続のみを実装することもできます。 クラシック コンピューティング プレーンでコンピューティング リソースに使用する VNet とは別に、別の VNet を使用してユーザー アクセスをカプセル化します。 バックエンドとフロントエンドのアクセス用に個別の Private Link エンドポイントを作成します。 「標準デプロイとしてAzure Private Link を有効にする」の手順に従ってください。
  • 簡略化されたデプロイ: 組織によっては、複数のプライベート エンドポイントが禁止されている、トランジット VNet を分離することが推奨されていないなど、さまざまなネットワーク ポリシーの理由から標準デプロイを使用できない場合があります。 Private Link の簡略化されたデプロイを代わりに使用することができます。 クラシック コンピューティング プレーンでコンピューティング リソースに使う VNet とは別の VNet でユーザー アクセスが分離されることはありません。 代わりに、コンピューティング プレーン VNet 内の "トランジット サブネット" がユーザー アクセスに使われます。 Private Link エンドポイントは 1 つだけです。 通常、フロントエンドとバックエンドの両方の接続が構成されます。 必要に応じて、バックエンド接続のみを構成することもできます。 このデプロイの種類では、フロントエンド接続のみを使用するように選択することはできません。 「簡略化されたデプロイとして Azure Private Link を有効にする」の手順に従ってください。

必要条件

Azure サブスクリプション

Azure Databricks ワークスペースが Premium または Enterprise レベルである必要があります。

Azure Databricks ワークスペース ネットワーク アーキテクチャ

  • Azure Databricks ワークスペースで、VNet インジェクションを使用して、(フロントエンドのみの接続であっても) Private Link 接続を追加する必要があります。
  • バックエンド Private Link 接続を実装する場合は、Azure Databricks ワークスペースで、セキュリティで保護されたクラスター接続 (SCC/パブリック IP なし/NPIP) を使用する必要があります。
  • VNet インジェクションの要件を満たす VNet が必要です。
    • メインの VNet インジェクションの記事で説明されているように、2 つのサブネット (UI 用語ではパブリック サブネットとプライベート サブネット) を定義する必要があります。 Azure Databricks に使用する VNet とサブネットの IP 範囲で、一度に使用できるクラスター ノードの最大数を定義します。 これらの値は慎重に選択してください。
    • フロントエンド Private Link、バックエンド Private Link、またはその両方を実装するには、ワークスペース VNet に、Private Link エンドポイントが含まれる 3 番目のサブネットが必要であり、その IP アドレス範囲が他のワークスペース サブネットの範囲と重複しないようにする必要があります。 この記事では、この 3 番目のサブネットをプライベート エンドポイント サブネットと呼びます。 例とスクリーンショットでは、サブネット名を private-link としています。 これは CIDR 範囲 /27 と同じくらい小さくできます。 プライベート エンドポイントが含まれるサブネットに NSG ルールを定義しないでください。
    • UI を使用してオブジェクトを作成する場合は、Azure Databricks ワークスペースを作成する "前" に、ネットワークとサブネットを手動で作成する必要があります。 テンプレートを使用したい場合は、Azure Databricks に用意されているテンプレートを使って、通常のサブネット 2 つとプライベート エンドポイント用のサブネット 1 つを含め、VNet と適切なサブネットを作成します。
  • エグレスを制御するために VNet の周りのネットワーク セキュリティ グループまたはファイアウォールを使用しているか、使用する予定の場合、セキュリティで保護されたクラスター接続リレーを含め、Azure Databricks コントロール プレーンへの接続のエグレス用にプライベート エンドポイント サブネット上でポート 443、6666、3306、8443 から 8451 を許可する必要があります。 プライベート エンドポイントに対してネットワーク セキュリティ グループ ポリシーを有効にしている場合は、プライベート エンドポイントがデプロイされているサブネットのネットワーク セキュリティ グループで、イングレス用にポート 443、6666、8443 から 8451 も許可する必要があります。

フロントエンド接続ネットワーク アーキテクチャ

フロントエンド Private Link の場合に限り、ユーザーがオンプレミス ネットワークからワークスペースにアクセスするには、そのネットワークから Azure ネットワークへのプライベート接続を追加する必要があります。 この接続は、Private Link を構成する前に追加します。 詳細は、Private Link の標準デプロイを使用するか、簡略化されたデプロイを使用するかによって異なります。

  • 標準デプロイの場合、"トランジット VNet" ("bastion VNet" または "ハブ VNet" と呼ばれることもあります) を作成するか、既存のものを使用します。 この VNet は、Expressroute または VPN ゲートウェイ接続を使用して、オンプレミスのユーザー環境から到達可能である必要があります。 フロントエンド Private Link の場合、Databricks では、ワークスペース VNet を共有するのではなく、コントロール プレーンへの接続用に別個の VNet を作成することが推奨されています。 トランジット VNet とそのサブネットは、ワークスペース VNet とそのサブネットと同じリージョン、ゾーン、リソース グループに存在できますが、一致する必要はありません。 別個のトランジット VNet 用のリソース グループを作成し、そのプライベート エンドポイントに別のプライベート DNS ゾーンを使用します。 2 つの別個のプライベート エンドポイントを使用する場合、DNS ゾーンを共有することはできません。
  • 簡略化されたデプロイの場合は、ワークスペース VNet 内にトランジット サブネットを作成します。 このデプロイでは、トランジット サブネットに個別のプライベート エンドポイントはありません。 ワークスペース VNet のトランジット サブネットは、バックエンド接続とフロントエンド接続の両方に 1 つのプライベート エンドポイントを使用します。

Azure ユーザーのアクセス許可

Azure ユーザーとして、次のことを行うのに十分な読み取り/書き込みアクセス許可が必要です。

  • 新しい Azure Databricks ワークスペースをプロビジョニングする。
  • Azure Private Link エンドポイントを、ワークスペース VNet 内に作成し、(フロントエンドに使用する場合は) トランジット VNet 内にも作成する。

トランジット VNet のプライベート エンドポイントを作成したユーザーにワークスペースの所有者または共同作成者アクセス許可がない場合は、ワークスペースの所有者または共同作成者アクセス許可を持つ別のユーザーが、プライベート エンドポイント作成要求を手動で承認する必要があります。

既存のワークスペースで Private Link を有効にできます。 アップグレードを行うには、ワークスペースで VNet インジェクションセキュリティ保護されたクラスター接続、Premium 価格レベルを使う必要があります。 更新の間に、セキュリティ保護されたクラスター接続と Premium 価格レベルに更新できます。

ARM テンプレートまたは azurerm Terraform プロバイダー バージョン 3.41.0 以降を使用できます。 Azure portal を使用してカスタム テンプレートを適用し、UI で パラメーターを変更できます。 ただし、Azure Databricks ワークスペース インスタンス自体では、このアップグレードに対する Azure portal ユーザー インターフェイスのサポートはありません。

アップグレードに問題がある場合、ワークスペースの更新手順を繰り返すことができますが、代わりに Private Link を無効にするフィールドを設定することができます。

このセクションでは、既存のワークスペースで Private Link を有効にすることに重点を置きますが、ARM テンプレートまたは Terraform 更新プログラムで同じワークスペース更新呼び出しを使用して、既存のワークスペースでこれを無効にすることができます。 詳細については、「手順 4: ワークスペースの更新を適用する」を参照してください。

手順 1: このページの要件とドキュメントを読む

Private Link へのアップグレードを試みる前に、次の重要な概念と要件を確認する必要があります。

  1. 続行する前に、概念と要件を含むこの記事をお読みください。
  2. 標準デプロイと簡略化されたデプロイのどちらを使用するかを決定します。
  3. 標準デプロイまたは簡略化されたデプロイ のページで (どちらの方法を使用する場合でも)、さまざまなシナリオを含むページを慎重に確認します。 ユース ケースに一致するシナリオを見つけます。 publicNetworkAccessrequiredNsgRules に使用する値を書き留めます。 フロントエンド接続がロックダウンされた、フロントエンドとバックエンドの両方の Private Link の推奨される構成については、publicNetworkAccess=DisabledrequiredNsgRules=NoAzureDatabricksRules の設定を使用します。

手順 2: すべてのコンピューティング リソースを停止する

このアップグレードを試みる前に、クラスター、プール、クラシック SQL ウェアハウスなどのすべてのコンピューティング リソースを停止する必要があります。 ワークスペースのコンピューティング リソースを実行してはいけません。さもないと、アップグレードの試行が失敗します。 Databricks では、ダウンタイムのために、アップグレードのタイミングを計画することをお勧めします。

重要

更新中にコンピューティング リソースを開始しないでください。 コンピューティング リソースが開始された (またはまだ開始中である) と Azure Databricks によって判断された場合、それらは更新後に Azure Databricks によって終了されます。

手順 3: サブネットとプライベート エンドポイントを作成する

  1. バックエンド プライベート エンドポイント用のワークスペース VNet にサブネットを追加します。

  2. 標準デプロイまたは簡略化されたデプロイ (使用するいずれかの方法) に関する記事を開きます。

    そのページの指示に従って、デプロイの種類に一致するプライベート エンドポイントを作成します。

  3. ワークスペースの更新を行う前に、バックエンド サポート用のすべてのプライベート エンドポイントを作成します。

  4. UI アクセスの場合は、トランジット VNet からの SSO をサポートするために、サブリソース databricks_ui_api を使用してプライベート エンドポイントを作成します。 フロントエンド アクセスのためにワークスペースにアクセスする複数のトランジット VNet がある場合は、サブリソース databricks_ui_api を使用して複数のプライベート エンドポイントを作成します。

手順 4: ワークスペースの更新を適用する

新しいワークスペースを作成する代わりに、ワークスペースの更新を適用する必要があります。

publicNetworkAccess パラメーターと requiredNsgRules パラメーターは、前の手順で選択した値に更新する必要があります。

次のいずれかの方法を使用します。

Azure portal を使用して更新 ARM テンプレートを適用する

注意

マネージド リソース グループにカスタム名がある場合は、それに応じてテンプレートを変更する必要があります。 詳細については、Azure Databricks アカウント チームにお問い合わせください。

  1. 次のアップグレード ARM テンプレート JSON をコピーします。

    {
       "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
       "contentVersion": "1.0.0.0",
       "parameters": {
           "location": {
               "defaultValue": "[resourceGroup().location]",
               "type": "String",
               "metadata": {
                   "description": "Location for all resources."
               }
           },
           "workspaceName": {
               "type": "String",
               "metadata": {
                   "description": "The name of the Azure Databricks workspace to create."
               }
           },
           "apiVersion": {
               "defaultValue": "2023-02-01",
               "allowedValues": [
                "2018-04-01",
                   "2020-02-15",
                   "2022-04-01-preview",
                   "2023-02-01"
               ],
               "type": "String",
               "metadata": {
                   "description": "2018-03-15 for 'full region isolation control plane' and 2020-02-15 for 'FedRAMP certified' regions"
               }
           },
           "publicNetworkAccess": {
               "defaultValue": "Enabled",
               "allowedValues": [
                   "Enabled",
                   "Disabled"
               ],
               "type": "String",
               "metadata": {
                   "description": "Whether the workspace allows access from the public Internet"
               }
           },
           "requiredNsgRules": {
               "defaultValue": "AllRules",
               "allowedValues": [
                   "AllRules",
                   "NoAzureDatabricksRules"
               ],
               "type": "String",
               "metadata": {
                   "description": "The security rules that are applied to the security group of the Vnet"
               }
           },
           "enableNoPublicIp": {
               "defaultValue": true,
               "type": "Bool"
           },
           "pricingTier": {
               "defaultValue": "premium",
               "allowedValues": [
                   "premium",
                   "standard",
                   "trial"
               ],
               "type": "String",
               "metadata": {
                   "description": "The pricing tier of workspace."
               }
           },
           "privateSubnetName": {
               "defaultValue": "private-subnet",
               "type": "String",
               "metadata": {
                   "description": "The name of the private subnet."
               }
           },
           "publicSubnetName": {
               "defaultValue": "public-subnet",
               "type": "String",
               "metadata": {
                   "description": "The name of the public subnet."
               }
           },
           "vnetId": {
               "type": "String",
               "metadata": {
                   "description": "The virtual network Resource ID."
               }
           }
       },
       "variables": {
           "managedResourceGroupName": "[concat('databricks-rg-', parameters('workspaceName'), '-', uniqueString(parameters('workspaceName'), resourceGroup().id))]",
           "managedResourceGroupId": "[subscriptionResourceId('Microsoft.Resources/resourceGroups', variables('managedResourceGroupName'))]"
        },
        "resources": [
           {
               "type": "Microsoft.Databricks/workspaces",
               "apiVersion": "[parameters('apiVersion')]",
               "name": "[parameters('workspaceName')]",
               "location": "[parameters('location')]",
               "sku": {
                   "name": "[parameters('pricingTier')]"
               },
               "properties": {
                   "ManagedResourceGroupId": "[variables('managedResourceGroupId')]",
                   "publicNetworkAccess": "[parameters('publicNetworkAccess')]",
                   "requiredNsgRules": "[parameters('requiredNsgRules')]",
                   "parameters": {
                       "enableNoPublicIp": {
                           "value": "[parameters('enableNoPublicIp')]"
                       },
                       "customVirtualNetworkId": {
                           "value": "[parameters('vnetId')]"
                       },
                       "customPublicSubnetName": {
                           "value": "[parameters('publicSubnetName')]"
                       },
                       "customPrivateSubnetName": {
                           "value": "[parameters('privateSubnetName')]"
                       }
                   }
               }
           }
       ]
    }
    
    1. Azure portal の [カスタム デプロイ] ページに移動します。

    2. [エディターで独自のテンプレートをビルド] をクリックします。

    3. コピーしたテンプレートについて JSON に貼り付けます。

    4. [保存] をクリックします。

    5. Private Link を有効にするには、ユース ケースに従って publicNetworkAccess パラメーターと requiredNsgRules パラメーターを設定します。

      Private Link を無効にするには、publicNetworkAccesstrue に設定し、requiredNsgRulesAllRules に設定します。

    6. その他のフィールドについては、サブスクリプション、リージョン、ワークスペース名、サブネット名、既存の VNet のリソース ID など、ワークスペースの作成に使用したのと同じパラメーターを使用します。

      重要

      このコマンドが新しいワークスペースを作成するのではなく既存のワークスペースを更新するために、リソース グループ名、ワークスペース名、サブネット名が既存のワークスペースと同じである必要があります。

    7. [Review + Create](レビュー + 作成) をクリックします。

    8. 検証の問題がない場合は、[作成] をクリックします。

    ネットワークの更新が完了するまでに 15 分以上かかる場合があります。

Terraform を使用して更新を適用する

Terraform で作成されたワークスペースの場合は、Private Link を使用するようにワークスペースを更新できます。

重要

terraform-provider-azurerm バージョン 3.41.0 以降を使用する必要があるため、必要に応じて Terraform プロバイダーのバージョンをアップグレードしてください。 以前のバージョンでは、これらの設定のいずれかを変更すると、ワークスペースを再作成しようとします。

大まかな手順は次のとおりです。

  1. 次のワークスペースの設定を変更します。

    • public_network_access_enabled: true (有効) または false (無効) に設定します
    • network_security_group_rules_required: AllRules または NoAzureDatabricksRules に設定します。

    ネットワークの更新が完了するまでに 15 分以上かかる場合があります。

  2. プライベート エンドポイントを作成します。

Private Link を有効にしてプライベート エンドポイントを作成する方法の詳細なガイドについては、以下を参照してください。

ネットワークの更新が完了するまでに 15 分以上かかる場合があります。

手順 5: ユーザー SSO 認証とバックエンド接続をテストする

次の方法の詳細については、メインのデプロイ ページに従ってください。

  • ワークスペースへのユーザー SSO 認証をテストする
  • バックエンド Private Link 接続をテストする (バックエンド接続に必要)

手順 6: 更新を検証する

  1. Azure portal で、Azure Databricks サービス インスタンスに移動します。
  2. 左側のナビゲーションで、[設定][ネットワーク] をクリックします。
  3. [公衆ネットワーク アクセスを許可する] の値が、設定した値と一致することを確認します。
  4. [必須の NSG ルール] の値が、設定した値と一致することを確認します。

障害復旧

ワークスペースの更新が失敗した場合、ワークスペースは失敗状態としてマークされる可能性があります。つまり、ワークスペースではコンピューティング操作を実行できません。 失敗したワークスペースをアクティブ状態に戻すには、更新操作のステータス メッセージの手順を確認します。 問題を解決したら、失敗したワークスペースで更新をやり直します。 更新が正常に完了するまで、手順を繰り返します。 質問がある場合は、Azure Databricks アカウント チームにお問い合わせください。