配置客戶管理的金鑰以加密 Azure AI 搜尋資料

註

Azure AI 搜尋服務 可透過 Azure 入口網站、REST API 及 Azure SDK 取得。 它同時也是 Foundry IQ 的基礎,這是一個管理式知識層,能將企業內容轉化為可重複使用、權限感知的知識庫,供 Microsoft Foundry 入口網站中的代理使用。

重要

標記(預覽)的功能、能力或屬性不受服務等級協議涵蓋,也不建議用於生產工作負載,且在正式上架前可能會有所變動或受限。 Azure AI 搜尋服務 預覽條款適用於所有預覽功能,無論是獨立功能還是正式推出功能的一部分。

啟用客戶管理金鑰(CMK)在使用Microsoft管理金鑰時,除了預設的靜態加密外,還能增加額外的安全性。 啟用 CMK 後,您可控制用於保護資料的加密金鑰,包括以下功能:

  • 依照客戶定義的排程輪換金鑰
  • 停用或撤銷金鑰以阻止存取加密內容 (快取金鑰可能持續長達 60 分鐘)
  • 通過 Azure Key Vault 記錄審核金鑰使用情況

您可以透過以下任一方式建立、儲存和管理金鑰:

  • Azure Key Vault

  • Azure Key Vault Managed HSM (Hardware Security Module). Azure Key Vault 管理型 HSM 是通過 FIPS 140-2 Level 3 驗證的 HSM。 要從 Azure Key Vault 遷移到 HSM,請旋轉你的金鑰,並選擇管理型 HSM 作為儲存。

本文說明如何在 Azure AI 搜尋服務 中設定 CMK,以進一步保護加密資料。

重要

  • 新增客戶管理金鑰(CMK)適用於靜態資料的加密。 如果你需要保護正在使用的資料,可以考慮使用 機密運算。

先決條件

  • 位於可計費層級 (任何區域中的 Basic 或更高層級) 的 Azure AI 搜尋服務。

  • Azure Key Vault,以及啟用了軟刪除和清除保護的金鑰庫。 或者,Azure Key Vault 託管硬體安全模組 (HSM)。 此資源可以位於任何訂用帳戶,也可以位於不同租用戶中。 這些指令假設只有一個租戶。 關於跨租戶設定,請參見 「跨不同租戶配置客戶管理金鑰」。

  • 如果你打算設定服務層級的 CMK,請使用 Search Management REST API 版本 2026-03-01-preview 或更新版本。 要檢查物件是否繼承服務層級金鑰,請使用資料平面 API 版本 2026-05-01-preview 或更新版本。

  • 能夠設定金鑰存取權限及分配角色。 要建立金鑰,您必須在Azure Key Vault中擔任金鑰保存庫加密官員,或在Azure Key Vault受管理的HSM中擔任受管理HSM加密官員。

    要指派角色,您必須是訂閱擁有者、使用者存取管理員、基於角色的存取控制管理員,或被指派為自訂角色,具有Microsoft.Authorization/roleAssignments/write權限。

在 Azure AI 搜尋物件上配置 CMK

可設定為客戶管理金鑰(CMK)的加密資料物件包括索引、同義詞列表、索引器、資料來源、向量器及技能集。 加密解密計算成本高,因此只有敏感內容會被加密。

加密方式如下:

  • 索引與同義詞列表內的所有內容。

  • 索引器、資料來源、技能集及向量器中的敏感內容。 敏感內容包括連接字串、描述、身份、鍵及使用者輸入。 例如,技能集可以包含連接服務的鍵,有些技能則接受使用者輸入,例如自訂實體。 在這兩種情況下,金鑰和使用者輸入都會被加密。 任何對外部資源的引用,如 Azure 資料來源或 Azure OpenAI 模型,也會被加密。

