透過共用私人連結進行輸出連線

本文說明如何設定 Azure AI 搜尋服務對於 Azure PaaS 資源的私人輸出呼叫,並在虛擬網路中執行。

設定私人連線以允許搜尋服務連線至虛擬網路 IP 位址,而非對網際網路開放的連接埠。 針對此連線建立的物件稱為「共用私人連結」。 在該連線上,搜尋服務會使用共用私人連結,在網路界限中內部存取 Azure PaaS 資源。

共用私人連結是依使用量收費的進階功能。 設定共用私人連結,私人端點的費用會附加至您的 Azure 發票。 當您使用共用私人連結時,輸入和輸出存取的資料傳輸速率也會收費。 如需詳細資料,請參閱 Azure Private Link 定價

注意

如果要設定針對 SQL 受控執行個體的私人索引子連線,請改為參閱此文章

Azure AI 搜尋服務會在下列情況時輸出呼叫其他 Azure PaaS 資源:

  • 索引器或搜尋引擎會連線至 Azure OpenAI 以進行文字到向量內嵌
  • 索引器連線到支持的數據源
  • 索引器(技能集)連線至快取擴充、偵錯會話擷取或寫入知識存放區 Azure 儲存體
  • 對 Azure Key Vault 的加密金鑰要求
  • 對 Azure Functions 或類似資源的技能要求

共用的私人連結僅適用於 Azure 對 Azure 連線。 如果您要連線到 OpenAI 或其他外部模型,連線必須透過公用因特網。

共用私人連結適用於透過在 Azure 虛擬網路中執行之 Azure 資源或用戶端的私人端點存取的作業和數據

共用私人連結的特點如下:

  • 使用 Azure AI 搜尋服務工具、API 或 SDK 建立
  • 由 Azure PaaS 資源擁有者核准
  • 由 Azure AI 搜尋服務在針對特定 Azure 資源的私人連線內部使用

只有您的搜尋服務可使用其建立的私人連結,且每個資源和子資源組合只能在您的服務上建立一個共用私人連結。

設定私人連結後,每當搜尋服務連線到該 PaaS 資源時,就會自動使用該連結。 雖然用於連線的裝置必須使用 Azure PaaS 資源防火牆中的授權 IP 進行連線,但您不需要修改連接字串或變更發出要求所使用的用戶端。

搭配使用 Azure Private Link 和 Azure AI 搜尋服務的狀況有兩種。

本文涵蓋第一個案例。

雖然這兩個狀況都依賴於 Azure Private Link,但兩者互不影響。 您可以建立共用私人連結,而不需要針對私人端點設定您自己的搜尋服務。

限制

當您根據自身案例評估共用私人連結時,請記住以下限制。

  • 共用私人連結中使用的數種資源類型處於預覽狀態。 如果要連線至預覽版資源 (適用於 MySQL 的 Azure 資料庫、Azure Functions 或 Azure SQL 受控執行個體),請使用管理 REST API 的預覽版本來建立共用的私人連結。 這些版本包括 2020-08-01-preview2021-04-01-preview2024-03-01-preview

  • 索引子的執行作業必須使用您搜尋服務專屬的私人執行環境。 多租用戶環境並不支援私人端點連線。 本文已涵蓋此需求的組態設定。

必要條件

  • 基本層或更高層的 Azure AI 搜尋服務。 如果要使用 AI 擴充和技能,則該層級必須為標準 2 (S2) 以上。 如需詳細資訊,請參閱服務限制

  • 下列支援的資源類型清單的 Azure PaaS 資源,設定為在虛擬網路中執行。

  • Azure AI 搜尋服務和資料來源的權限:

    • 在 Azure PaaS 資源上,您必須擁有核准私人端點連線的權限。 例如,如果您使用 Azure 儲存體帳戶作為資料來源 (例如 Blob 容器、Azure 檔案儲存體共用、Azure 資料表),則需要 Microsoft.Storage/storageAccounts/privateEndpointConnectionsApproval/action

    • 在搜尋服務上,您必須具有共用私人連結資源和讀取作業狀態的讀取和寫入權限:

      • Microsoft.Search/searchServices/sharedPrivateLinkResources/write
      • Microsoft.Search/searchServices/sharedPrivateLinkResources/read
      • Microsoft.Search/searchServices/sharedPrivateLinkResources/operationStatuses/read

