教學課程:在 Azure AI 搜尋服務中為加密的 Blob 編製索引並擴充,以進行全文檢索搜尋

本教學課程說明如何使用 Azure AI 搜尋服務,為 Azure Blob 儲存體中先前使用客戶自控金鑰加密的文件編制索引。

一般而言,索引子無法從加密檔案擷取內容,因為其無權存取 Azure Key Vault 中的客戶自控加密金鑰。 不過,藉由利用 DecryptBlobFile 自訂技能,接著再利用文件擷取技能,您可以提供金鑰的受控存取權來解密檔案,然後從中擷取內容。 這可解鎖編製索引和擴充這些文件的能力,而不會影響您所儲存文件的加密狀態。

從先前在 Azure Blob 儲存體 中加密的整個檔(例如 PDF、HTML、DOCX 和 PPTX)開始,本教學課程會使用 REST 用戶端和搜尋 REST API 來執行下列工作:

  • 定義管線,解密文件並從中擷取文字。
  • 定義索引以儲存輸出。
  • 執行用來建立和載入索引的管線。
  • 使用全文檢索搜尋和豐富的查詢語法來探索結果。

如果您沒有 Azure 訂用帳戶,請在開始前開啟免費帳戶

必要條件

自訂技能部署會建立 Azure 函式應用程式和 Azure 儲存體帳戶。 因為系統會為您建立這些資源,因此其不會列為必要條件。 當您完成本教學課程時,請記得清除資源,這樣您就不會為未使用的服務付費。

注意

技能集通常需要連結 Azure AI 多服務資源。 如前所述,此技能集對 Azure AI 服務沒有相依性,因此不需要任何金鑰。 如果您稍後新增叫用內建技能的擴充,請記得據以更新您的技能集。

1 - 建立服務並收集認證

部署自訂技能

此範例會使用來自 Azure 搜尋服務進階技能 GitHub 存放庫的範例 DecryptBlobFile 專案。 在本節中,您會將技能部署至 Azure 函式,以便其可用於技能集中。 內建部署指令碼會建立名稱以 psdbf-function-app- 開頭的 Azure 函式資源,並載入技能。 將提示您提供訂用帳戶和資源群組。 請務必選擇 Azure Key Vault 執行個體所在的同一訂用帳戶。

在操作上,DecryptBlobFile 技能會接受每個 Blob 的 URL 和 SAS 權杖做為輸入,並使用 Azure AI 搜尋服務所預期的檔案參考合約來輸出已下載的解密檔案。 別忘了,DecryptBlobFile 需要加密金鑰才能執行解密。 在設定過程中您也會建立存取原則,授與 DecryptBlobFile 函式對 Azure Key Vault 中加密金鑰的存取權。

  1. 按一下 DecryptBlobFile 登陸頁面上找到的 [部署至 Azure] 按鈕,這會在 Azure 入口網站內開啟提供的 Resource Manager 範本。

  2. 選擇 Azure Key Vault 執行個體所在的同一訂用帳戶 (如果您選取不同的訂用帳戶,本教學課程將無法運作)。

  3. 選取現有的資源群組或建立新群組。 專用資源群組可讓您稍後更容易進行清除。

  4. 選取 [檢閱 + 建立]確定您已同意條款,然後選取 [建立] 以部署 Azure 函式。

    Azure 入口網站 中ARM樣本頁面的螢幕快照。

  5. 等待部署完成。

您應該會有包含解密邏輯的 Azure 函式應用程式,以及將儲存應用程式資料的 Azure 儲存體資源。 在接下來的幾個步驟中,您將授與應用程式存取金鑰保存庫的權限,並收集 REST 呼叫所需的資訊。

在 Azure Key Vault 中授與權限

  1. 在入口網站中瀏覽至您的 Azure Key Vault 服務。 在 Azure Key Vault 中建立存取原則,授與自訂技能的金鑰存取權。

  2. 在左側瀏覽窗格上,選取 [存取原則],然後選取 [+ 建立],以啟動 [建立存取原則] 精靈。

    左側瀏覽窗格中 [存取原則] 命令的螢幕快照。

  3. 在 [從範本設定] 底下的 [權限] 頁面上,選取 [Azure Data Lake Storage 或 Azure 儲存體]

  4. 選取 [下一步]。

  5. 在 [主體] 頁面上,選取您已部署的 Azure 函式執行個體。 您可以使用步驟 2 中用來建立此執行個體的資源前置詞來搜尋該執行個體,其預設前置詞值為 psdbf-function-app

  6. 選取 [下一步]。

  7. 在 [檢閱 + 建立] 頁面上,選取 [建立]