物件在新建立時,必須新增客戶管理的金鑰。 重要的是要記住:

  • 你不能事後將 CMK 加入現有物件。 如果你想在現有物件上新增客戶管理的金鑰,必須刪除並啟用加密後重新建立該物件。

  • 一旦設定好 CMK,每次服務寫入資料時都會進行加密,包括靜態資料(長期儲存)或暫存快取資料(短期儲存)。 對於像資料來源、索引器和技能集這類物件,物件定義會被加密。 對於索引,索引文件本身(不只是索引結構)會被加密。

  • 雖然你無法對現有物件加加密,但只要資源在同一租戶中,你可以更改物件加密定義的所有部分,包括切換到不同的金鑰庫或 HSM 儲存。

  • CMK 的加密是不可逆的。 你可以旋轉金鑰並更改 CMK 設定,但索引加密會持續到索引的整個壽命。 在使用 CMK 加密後,只有當搜尋服務擁有金鑰存取權時,索引才能被存取。 如果你透過刪除或更改角色指派來撤銷對金鑰的存取權,索引將無法使用,服務無法擴展,除非索引被刪除或金鑰存取權被恢復。 如果您刪除或輪替金鑰,則系統最多會將最新的金鑰快取 60 分鐘。

  • 如果你在搜尋服務中要求 CMK,請設定執行政策。

  • 使用 Azure 原則 強制執行的 CMK 和服務層級的 CMK 配置(該功能仍處於預覽階段)是互相獨立的設定。 你可以根據需求使用其中一種或兩種。 服務層級的 CMK 設定會對新物件套用預設金鑰,而 Azure 原則 強制執行則確保所有物件符合加密要求。 如果你啟用 CMK 強制政策但沒有服務層級金鑰,所有啟用 CMK 的物件在建立時必須指定自己的加密金鑰。 未包含 CMK 設定的物件建立請求失敗。

預設在新物件上啟用服務層級 CMK(預覽版)

從 2026-03-01 預覽版開始,你可以在 Azure AI 搜尋服務 服務本身的服務層級設定由客戶管理的金鑰。 這個功能讓你只需設定一次金鑰,就能預設套用到所有新建立的物件上。 這種保護能用你控制的金鑰保護搜尋服務中的敏感資料,且不需要每次建立物件時都指定金鑰資訊。 在資料平面 API 版本 2026-05-01-preview 及更新版本中,encryptionKey 上的 isServiceLevelKey 屬性可協助您判斷物件是繼承服務層級金鑰,還是使用明確指定的物件層級金鑰。

在服務層級啟用 CMK 意味著:

  • 所有在Azure AI 搜尋服務服務上建立的 new物件,預設會自動使用服務層級的客戶管理金鑰,因此你不再需要每次建立物件時都明確指定加密金鑰細節。

  • 此功能為選用,您可以繼續以個別物件為基礎設定 CMK。 你也可以覆蓋個別物件的服務層級金鑰,並獨立旋轉服務層級金鑰,讓你能根據需要使用不同物件的不同金鑰。

你可以透過為你建立的物件指定一個新的鍵來覆蓋這個預設鍵。 你指定的物件層級金鑰會覆蓋該物件的預設服務層級金鑰。

在服務層級與物件層級 CMK 之間選擇

預設使用服務層級的 CMK,將單一鍵套用於所有物件上。 你設定一次金鑰,新的物件就會自動繼承這項保護。

對於需要獨立金鑰生命週期的工作負載,請使用物件層級 CMK。 現有的物件層級 CMK 配置則持續運作,無需做更動。 服務層級 CMK 簡化了金鑰管理,但並不能取代物件層級的 CMK。

企業常見的模式是為大多數物件(索引、索引器、資料來源、技能集、向量器及同義映射)配置服務層級金鑰。 對於符合規範要求較嚴格的工作負載,可以設定物件層級金鑰來獨立管理存取、輪替與撤銷。

步驟 1:建立加密金鑰

請使用 Azure Key Vault 或 Azure Key Vault Managed HSM 來建立金鑰。 Azure AI 搜尋服務 加密支援大小為 2048、3072 和 4096 的 RSA 金鑰。 欲了解更多支援金鑰類型,請參閱 關於金鑰。