支援的資源類型

您可以建立下列資源的共用私人連結。

資源類型 子資源 (或群組識別碼)
Microsoft.Storage/storageAccounts 1 blob、 、 tabledfsfile
Microsoft.DocumentDB/databaseAccounts 2 Sql
Microsoft.Sql/servers sqlServer
Microsoft.KeyVault/vaults vault
Microsoft.DBforMySQL/servers (預覽) mysqlServer
Microsoft.Web/sites (預覽) 3 sites
Microsoft.Sql/managedInstances (預覽) 4 managedInstance
Microsoft.CognitiveServices/accounts (預覽) 5 openai_account

1 如果 Azure 儲存體和 Azure AI 搜尋服務位於相同區域,則會透過 Microsoft 骨幹網路建立與儲存體的連線,因此,這個組態下不需要共用私人連結。 不過,如果您已經為 Azure 儲存體設定私人端點,則應該一併設定共用的私人連結,否則儲存體端會拒絕連線。 此外,如果您在搜尋的各種案例中使用多個儲存體格式,請務必為每個子資源建立個別的共用私人連結。

2 與 Azure Cosmos DB for NoSQL 的索引子連線會使用 Microsoft.DocumentDB/databaseAccounts 資源類型。 提供者名稱和群組識別碼區分大小寫。

3 App Service 和 Azure Functions 會使用 Microsoft.Web/sites 資源類型。 以 Azure AI 搜尋服務而言,較可能使用 Azure Function。 Azure Function 通常用於裝載自訂技能的邏輯。 Azure Function 具有「取用」、「進階」和「專用」App Service 主控方案。 目前不支援 App Service 環境 (ASE)Azure Kubernetes Service (AKS)

4 如需指示,請參閱建立 SQL 受控執行個體的共用私人連結

5 實作整合向量化時,與 Azure OpenAI 的索引子連線會使用 Microsoft.CognitiveServices/accounts 資源類型。

使用 Azure 入口網站、管理 REST API、Azure CLI 或 Azure PowerShell 來建立共用的私人連結。

以下提供一些祕訣:

  • 為私人連結提供有意義的名稱。 在 Azure PaaS 資源中,共用的私人連結會與其他私人端點一起顯示。 「用於搜尋的共用私人連結」這類名稱可協助您識別其功能。

當您完成本節中的步驟時,將會擁有一個以擱置狀態佈建的共用私人連結。 建立連結需要幾分鐘的時間。 建立之後,資源擁有者必須先核准要求,連結才能運作。

  1. 登入 Azure 入口網站,然後尋找您的搜尋服務

  2. 在左側瀏覽窗格的[設定] 底下選取 [網路]

  3. 在 [共用私人存取] 頁面籤上選取 [+ 新增共用私人存取]

  4. 選取 [連線至我目錄中的 Azure 資源] 或 [依資源識別碼連線至 Azure 資源]

  5. 如果您選取第一個選項 (建議),則入口網站會協助您挑選適當的 Azure 資源並填入其他屬性,例如資源的群組識別碼和資源類型。

    [新增共用私人存取] 頁面的螢幕快照,其中顯示建立共用私人鏈接資源的引導式體驗。

  6. 如果您選取第二個選項,請手動輸入 Azure 資源識別碼,並從本文開頭的清單中選擇適當的群組識別碼。

    [新增共用私人存取] 頁面的螢幕快照,其中顯示建立共用私人鏈接資源的手動體驗。

  7. 確認佈建狀態為「正在更新」。

    [新增共用私人存取] 頁面的螢幕快照,其中顯示正在進行中的資源建立。

  8. 成功建立資源之後,資源佈建狀態會變更為「成功」。

    [新增共用私人存取] 頁面的螢幕快照,其中顯示資源建立已完成。

