共用方式為


啟用安全的叢集連線能力

本文說明如何使用 Azure Databricks 工作區的安全叢集連線。 安全叢集聯機也稱為無公用IP(NPIP)。 無伺服器運算資源不使用安全叢集連線,但也沒有公用 IP 位址。

安全叢集聯機概觀

啟用安全叢集連線時,客戶虛擬網路沒有開啟的埠,傳統計算平面中的計算資源沒有公用IP位址。

  • 每個叢集在建立階段會建立與控制平面安全叢集連接中繼的連線。 叢集會使用埠 443 (HTTPS) 建立此連線,並使用與用於 Web 應用程式和 REST API 不同的 IP 位址。
  • 當控制平面執行叢集管理工作時,這些要求會透過這個通道傳送至叢集。

注意

傳統計算平面 VNet 與 Azure Databricks 控制平面之間的所有 Azure Databricks 網路流量都會經過 Microsoft網路骨幹,而不是公用因特網。 即使已停用安全叢集連線,也是如此。

您可以在新的工作區上啟用安全的叢集連線,或將它新增至已使用 VNet 插入的現有工作區。

在新工作區上啟用安全的叢集連線

當您使用 Azure 入口網站或 Azure Resource Manager (ARM) 範本建立工作區時,會自動啟用安全的叢集連線。

  • Azure 入口網站:當您布建工作區時,在 [ 網络 ] 索引標籤上, [部署具有安全叢集連線的 Azure Databricks 工作區] 預設 為 [ ]。

    如需使用 Azure 入口網站建立工作區的詳細指示,請參閱 使用入口網站建立 Azure Databricks 工作區

  • ARM 樣本: enableNoPublicIp 資源內的 Microsoft.Databricks/workspaces 參數預設會在 2024-05-01 版和更新版本中設定 true 為 。 enableNoPublicIp如果參數未明確包含在範本中,它的行為會如同設定為 true 一樣。 您可以在範本中將 enableNoPublicIp 設定為 false,以明確地覆寫此預設值。

    如需使用 ARM 範本建立工作區的詳細指示,請參閱 使用 ARM 範本部署工作區。 如需使用 VNet 插入式的 ARM 範本,請參閱在 Azure 虛擬網路中部署 Azure Databricks (VNet 插入式)。

將安全的叢集連線新增至現有的工作區

您可以使用 Azure 入口網站、ARM 範本或 azurerm Terraform 提供者 3.41.0 版+,在現有工作區上啟用安全的叢集連線。 升級需要工作區使用 VNet 插入

重要

如果您使用防火牆或其他網路組態來控制傳統計算平面的輸入或輸出,則在啟用安全叢集連線時,可能需要更新防火牆或網路安全性群組規則,變更才會生效。 例如,使用安全的叢集連線,會有額外的到控制平面的連出連線,而且不再使用來自控制平面的連入連線。

步驟 1:停止所有計算資源

停止所有傳統計算資源,例如叢集、集區或傳統 SQL 倉儲。 Databricks 建議將升級的時間規劃在停機時段。

步驟 2:更新工作區

您可以使用 Azure 入口網站、ARM 範本或 Terraform 來更新工作區。

使用 Azure 入口網站

  1. 在 Azure 入口網站中移至您的 Azure Databricks 工作區。
  2. 在左側導覽的 [設定] 底下,按兩下 [網络]。
  3. 在 [網络存取] 索引標籤中,將 [[使用安全叢集連線 部署 Azure Databricks 工作區 為 [啟用 ]。
  4. 按一下 [檔案] 。

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

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

使用 ARM 範本將 enableNoPublicIp 參數設定為 Truetrue)。

注意

如果您的受控資源群組具有自定義名稱,您必須據以修改範本。 如需詳細資訊,請連絡 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"
          }
        },
        "enableNoPublicIp": {
          "defaultValue": true,
          "type": "Bool"
        },
        "pricingTier": {
          "defaultValue": "premium",
          "allowedValues": ["premium", "standard", "trial"],
          "type": "String",
          "metadata": {
            "description": "The pricing tier of workspace."
          }
        },
        "publicNetworkAccess": {
          "type": "string",
          "defaultValue": "Enabled",
          "allowedValues": ["Enabled", "Disabled"],
          "metadata": {
            "description": "Indicates whether public network access is allowed to the workspace - possible values are Enabled or Disabled."
          }
        },
        "requiredNsgRules": {
          "type": "string",
          "defaultValue": "AllRules",
          "allowedValues": ["AllRules", "NoAzureDatabricksRules"],
          "metadata": {
            "description": "Indicates whether to retain or remove the AzureDatabricks outbound NSG rule - possible values are AllRules or NoAzureDatabricksRules."
          }
        }
      },
      "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')]"
              }
            }
          }
        }
      ]
    }
    
    1. 移至 [自定義部署] 頁面 Azure 入口網站

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

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

    4. 按一下 [檔案] 。

    5. 填入參數。

    6. 若要更新現有的工作區,請使用建立工作區時的相同參數,但enableNoPublicIp除外,您必須將其設定為true。 設定現有 VNet 的訂用帳戶、區域、工作區名稱、子網路名稱和資源識別碼。

      重要

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

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

    8. 如果沒有驗證問題,請按一下 [建立]

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