我們建議你在開始前先檢視 這些建議 。

所需的操作包括 包裝、 解包、 加密與 解密。

你可以使用 Azure portal、Azure CLI 或 Azure PowerShell 來建立金鑰庫。

  1. 進入Azure傳送門的鑰匙庫。

  2. 選擇左側的 物件>鍵, 然後選擇 產生/匯入。

  3. 在 「建立金鑰 」面板中,從 選項清單中選擇 「生成 」以建立新金鑰。

  4. 輸入你的鍵 名稱 ,並接受其他鍵屬性的預設值。

  5. 可選擇設定按鍵旋轉政策以 啟用自動旋轉。

  6. 選擇 建立 以開始部署。

  7. 建立金鑰後,取得其金鑰識別碼。 選擇金鑰,選擇目前版本,然後複製金鑰識別碼。 它由 鍵值 Uri、 鍵名和 鍵版本組成。 你需要識別碼來定義 Azure AI 搜尋服務 中的加密索引。 請記得所需的操作包括 Wrap、 Unwrap、 Encrypt 和 Decrypt。

    建立新的金鑰保險庫金鑰

步驟 2:建立安全原則

建立一個安全主體,讓你的搜尋服務用來存取加密金鑰。 你可以使用管理身份與角色指派,或註冊應用程式,讓搜尋服務在請求時提供該應用程式 ID。

使用受管理的身份和角色。 你可以使用系統管理身份或使用者管理身份。 管理身份讓你的搜尋服務能透過 Microsoft Entra ID 進行認證,而不必在程式碼中儲存憑證(ApplicationID 或 ApplicationSecret)。 這類受管身份的生命週期與搜尋服務的生命週期相關,而搜尋服務只能有一個系統指派的管理身份。 欲了解更多關於受管理身份的運作方式,請參閱 什麼是Azure資源的受管理身份。

啟用系統自動指派的管理識別以用於您的搜尋服務。 這是兩鍵操作:啟用並儲存。

開啟系統指派式管理身分的截圖。

步驟三:授予權限

如果你設定搜尋服務使用管理身份,請指派角色讓它能存取加密金鑰。

建議採用基於角色的存取控制,而非存取政策權限模型。 欲了解更多資訊或遷移步驟,請從 Azure 角色基礎存取控制(Azure RBAC)與存取政策(舊有) 開始。

  1. 進入Azure傳送門的鑰匙庫。

  2. 選擇 存取控制(IAM), 並選擇 新增角色指派。

  3. 選擇角色:

    • 在Azure Key Vault中,選擇 金鑰保存庫 加密服務加密用戶。
    • 在 Managed HSM 中,選擇 「Managed HSM 加密服務加密使用者」。
  4. 選擇受管理身份,選擇成員,然後選擇你搜尋服務的受管理身份。 如果你是在本地測試,務必也把這個角色分配給自己。

  5. 選擇 檢視 + 指派。

等幾分鐘,角色分配開始運作。

金鑰保存庫 防火牆與 CMK 虛擬網路存取

Azure AI 搜尋服務 必須能夠存取你 Azure Key Vault 中的加密金鑰。

如果你的金鑰庫有防火牆或虛擬網路限制,請設定以下選項之一:

啟用可信服務繞過後,Azure AI 搜尋服務 可透過管理身份以受信任服務身份存取金鑰,即使公共網路存取受限。

如果防火牆阻擋存取且未啟用可信服務繞過,Azure AI 搜尋服務 就無法取得金鑰,且依賴 CMK 的操作會失敗。

步驟 4:將加密金鑰資訊加入 Azure AI 搜尋服務 物件

當你建立加密物件時,輸入金鑰庫的 URI、金鑰名稱和金鑰版本。 如果你使用 Microsoft Entra ID 應用程式進行認證,也請輸入應用程式 ID 和秘密密碼。

要在搜尋物件中新增由客戶管理的金鑰,可以是索引、索引器、資料來源、技能集、向量器或同義映射,你可以在 服務層 級或 物件層級設定這個鍵。