成功時會傳回 202 Accepted 的回應。 輸出私人端點的建立程序屬於需長時間執行 (非同步) 的作業。 其中涉及到下列資源的部署:

  • 私人端點是以狀態為 "Pending" 的私人 IP 位址進行配置。 若為搜尋服務專屬的私人索引子,私人 IP 位址是從配置給執行環境虛擬網路的位址空間取得。 在核准私人端點時,從 Azure AI 搜尋服務連接到 Azure 資源的所有通訊皆源自私人 IP 位址和安全的私人連結通道。

  • 資源類型的私人 DNS 區域,以群組識別碼為依據。 部署此資源,您便可確針對私人資源進行的所有 DNS 查閱都利用與私人端點相關聯的 IP 位址。

2 - 核准私人端點連線

在 Azure PaaS 端授與私人端點連線的核准。 需要資源擁有者明確核准。 下列步驟涵蓋使用 Azure 入口網站 核准,但以下是從 Azure PaaS 端以程式設計方式核准連線的一些連結:

使用 Azure 入口網站,執行下列步驟:

  1. 開啟 Azure PaaS 資源的 [ 網络 ] 頁面。文本

  2. 尋找列出私人端點連線的區段。 下列範例適用於儲存體帳戶。

    Azure 入口網站 的螢幕快照,其中顯示 [私人端點連線] 窗格。

  3. 選取連線,然後選取 [核准]。 入口網站的狀態可能需要幾分鐘的時間才會更新。

    Azure 入口網站 的螢幕快照,其中顯示 [私人端點連線] 窗格上的 [已核准] 狀態。

核准私人端點之後,Azure AI 搜尋服務會在為其所建的 DNS 區域中建立必要的 DNS 區域對應。

雖然 [網路] 頁面上的私人端點連結為作用中,但不會解析。

Azure PaaS 網路頁面中私人端點連結的螢幕快照。

選取連結會產生錯誤。 顯示狀態訊息 "The access token is from the wrong issuer"must match the tenant associated with this subscription 是因為後端私人端點資源是由 Microsoft 在 Microsoft 管理的租用戶中佈建,而連結的資源 (Azure AI 搜尋服務) 則位於您的租用戶中。 依照設計,您無法透過選取私人端點連線連結來存取私人端點資源。

請遵循下一節中的指示以檢查共用私人連結的狀態。

在 Azure AI 搜尋服務端,您可以重新瀏覽搜尋服務 [網路] 頁面的 [共用私人存取] 頁面,以確認要求核准。 連線狀態應該為已核准。

Azure 入口網站 的螢幕快照,其中顯示已核准的共用私人鏈接資源。

或者,您也可以使用 GET 共用私人連結 API來取得連線狀態。

az rest --method get --uri https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.Search/searchServices/contoso-search/sharedPrivateLinkResources/blob-pe?api-version=2023-11-01

此 API 會傳回 JSON,JSON 的連線狀態會顯示在 "properties" 區段底下的 "status"。 下面是儲存體帳戶的範例。

{
      "name": "blob-pe",
      "properties": {
        "privateLinkResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.Storage/storageAccounts/contoso-storage",
        "groupId": "blob",
        "requestMessage": "please approve",
        "status": "Approved",
        "resourceRegion": null,
        "provisioningState": "Succeeded"
      }
}

如果資源的佈建狀態 (properties.provisioningState) 為 "Succeeded" (已成功),而連線狀態 (properties.status) 為 "Approved" (已核准),則表示共用私人連結資源正常運作,且可將索引子設定為透過私人端點通訊。

4 - 設定索引子在私人環境中執行

索引子執行作業會在搜尋服務專屬的私人環境中執行,或是內部用來卸載多個客戶的昂貴技能處理作業的多租用戶環境中執行。

執行環境是公開透明的,但當您開始制訂防火牆規則或建立私人連線之後,便必須將索引子執行作業納入考量。 針對私人連線,請將索引子執行設定為一律在私人環境中執行。