使用 Terraform 套用更新

對於使用 Terraform 建立的工作區,您可以更新工作區,而不需重新建立工作區。

重要

您必須使用 terraform-provider-azurerm 3.41.0 版或更新版本,因此請視需要升級您的 Terraform 提供者版本。 如果您變更這些設定,舊版會嘗試重新建立工作區。

變更下列工作區設定:

  • no_public_ip 區塊 custom_parameters 中的 可以從 false 變更為 true

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

步驟 3:驗證更新

工作區處於作用中狀態後,更新工作即完成。 確認已套用更新:

  1. 在網頁瀏覽器中開啟 Azure Databricks。

  2. 啟動其中一個工作區的叢集,並等候叢集完全啟動。

  3. 移至 Azure 入口網站 中的工作區實例。

  4. 按下欄位標籤 [受控資源群組] 旁的藍色標識碼。

  5. 在該群組中,尋找叢集的 VM,然後按兩下其中一個。

  6. 在 VM 設定的 [屬性] 內,尋找 [網络] 區域中的欄位。

  7. 確認 [公用 IP 位址] 欄位是空的。

    如果已填入,VM 就會有公用IP位址,這表示更新失敗。

升級至安全叢集連線的暫時復原

如果在部署期間發生問題,您可以將enableNoPublicIp設定為false,以暫時反轉該過程。 不過,僅支援將安全叢集連線停用作為暫時回退,然後再繼續升級。 如果這是暫時必要的,您可以遵循上述的指示進行升級,但將 enableNoPublicIp 設定為 false,而不是 true。

來自工作區子網的輸出

當您啟用安全叢集連線時,兩個工作區子網路都是專用子網路,因為叢集節點沒有公用 IP 位址。

網路匯出功能的實作細節會根據您使用的是預設(受控)VNet 還是透過 VNet 插入 提供自己的 VNet 來部署工作區而有所不同。

重要

當您使用安全叢集連線時,可能會產生額外的成本,因為輸出流量增加。 對於最安全的部署,Microsoft和 Databricks 強烈建議您啟用安全的叢集連線。

具有預設 (受控) VNet 的輸出

如果您使用安全叢集連線與 Azure Databricks 所建立的預設 VNet,Azure Databricks 會自動建立 NAT 閘道 ,以便將工作區子網的輸出流量傳送至 Azure 骨幹和公用網路。 NAT 閘道是建立在由 Azure Databricks 管理的受控資源群組中。 您無法修改此資源群組或在其中布建的任何資源。 此 NAT 閘道會產生額外的成本。

使用 VNet 插入的輸出

如果您在使用 VNet 插入的工作區上啟用安全的叢集連線,Databricks 建議您的工作區具有穩定的輸出公用 IP。 穩定的輸出公用IP位址很有用,因為您可以將它們新增至外部允許清單。 例如,若要使用穩定的連出IP位址從 Azure Databricks 連線到 Salesforce。

警告

Microsoft 宣布,在 2026 年 3 月 31 日之後,新的虛擬網路將預設為私有配置,無需出站網路存取。 這需要明確的輸出連線方法,才能連線到公用端點和 Microsoft 服務。 有關更多詳細信息,請參閱 此公告 。 此變更不會影響現有的工作區。 不過,在此日期之後部署的新 Azure Databricks 工作區將需要安全的輸出方法,例如 NAT 閘道,以確保適當的叢集功能。

若要為您的部署提供因特網連線,請使用 Azure NAT 閘道。 在兩個工作環境子網路上設定閘道,以確保所有出站流量都經由穩定的出口公用 IP 路由通過它。 這可為您的叢集提供一致的輸出網際網路連線,並可讓您修改組態以符合自訂輸出需求。 您可以使用 Azure 範本 或從 Azure 入口網站設定 NAT 閘道。

警告

請勿在 已啟用安全叢集連線的工作區中使用輸出負載平衡器 。 在生產系統中,輸出負載平衡器可能會導致耗盡埠的風險。

防火牆組態最佳實務

一律將 SCC 轉送端點提供的網域名稱 (FQDN) 列入允許清單,而不是個別 IP 位址。 這些網域背後的 IP 位址會因基礎設施更新而定期變更。

將特定 IP 位址列入允許清單的客戶可能會在基礎結構變更時遇到服務中斷。 如果您必須使用 IP 位址,您必須定期檢索我們最新的 IP 位址並更新您的防火牆設定。