收集應用程式資訊

  1. 瀏覽至入口網站中的 psdbf-function-app 函式,並記下 REST 呼叫所需的下列屬性:

  2. 取得函式 URL,您可以在函式主頁面上的 Essentials 底下找到此 URL。

    Azure 函式應用程式的 [概觀] 頁面和 [基本資訊] 區段的螢幕快照。

  3. 取得主機金鑰程式碼,您可以瀏覽至 [應用程式金鑰]、按一下以顯示 [預設] 金鑰並複製值,來找到此程式碼。

    Azure 函式應用程式的 [應用程式金鑰] 頁面螢幕快照。

  1. 登入 Azure 入口網站,然後在搜尋服務的 [概觀] 頁面中取得您的搜尋服務名稱。 您可藉由檢閱端點 URL 來確認您的服務名稱。 如果您的端點 URL 為 https://mydemo.search.windows.net,您的服務名稱會是 mydemo

  2. 在 [設定]> [金鑰] 中,取得服務上完整權限的管理金鑰。 可互換的管理金鑰有兩個,可在您需要變換金鑰時提供商務持續性。 您可以在新增、修改及刪除物件的要求上使用主要或次要金鑰。

    取得服務名稱和管理員和查詢金鑰

在傳送至您服務的每個要求的標頭中都需要有 api-key。 有效的金鑰能為每個要求在傳送要求之應用程式與處理要求的服務間建立信任。

設定 REST 用戶端

建立端點與金鑰的變數:

變數 取得位置
admin-key 在 Azure AI 搜尋服務的 [金鑰] 頁面上。
search-service-name Azure AI 搜尋服務的名稱。 URL 為 https://{{search-service-name}}.search.windows.net
storage-connection-string 在儲存體帳戶的 [存取金鑰] 索引標籤上,選取 [key1]>[連接字串]
storage-container-name Blob 容器的名稱,該容器具有要編製索引的加密檔案。
function-uri 在主頁面上 [Essentials] 底下的 Azure 函式中。
function-code 在 Azure 函式中,透過瀏覽至 [應用程式金鑰]、按一下以顯示 [預設] 金鑰並複製值。
api-version 保持為 2020-06-30
datasource-name 保留為 encrypted-blobs-ds
index-name 保留為 encrypted-blobs-idx
skillset-name 保留為 encrypted-blobs-ss
indexer-name 保留為 encrypted-blobs-ixr

檢閱並執行每個要求

使用 HTTP 要求來建立擴充管線的物件:

  • 要建立索引的 PUT 要求:此搜尋索引會保留 Azure AI 搜尋服務使用和傳回的資料。

  • 要建立資料來源的 POST 要求:此資料來源會指定儲存體帳戶的連線,而此帳戶包含加密的 Blob 檔案。

  • 要建立技能集的 PUT 要求:技能集會指定將解密 Blob 檔案資料的 Azure 函式自訂技能定義,以及 DocumentExtractionSkill,以在解密後從每個文件擷取文字。

  • 要建立索引子的 PUT 要求:執行索引子會擷取資料、套用技能集,以及編製索引並儲存結果。 您必須最後再執行此要求。 技能集中的自訂技能會叫用解密邏輯。

監視索引編製

當您提交建立索引子的要求時,編制索引和擴充就會開始進行。 根據儲存體帳戶中的文件數目,編製索引可能需要一段時間。 若要瞭解索引器是否仍在執行中,請傳送 取得索引器狀態 要求,並檢閱回應以瞭解索引器是否正在執行,或檢視錯誤和警告資訊。

如果您使用免費層,預期會出現下列訊息:"Could not extract content or metadata from your document. Truncated extracted text to '32768' characters"。 之所以出現這則訊息,是因為免費層上的 Blob 索引有 32K 的字元擷取限制。 若此資料集在較高的層級上,您就不會看到此訊息。

搜尋您的內容

在索引子執行完成之後,您可以執行一些查詢,來驗證資料是否成功解密並編製索引。 瀏覽至入口網站中的 Azure AI 搜尋服務,並使用搜尋總管對索引資料執行查詢。

清除資源

如果您使用自己的訂用帳戶,當專案結束時,建議您移除不再需要的資源。 資源若繼續執行,將需付費。 您可以個別刪除資源,或刪除資源群組以刪除整組資源。

您可以使用左導覽窗格中的 [所有資源] 或 [資源群組] 連結,在入口網站中尋找和管理資源。

下一步

既然您已成功為加密的檔案編製索引,就可以藉由新增更多認知技能來逐一查看此管線。 這可讓您擴充並取得資料的其他見解。

如果您正在使用雙重加密的資料,則可能想要調查 Azure AI 搜尋服務中可用的索引加密功能。 雖然索引子基於編製索引的目的需要解密的資料,但一旦索引存在,就可以使用客戶自控金鑰在搜尋索引中將其加密。 這可確保您的資料在待用時一律加密。 如需詳細資訊,請參閱在 Azure AI 搜尋服務中設定客戶自控金鑰進行資料加密