此步驟會示範如何使用 REST API 將索引子設定為在私人環境中執行。 您也可以在入口網站中使用 JSON 編輯器來設定執行環境。

注意

您可以在私人端點連線獲核准之前先執行此步驟。 不過在私人端點連線顯示為已核准之前,任何嘗試與安全資源 (例如儲存體帳戶) 進行通訊的現有索引子,最終都會處於暫時性失敗的狀態,且無法建立新的索引子。

  1. 請依一般做法建立資料來源定義、索引和技能 (如有使用)。 使用共用的私人端點時,在這些定義中所有屬性都相同。

  2. 建立索引子,該索引子需指向您在上一個步驟中建立的資料來源、索引和技能。 此外,請將索引子 executionEnvironment 設定屬性設為 private,強制索引子在私人執行環境中執行。

    {
        "name": "indexer",
        "dataSourceName": "blob-datasource",
        "targetIndexName": "index",
        "parameters": {
            "configuration": {
                "executionEnvironment": "private"
            }
        },
        "fieldMappings": []
    }
    

成功建立索引子之後,索引子應會透過私人端點連線至 Azure 資源。 您可以使用索引子狀態 API 來監視索引子的狀態。

注意

如果已經有現成的索引子,您可以將 executionEnvironment 設為 private 或使用入口網站中的 JSON 編輯器,以透過 PUT API 進行更新。

  1. 如果您尚未這麼做,請確認您的 Azure PaaS 資源是否會拒絕來自公用網際網路的連線。 如果可接受連線,請檢閱 Azure PaaS 資源 [網路] 頁面中的 DNS 設定。

  2. 選擇可叫用輸出要求案例的工具,例如私人端點的索引子連線。 簡單的選擇是使用匯 入數據 精靈,但您也可以嘗試 REST 用戶端和 REST API 以取得更精確的精確度。 假設您的搜尋服務並未針對私人連線進行設定,則搜尋的 REST 用戶端連線可以透過公用因特網進行。

  3. 將連接字串設定為私人 Azure PaaS 資源。 共用私人連結的連接字串格式不會變更。 搜尋服務會在內部叫用共用的私人連結。

    對於索引子工作負載,連接字串位於資料來源定義中。 資料來源的範例可能如下所示:

     {
       "name": "my-blob-ds",
       "type": "azureblob",
       "subtype": null,
       "credentials": {
         "connectionString": "DefaultEndpointsProtocol=https;AccountName=<YOUR-STORAGE-ACCOUNT>;AccountKey=..."
       }
    
  4. 針對索引子工作負載,請記得在索引子定義中設定執行環境。 索引子定義的範例可能如下所示:

    "name": "indexer",
    "dataSourceName": "my-blob-ds",
    "targetIndexName": "my-index",
    "parameters": {
       "configuration": {
           "executionEnvironment": "private"
           }
       },
    "fieldMappings": []
    }
    
  5. 執行索引子。 如果索引子執行成功且已填入搜尋索引,共用的私人連結就會正常運作。

疑難排解

  • 如果索引子建立失敗,並顯示「資料來源認證無效」,在為連線進行偵錯之前,請先檢查共用私人連結的核准狀態。 如果狀態為 Approved,請檢查 properties.provisioningState 屬性。 如果是 Incomplete,則可能會有基礎相依性的問題。 在此情況下,請重新發出 PUT 要求以重新建立共用的私人連結。 您可能也會需要重複進行核准步驟。

  • 如果索引子持續或間歇性失敗,請檢查索引子上的 executionEnvironment 屬性。 值應該設定為 private。 如果您未設定此屬性,而且索引子以前曾成功執行,這是由於搜尋服務自主使用了私人環境。 如果系統處於負載情況,則搜尋服務會將處理作業移出標準環境。

  • 如果您在建立共用的私人連結時收到錯誤訊息,請檢查服務限制,確定尚未超過您階層的配額。

下一步

深入瞭解私人端點和其他安全連線方法: