啟用 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 連線 API。 JDBC/ODBC 和 Power BI 整合也會使用前端連線。 傳輸 VNet 與工作區 Azure Databricks 控制平面之間前端 Private Link 連線的網路流量會周遊 Microsoft 骨幹網路。
  • 後端 Private Link,也稱為控制平面的計算平面:客戶管理的 VNet 中的 Databricks 運行時間叢集(計算平面)會聯機到 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 技術,可提供從 Azure VNet 和內部部署網路到 Azure 服務的私人連線,而不會將流量公開至公用網路。
Azure Private Link 服務 可以是 Private Link 連線目的地的服務。 每個 Azure Databricks 控制平面實例都會發佈 Azure Private Link 服務。
Azure 私人端點 Azure 私人端點可啟用 VNet 與 Private Link 服務之間的私人連線。 針對前端和後端連線,Azure 私人端點的目標為 Azure Databricks 控制平面。

如需私人端點的一般資訊,請參閱 Microsoft 文章 什麼是私人端點?

選擇標準或簡化的部署

Azure Databricks 支援的 Private Link 部署有兩種類型,您必須選擇一種:

  • 標準部署(建議):為了提升安全性,Databricks 建議您針對前端連線使用個別的私人端點,從個別 傳輸 VNet。 您可以實作前端和後端 Private Link 連線,或只實作後端連線。 使用個別的 VNet 來封裝使用者存取權,與您在傳統計算平面中用於計算資源的 VNet 分開。 為後端和前端存取建立個別的 Private Link 端點。 依照啟用 Azure Private Link 作為標準部署中的指示操作。
  • 簡化部署:某些組織因各種網路原則原因而無法使用標準部署,例如不允許多個私人端點或拒絕個別傳輸 VNet。 您也可以使用 Private Link 簡化的部署。 沒有個別的 VNet 會將使用者存取與傳統計算平面中用於計算資源的 VNet 分開。 相反地, 計算平面 VNet 中的傳輸子網 會用於使用者存取。 只有單一 Private Link 端點。 一般而言,已設定前端和後端連線。 您可以選擇性地只設定後端連線。 您無法選擇只使用此部署類型的前端連線。 依照啟用 Azure Private Link 中的 指示,作為簡化的部署

需求

Azure 訂用帳戶

您的 Azure Databricks 工作區必須位於 進階版 或企業層

Azure Databricks 工作區網路架構

  • 您的 Azure Databricks 工作區必須使用 VNet 插入 來新增任何 Private Link 連線(甚至是僅限前端連線)。
  • 如果您實作後端 Private Link 連線,您的 Azure Databricks 工作區必須使用安全的叢集連線能力(SCC/無公用 IP/NPIP)。
  • 您需要符合 VNet 插入需求的 VNet。
    • 如主要 VNet 插入一文所述,您必須定義兩個子網(在 UI 中稱為公用子網和私人子網)。 您用於 Azure Databricks 的 VNet 和子網 IP 範圍會定義一次可以使用的叢集節點數目上限。 請仔細選擇這些值。
    • 若要實作前端 Private Link、後端 Private Link 或兩者,您的工作區 VNet 需要包含 Private Link 端點及其 IP 位址範圍的第三個子網,不得與其他工作區子網的範圍重疊。 本文將這個第三個子網稱為私人端點子網。 範例和螢幕快照假設子網名稱 private-link。 這可以和 CIDR 範圍 /27一樣小。 請勿為包含私人端點的子網定義任何 NSG 規則。
    • 如果您使用 UI 來建立物件,您必須在建立 Azure Databricks 工作區之前手動建立網路和子網。 如果您想要使用範本,Azure Databricks 提供的範本會為您建立 VNet 和適當的子網,包括兩個一般子網,以及另一個用於私人端點。
  • 如果您使用或計劃使用 VNet 周圍的網路安全組或防火牆來控制輸出,則必須允許私人端點子網上的埠 443、6666、3306 和 8443-8451,以 用於連線到 Azure Databricks 控制平面的輸出 ,包括 安全叢集聯機 轉寄。 如果您已在私人端點上啟用網路安全組原則,您也需要允許埠 443、6666 和 8443-8451 輸入部署私人端點之子網上的網路安全組。

前端連線網路架構

只有前端 Private Link,使用者才能從內部部署網路存取工作區,您必須從該網路將私人連線新增至 Azure 網路。 在設定 Private Link 之前新增此連線。 詳細數據會根據您選擇 Private Link 標準部署或簡化的部署而有所不同。

  • 針對標準部署,您會建立或使用現有的傳輸 VNet,有時稱為防禦 VNet中樞 VNet。 必須使用 Expressroute 或 VPN 網關聯機,才能從內部部署使用者環境連線到此 VNet。 針對前端 Private Link,Databricks 建議為控制平面的連線建立個別 VNet,而不是共用工作區 VNet。 請注意,傳輸 VNet 及其子網可以位於與您工作區 VNet 及其子網相同的區域、區域和資源群組中,但不需要相符。 為個別傳輸 VNet 建立資源群組,並針對該私人端點使用不同的私人 DNS 區域。 如果您使用兩個不同的私人端點,則無法共用 DNS 區域。
  • 針對簡化的 部署,您會在工作區 VNet 中建立傳輸子網。 在此部署中,傳輸子網沒有個別的私人端點。 工作區 VNet 中的傳輸子網會針對後端和前端連線使用單一私人端點。

