附註
Azure AI 搜尋服務 可透過 Azure 入口網站、REST API 及 Azure SDK 取得。 它同時也是 Foundry IQ 的基礎,這是一個管理式知識層,能將企業內容轉化為可重複使用、權限感知的知識庫,供 Microsoft Foundry 入口網站中的代理使用。
本文說明如何利用 Azure App 服務 內建的認證功能,也稱為「Easy Auth」,設定索引器連接 Azure Function 應用程式。Azure Function 應用程式是託管自訂 Web API 的絕佳解決方案,Azure AI 搜尋服務 服務可以用來豐富索引器執行時擷取的內容,或者如果你使用自訂嵌入模型來 整合向量化,則在搜尋查詢中將內容向量化。
你可以使用系統指派或使用者指派的搜尋服務管理身份來驗證 Azure Function 應用程式。 此方法需要設定 Microsoft Entra ID 應用程式註冊,作為 Azure Function 應用程式的認證提供者,本文將詳細說明。
先決條件
- 為你的搜尋服務建立 一個管理身份 。
將 Microsoft Entra ID 應用程式設定為認證提供者
若要使用 Microsoft Entra ID 作為 Azure 函式應用程式的驗證提供者,則必須建立應用程式註冊。 有兩個選項:透過 Azure Function 應用程式自動建立,或使用現有應用程式。 想了解更多這些步驟,請參閱 App Service 文件。
無論選擇哪種方式,請確保應用程式註冊依照以下步驟設定,以確保與 Azure AI 搜尋服務 相容。
確定應用程式註冊已設定應用程式識別碼 URI
應用程式註冊應使用應用程式識別碼 URI 來進行設定,此 URI 可用作 Azure 函式應用程式和 Azure AI 搜尋服務的權杖目標對象。 以格式 api://<applicationId> 進行設定。 這可以透過瀏覽至應用程式註冊的 [概觀] 區段並設定 [應用程式識別碼 URI] 欄位來完成。
設定受支援的帳戶類型以進行驗證
到應用程式註冊的 認證 區塊,設定 支援的帳號類型 ,讓只有與應用程式註冊相同組織目錄中的帳號才能使用該帳號進行驗證。
(選用) 定用戶端祕密
App Service 建議在認證提供者應用程式中使用客戶端秘密。 只要設定了委派權限,驗證仍可在沒有用戶端祕密的情況下運作。 若要設定用戶端祕密,請瀏覽至應用程式註冊的 [憑證和祕密] 區段,並依本文中的說明新增一個新的用戶端祕密。
新增範圍以委派權限
瀏覽至 [公開 API] 區段,並設定應用程式註冊,使其具有將系統管理員和使用者權限委派給它的範圍,以確保它與索引器的驗證流程相容。
設定委派的權限範圍之後,您應該會在應用程式註冊的 [API 權限] 區段中看到 Microsoft.Graph 上的 User.Read API 已設定。
在 Azure Function 應用程式中配置 Microsoft Entra ID 認證提供者
客戶端應用程式依先前規範註冊後,可以透過 App Service 文件設定 Azure Function 應用程式的 Microsoft Entra ID 認證。 瀏覽至 Azure 函式應用程式的 [驗證] 區段,以設定驗證詳細資料。
確定已設定下列設定,以確保 Azure AI 搜尋服務可以成功向 Azure 函式應用程式進行驗證。
設定驗證設定值
- 確保應用程式服務驗證為已啟用
- 將 Azure 函式應用程式的存取限制為需要驗證
- 針對未經驗證的要求,建議選擇 HTTP 401: 未授權
下列螢幕擷取畫面會醒目提示了範例 Azure 函式應用程式的這些特定設定。
新增 Microsoft Entra ID 驗證提供者
- 新增 Microsoft Entra ID 作為 Azure 函式應用程式的驗證提供者。
- 建立新的應用程式註冊,或選擇先前設定的應用程式註冊。 確保它依照本文件前一節的指引進行設定。
- 確定在 [允許的權杖對象] 區段中,已指定應用程式註冊的應用程式識別碼 URI。 它應該採用
api://<applicationId>格式,並且符合使用先前建立的應用程式註冊所設定的格式。 - 如果你願意,也可以設定其他檢查,專門限制索引器的存取權限。
設定其他檢查
- 確保特定 Azure AI 搜尋服務身分識別的物件 (主體) 識別碼被指定為身分識別需求,方法是勾選 [允許來自特定身分識別的要求] 選項,並在身分識別區段中輸入物件 (主體) 識別碼。
- 在 用戶端應用程式需求中,選擇 「允許特定用戶端應用程式的請求」。 您必須查閱 Azure AI 搜尋服務身分識別的用戶端識別碼。 若要這樣做,請複製上一個步驟中的物件 (主體) 識別碼,並在您的 Microsoft Entra ID 租用戶中查閱。 應該有一個相符的企業應用程式,其概觀頁面會列出應用程式識別碼,這是需要被指定為用戶端應用程式需求的 GUID。
附註
此步驟是 Azure 函式應用程式上最重要的設定,若執行錯誤可能導致索引器被禁止存取 Azure 函式應用程式。 確定您正確執行身分識別企業應用程式詳細資料的查閱,並在正確的位置指定應用程式識別碼和物件 (主體) 識別碼。
- 對於租用戶需求,請選擇與您的安全性態勢相符的任何選項。 欲了解更多資訊,請參閱 App Service 文件。
建立與 Azure Function app 的連接
根據是否需要在自訂 Web API 技能或自訂 Web API 向量化工具中建立與 Azure 函式應用程式的連線,JSON 定義略有不同。 在這兩種情況下,請確定您為 Azure 函式應用程式指定正確的 URI,並將 authResourceId 設定為與針對驗證提供者所設定的 [允許的權杖對象] 相同的值。
根據你選擇使用系統指定的身份還是使用者指定的身份連接,所需的屬性會略有不同。
使用系統指派的身分識別
這裡有一個範例,可以呼叫一個以範例 Azure Function 應用程式命名test的函式,該函式允許搜尋服務的系統指派身份透過「Easy Authorization」進行認證。
"uri": "https://contoso-function-app.azurewebsites.net/api/test?",
"authResourceId": "api://00000000-0000-0000-0000-000000000000"
使用使用者指派的身分識別
這裡有一個範例,可以呼叫同一個函式,允許特定使用者指派的身份透過「Easy Authorization」進行認證。 你需要在組態的 identity 屬性中,指定要使用的特定使用者指派身分識別之資源識別碼。
"uri": "https://contoso-function-app.azurewebsites.net/api/test?",
"authResourceId": "api://00000000-0000-0000-0000-000000000000",
"identity" : {
"@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
"userAssignedIdentity": "/subscriptions/[subscription-id]/resourcegroups/[rg-name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[my-user-managed-identity-name]"
}
附註
在你在自訂 Web API 技能或向量工具定義中指定使用者指派身份之前,先將該身份指派到 Azure AI 搜尋服務 服務。
執行索引器/向量化工具來驗證權限
對於自訂 Web API 技能,權限會在索引器執行階段期間進行驗證。 對於向量化器來說,當使用自訂網頁 API 向量化器發出向量查詢時,這些向量會被驗證。 若要排除驗證的任何特定問題,您可以在 Azure 函式應用程式上停用驗證提供者,並確保來自索引器/向量化工具的呼叫成功,藉此進行測試。
- 如果驗證問題仍然存在,請確保在 Azure 函式應用程式的驗證提供者中指定了正確的身分識別資訊,即 Azure AI 搜尋服務的身分識別的應用程式識別碼和物件 (主體) 識別碼。