服務層級:透過在服務層級設定客戶管理的金鑰,該金鑰會預設套用於所有新建立的搜尋物件。 它不適用於既有的搜尋物件。

物件層級:在建立新搜尋物件時,你也可以在物件層級定義一個新的、唯一的鍵。 此物件層級金鑰定義會覆蓋預設的服務層級金鑰。

警告

在更新客戶管理的金鑰設定時,無論是服務層級還是物件層級的金鑰定義,請保留先前設定的資源,直到更新在整個服務中傳播。 移除身份、刪除金鑰庫或過早撤銷金鑰,會阻止部分服務元件解密仍依賴先前設定的資料。

要在物件上設定 CMK,請使用 Azure 入口網站、Search Service REST API 或 Azure SDK。

當你在 Azure 入口網站建立新物件時,可以在金鑰庫中指定一個預先定義的客戶管理金鑰。 Azure 入口網站允許你啟用 CMK 加密功能:

  • 索引
  • 資料來源
  • 索引器

要使用 Azure 入口網站,必須有金鑰庫和金鑰,且你必須完成前述步驟以獲得授權存取金鑰。

在 Azure 入口網站中,技能集是在 JSON 視圖中定義的。 使用 REST API 範例中展示的 JSON 來提供一個由客戶管理的技能組金鑰。

  1. 在Azure 入口網站中,進入您的搜尋服務。

  2. 在 搜尋管理中,選擇 索引、 索引器或 資料來源。

  3. 新增一個物件。 在物件定義中,選擇Microsoft管理加密。

  4. 選擇 客戶管理的金鑰 ,並選擇你的訂閱、保險庫、金鑰和版本。

 Azure入口網站加密金鑰頁面的截圖。

重要

Azure AI 搜尋服務 中的加密內容會設定使用特定金鑰和特定的 version。 如果您變更金鑰或版本,則必須更新物件才能使用它 (在您刪除舊的之前)。 若未做到,該物件將無法使用。 如果金鑰遺失,你就無法解密內容。

在服務層級(預覽)配置 CMK

要啟用服務層級的 CMK 設定,請使用 Search Management REST API 或已更新以支援 2026-03-01-preview 版本或更新版本的 Azure SDK。 Azure 入口網站目前尚未支援此功能。 當你在服務層啟用 CMK 時,你不會對現有物件加加密,但除非你指定不同的物件層級金鑰來覆蓋服務層級預設值,否則你會預設對所有新建立的物件套用相同的金鑰。

目前,Azure 入口網站不支援服務層級加密。 直接使用 REST API。

檢查搜尋物件是否繼承服務層級的 CMK

要檢查搜尋物件是否使用在服務層級預設配置的客戶管理金鑰,或是在物件層級設定的唯一客戶管理金鑰,請使用 isServiceLevelKey 該屬性檢查繼承的加密狀態。

目前,Azure 入口網站不支援服務層級加密。 直接使用 REST API。

步驟五:測試加密

要驗證加密是否有效,請撤銷加密金鑰,查詢索引(應該無法使用),然後重新啟用加密金鑰。

這個任務請使用 Azure 入口網站。 請確保你的角色指派賦予你對密鑰的讀取權限。

  1. 在Azure Key Vault頁面中,選擇 Objects>Keys。

  2. 選擇你建立的金鑰,然後選擇 刪除。

  3. 在Azure AI 搜尋服務頁面,選擇 Search management>Indexes。

  4. 選擇你的索引,並使用搜尋總管執行查詢。 您應該會收到錯誤。

  5. 返回 Azure Key Vault Objects>Keys頁面。

  6. 選擇 管理已刪除的金鑰。

  7. 選擇你的金鑰,然後選擇 恢復。

  8. 回到你的 Azure AI 搜尋服務 索引並重新執行查詢。 你應該會看到搜尋結果。 如果沒有立即看到效果,請稍等一分鐘再試一次。