Azure 用戶權力

身為 Azure 使用者,您必須具有足夠讀取/寫入許可權,才能:

  • 布建新的 Azure Databricks 工作區。
  • 在工作區 VNet 中建立 Azure Private Link 端點,以及傳輸 VNet 的前端使用方式。

如果為傳輸 VNet 建立私人端點的用戶沒有工作區的擁有者/參與者許可權,則具有工作區擁有者/參與者許可權的個別用戶必須手動核准私人端點建立要求。

您可以在現有的工作區上啟用 Private Link。 升級需要工作區使用 VNet 插入安全叢集連線和進階定價層。 您可以在更新期間,更新為安全叢集連線和進階定價層。

您可以使用 ARM 範本或 azurerm Terraform 提供者 3.41.0 版+。 您可以使用 Azure 入口網站 來套用自定義範本,並在 UI 中修改 參數。 不過,Azure Databricks 工作區實例本身沒有此升級的 Azure 入口網站使用者介面支援。

如果升級發生問題,您可以重複 工作區更新步驟 ,但改為將字段設定為停用 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存取,請建立具有子資源 databricks_ui_api 的私人端點,以支援來自傳輸 VNet 的 SSO。 如果您有一個以上的傳輸 VNet 可存取前端存取工作區,請使用子資源 databricks_ui_api建立多個私人端點。

步驟 4:套用工作區更新

您需要套用工作區更新,而不是建立新的工作區。

您必須將 publicNetworkAccessrequiredNsgRules 參數更新為您在上一個步驟中選擇的值。

使用下列其中一種方法:

  • 使用 Azure 入口網站 UI (不含樣本)

  • 使用 Azure 入口網站 套用更新的 ARM 範本

  • 使用 Terraform 套用更新

    使用 Azure 入口網站 UI (不含樣本)

    1. 移至 Azure 入口網站 中的 Azure Databricks Service 實例。

    2. 在左側導覽 設定,按兩下 [網络]。

    3. 根據您的使用案例,將 [允許公用網络存取] 和 [必要的 NSG 規則] 設定為適當的值。 請參閱 步驟 1:閱讀此頁面上的需求和檔。

      注意

      若要啟用 Azure Private Link,工作區必須啟用安全的叢集連線能力(有時稱為無公用 IP)。 如果尚未啟用,請在 Private Link 更新的同時,選擇將 [沒有公用 IP] 設定[True] 來啟用安全的叢集連線。 不過,Azure Databricks 建議在啟用 Private Link 之前,先以個別步驟啟用安全的叢集連線,以便您可以個別驗證成功。

    4. 按一下 [檔案] 。

    網路更新可能需要15分鐘才能完成。

使用 Azure 入口網站 套用更新的 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 入口網站

    2. 按一下 [Build your own template in the editor] \(在編輯器中建置您自己的範本\)

    3. 貼上您複製之範本的 JSON。

    4. 按一下 [檔案] 。

    5. 若要啟用 Private Link,請根據您的使用案例來設定 publicNetworkAccessrequiredNsgRules 參數。

      若要停用 Private Link,請將 設定 publicNetworkAccesstrue ,並將 設定 requiredNsgRulesAllRules

    6. 對於其他欄位,請使用您用來建立工作區的相同參數,例如訂用帳戶、區域、工作區名稱、子網名稱、現有 VNet 的資源識別碼。

      重要

      資源組名、工作區名稱和子網名稱必須與現有的工作區相同,因此此命令會更新現有的工作區,而不是建立新的工作區。

    7. 按一下 [檢閱 + 建立]。

    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:設定為 AllRulesNoAzureDatabricksRules

    網路更新可能需要15分鐘才能完成。

  2. 建立您的私人端點。

如需如何啟用 Private Link 並建立私人端點的詳細指南:

網路更新可能需要15分鐘才能完成。

步驟 5:測試使用者 SSO 驗證和後端連線能力

請遵循您的主要部署頁面,以取得如何:

  • 對工作區測試使用者 SSO 驗證。
  • 測試後端 Private Link 連線 (後端連線的必要專案)

步驟 6:驗證更新

  1. 移至 Azure 入口網站 中的 Azure Databricks Service 實例。
  2. 在 設定 下方的左側導覽中,按兩下 [網络]。
  3. 確認 [允許公用網络存取] 的值符合您設定的值。
  4. 確認 [必要 NSG 規則] 的值符合您設定的值。

失敗復原

如果工作區更新失敗,工作區可能會標示為 失敗 狀態,這表示工作區無法執行計算作業。 若要將失敗的工作區還原回 作用 中狀態,請檢閱更新作業狀態消息中的指示。 修正任何問題之後,請在失敗的工作區上重做更新。 重複這些步驟,直到更新成功完成為止。 如果您有任何問題,請連絡 Azure Databricks 帳戶小組。