設定原則以強制執行 CMK 合規性

Azure 政策有助於執行組織標準並評估規模合規性。 Azure AI 搜尋服務 有兩個與 CMK 相關的內建可選政策。 這些政策適用於新舊的搜尋服務。

影響 描述
AuditIfNotExists 檢查政策合規性:物件是否定義了客戶管理的金鑰,內容是否加密。 此效應適用於已有內容的服務。 在每次建立或更新物件時,或是依據評估排程進行評估。 了解更多......
否認 檢查政策執行:搜尋服務是否將 SearchEncryptionWithCmk 設定為 Enabled。 此效果僅適用於新服務,且必須啟用加密才能建立。 現有服務仍然可用,但除非你修補服務,否則無法更新。 所有用於配置服務的工具都不會暴露這個特性,所以要注意設定政策會限制你只能 用程式化設定。

指派政策

  1. 在Azure入口網站中,導向內建政策,然後選擇 Assign。

    以下是Azure入口網站中AuditIfExists政策的範例:

    指派內建 CMK 原則的截圖。

  2. 透過選擇訂閱和資源群組來設定 政策範圍 。 排除任何不該適用該政策的搜尋服務。

  3. 接受或修改預設值。 選擇 檢視 + 建立,然後選擇 建立。

啟用 CMK 原則強制執行

當你在訂閱中指派一項政策給資源群組時,該政策會立即生效。 審核政策會標記不合規的資源,但拒絕政策則阻止建立及更新不合規的搜尋服務。 本節說明如何建立合規的搜尋服務或更新服務使其符合規範。 要讓物件符合規範,請從本文 的第一步 開始。

建立合規的搜尋服務

對於新的搜尋服務,請將 SearchEncryptionWithCmk 設定為 Enabled。

Azure 入口網站和命令列工具(Azure CLI 和 Azure PowerShell)都原生不提供此特性,但你可以使用 Management REST API 來配置帶有 CMK 政策定義的搜尋服務。

這個範例來自 Manage your Azure AI 搜尋服務 service with REST APIS,並修改加入了 SearchEncryptionWithCmk 屬性。

### Create a search service (provide an existing resource group)
@resource-group = my-rg
@search-service-name = my-search
PUT https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resource-group}}/providers/Microsoft.Search/searchServices/{{search-service-name}}?api-version=2025-05-01 HTTP/1.1
     Content-type: application/json
     Authorization: Bearer {{token}}

    {
        "location": "North Central US",
        "sku": {
            "name": "basic"
        },
        "properties": {
            "replicaCount": 1,
            "partitionCount": 1,
            "hostingMode": "default",
            "encryptionWithCmk": {
                "enforcement": "Enabled"
        }
      }
    }

更新現有的搜尋服務

對於現有的搜尋服務,若已不合規,請使用 Services - Update API 或 Azure CLI az resource update 指令進行修補。 修補服務後,可以恢復更新搜尋服務屬性的能力。

PATCH https://management.azure.com/subscriptions/<your-subscription-Id>/resourceGroups/<your-resource-group-name>/providers/Microsoft.Search/searchServices/<your-search-service-name>?api-version=2025-05-01

{
  "properties": {
      "encryptionWithCmk": {
          "enforcement": "Enabled"
      }
  }
}

輪換或更新加密金鑰

請依照以下指示輪換金鑰,或從 Azure Key Vault 遷移到 Hardware Security Module(HSM)。

若要進行金鑰輪替,請使用 Azure Key Vault 的自動輪替功能。 如果您使用自動輪換,請在物件定義中省略金鑰版本。 使用最新的金鑰,而非特定版本。

當你更改一個鍵或其版本時,先更新使用該鍵的物件,讓它使用新的值 ,再刪除 舊的值。 否則,該物件將無法使用,因為無法解密。

如果你在服務層級設定 CMK,旋轉服務層級金鑰會適用於未來新建立的物件。 已經繼承了先前服務層級金鑰的物件會自動取得新的金鑰,因此你不需要更新它們。 不過,如果你有任何已設定物件層級金鑰並想旋轉的物件,那你就需要更新這些物件以使用新的金鑰。

金鑰會快取 60 分鐘。 測試和旋轉鍵時請記得這點。

  1. 確定索引或同義映射所使用的鍵。

  2. 在金鑰庫中建立新金鑰,但保留原始金鑰可用。 在此步驟中,你可以從金鑰庫切換到硬體安全模組(HSM)。

  3. 更新索引或同義映射上的 encryptionKey 屬性以使用新的值。 只有原本以此屬性建立的物件才能更新為使用不同值。

  4. 停用或刪除金鑰庫中先前的金鑰。 監控金鑰存取以確認新金鑰是否被使用。

基於效能考量,搜尋服務會快取金鑰最多數小時。 如果你停用或刪除金鑰且未提供新的金鑰,查詢會暫時運作直到快取到期。 然而,一旦搜尋服務無法再解密內容,你會收到以下訊息: "Access forbidden. The query key used might have been revoked - please retry."

金鑰保存庫 提示

  • 如果你是Azure Key Vault新手,請參考這個快速入門,學習基本任務:Set 並使用 PowerShell 從 Azure Key Vault 取出秘密。

  • 你可以使用你需要的多個金鑰庫。 管理金鑰可以存在不同的金鑰庫。 搜尋服務可以有多個加密物件,每個物件都用不同的客戶管理加密金鑰加密,並存放在不同的金鑰庫中。

  • 使用相同的 Azure tenant,這樣你才能透過角色指派或透過系統或使用者管理身份連線來取得你的管理金鑰。 欲了解更多關於建立租戶的資訊,請參閱 「設立新租戶」。

  • 如果您的 Azure Key Vault 受到防火牆保護,請務必啟用 允許受信任的 Microsoft 服務略過此防火牆,讓 Azure AI 搜尋服務 能夠存取金鑰。

  • 啟用清除保護 並對金鑰庫 進行軟刪除 。 由於使用客戶管理的金鑰加密,若你的 Azure Key Vault 金鑰被刪除,沒有人能取得你的資料。 為防止因意外刪除 金鑰保存庫 金鑰而導致資料遺失,必須在 key vault 啟用軟刪除與清除保護。 軟刪除預設是啟用的,所以只有你故意關閉它才會遇到問題。 清除保護預設不是啟用的,但在 Azure AI 搜尋服務 中用 CMK 加密時是必須的。

  • 啟用日誌記錄 於金鑰保險庫,以便監控金鑰使用情況。

  • 啟用金鑰自動輪換 ,或在例行輪換金鑰庫金鑰、應用程式秘密及註冊時,遵循嚴格程序。 刪除舊內容前,務必更新所有 加密內容 ,使用新的秘密和金鑰。 如果你漏掉這個步驟,你的內容就無法被解密。

處理加密內容

使用 CMK,你可能會注意到索引和查詢都因為額外的加密/解密工作而延遲。 Azure AI 搜尋服務 不會記錄加密活動,但你可以透過金鑰庫記錄來監控金鑰存取。

建議您啟用記錄作為金鑰保存庫組態的一部分。

  1. 建立一個日誌分析工作區。

  2. 在 Key Vault 中新增一個診斷設定,使用工作區來保存資料。

  3. 選擇 audit 或 allLogs 來設定分類,給診斷設定一個名稱,然後儲存。

FAQs

我可以將搜尋物件在服務層級定義的客戶管理金鑰與物件層級定義的客戶管理金鑰之間切換嗎?

  • Yes. 當你設定服務層級的 CMK 時,每個新的搜尋物件預設都會使用該鍵。 如果您在物件層級定義中設定不同的金鑰,物件層級金鑰會優先於服務層級金鑰。 若移除物件層級的金鑰定義,搜尋物件會自動回到服務層級定義的客戶管理金鑰。

下一步

如果你不熟悉Azure安全架構,請參考 Azure 安全文件,特別是這篇文章: