使用金鑰驗證 連線 至 Azure AI 搜尋服務

Azure AI 搜尋提供金鑰型驗證,可讓您在連線到您的搜尋服務時使用。 API 金鑰是由 52 個隨機產生的數位和字母組成的唯一字串。 如果要求和 API 金鑰都有效,則會接受對搜尋服務端點提出的要求。

金鑰型驗證是預設值。 如果您選擇角色型驗證,則可以停用它。

注意

重要術語的快速注意事項。 API 金鑰是用於驗證的 GUID。 檔索引鍵是索引內容中唯一的字串,可唯一識別搜尋索引中的檔。

API 金鑰的類型

有兩種金鑰可用來驗證要求:

類型 權限層級 最大值 建立方式
管理 所有內容作業的完整存取權(讀寫) 2 1 建立服務時會產生兩個 系統管理密鑰,稱為入口網站中的主要次要 密鑰,而且可以視需要個別重新產生。
查詢 只讀存取權,範圍設定為搜尋索引的檔集合 50 服務會產生一個查詢金鑰。 搜尋服務管理員可以視需要建立更多專案。

1 擁有兩個可讓您在使用第二個金鑰繼續存取服務時,變換一個密鑰。

從視覺上看,系統管理密鑰或查詢金鑰之間沒有區別。 這兩個索引鍵都是由52個隨機產生的英數位元組成的字串。 如果您無法追蹤應用程式中指定的金鑰類型,您可以在 入口網站中檢查金鑰值。

在連線上使用 API 金鑰

API 金鑰用於數據平面(內容)要求,例如建立或存取索引,或搜尋 REST API代表的任何其他要求。 建立服務時,API 金鑰是數據平面作業的唯一驗證機制,但如果您無法在程式代碼中使用硬式編碼密鑰,您可以取代或補充 Azure 角色的金鑰驗證

管理員 索引鍵可用來建立、修改或刪除物件。 管理員 索引鍵也用於 GET 物件定義和系統資訊。

查詢金鑰通常會散發給發出查詢的用戶端應用程式。

REST 呼叫中如何使用 API 金鑰:

在要求標頭中設定系統管理金鑰。 您無法在 URI 或要求主體中傳遞系統管理金鑰。 管理員 金鑰用於建立-讀取-更新-刪除作業,以及針對向搜尋服務本身發出的要求,例如LIST 索引GET 服務統計數據

以下是在建立索引要求上使用系統管理 API 金鑰的範例:

### Create an index
POST {{baseUrl}}/indexes?api-version=2023-11-01  HTTP/1.1
  Content-Type: application/json
  api-key: {{adminApiKey}}

    {
        "name": "my-new-index",  
        "fields": [
            {"name": "docId", "type": "Edm.String", "key": true, "filterable": true},
            {"name": "Name", "type": "Edm.String", "searchable": true }
         ]
   }

在 POST 的要求標頭中,或在 GET 的 URI 上設定查詢密鑰。 查詢索引鍵用於以集合為目標的 index/docs 作業: 搜尋檔自動完成建議GET 檔

以下是搜尋檔案 (GET) 要求查詢 API 金鑰使用方式的範例:

### Query an index
GET /indexes/my-new-index/docs?search=*&api-version=2023-11-01&api-key={{queryApiKey}}

注意

傳遞敏感數據,例如 api-key 在要求 URI 中傳遞敏感數據時,會被視為不良的安全性做法。 基於這個理由,Azure AI 搜尋只會接受查詢金鑰做為 api-key 查詢字串中的 。 一般情況下,建議您將 您 api-key 當作要求標頭傳遞。

檢視或管理 API 金鑰的許可權

檢視和管理 API 金鑰的許可權會透過 角色指派來傳達。 下列角色的成員可以檢視和重新產生金鑰:

下列角色無法存取 API 金鑰:

  • 讀取者
  • 搜尋索引數據參與者
  • 搜尋索引數據讀取器

尋找現有的金鑰

您可以在 Azure 入口網站 中,或透過PowerShell、Azure CLIREST API來檢視和管理 API 金鑰

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

  2. 在 [設定],選取 [金鑰] 以檢視系統管理員和查詢密鑰。

顯示 API 金鑰的入口網站頁面螢幕快照。

建立查詢金鑰

查詢索引鍵用於對索引內檔進行以檔集合為目標之作業的唯讀存取。 搜尋、篩選和建議查詢是採用查詢索引鍵的所有作業。 任何傳回系統數據或物件定義的只讀作業,例如索引定義或索引器狀態,都需要管理密鑰。

限制用戶端應用程式中的存取權和作業,對於保護服務上的搜尋資產至關重要。 請一律針對源自用戶端應用程式的任何查詢使用查詢金鑰,而不是系統管理密鑰。

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

  2. 在 [設定] 下,選取 [金鑰] 以檢視 API 金鑰。

  3. 在 [管理查詢金鑰] 底下,使用已為您的服務產生的查詢密鑰,或建立新的查詢金鑰。 默認查詢索引鍵未命名,但其他產生的查詢索引鍵可以命名為可管理性。

    查詢金鑰管理選項的螢幕快照。

重新產生系統管理金鑰

系統會為每個服務建立兩個系統管理密鑰,讓您可以在使用次要密鑰進行商務持續性時輪替主鍵。

  1. 在 [設定],選取 [金鑰],然後複製次要密鑰。

  2. 針對所有應用程式,更新 API 金鑰設定以使用次要金鑰。

  3. 重新產生主鍵。

  4. 更新所有應用程式以使用新的主鍵。

如果您不小心同時重新產生這兩個密鑰,使用這些金鑰的所有用戶端要求都會失敗,併發生 HTTP 403 禁止。 不過,不會刪除內容,而且您不會永久鎖定。

您仍然可以透過入口網站或以程序設計方式存取服務。 管理功能是透過訂用帳戶標識碼而非服務 API 金鑰運作,因此即使您的 API 金鑰不是,仍可供使用。

透過入口網站或管理層建立新的密鑰之後,一旦您在要求上提供這些密鑰之後,就會將存取權還原到您的內容(索引、索引器、數據源、同義字對應)。

保護 API 金鑰

使用角色指派來限制對 API 金鑰的存取。

您無法使用 客戶管理的金鑰加密來加密 API 金鑰。 只有搜尋服務本身內的敏感數據(例如,數據源物件定義中的索引內容或 連接字串)才能進行 CMK 加密。

  1. 在 Azure 入口網站 中流覽至您的搜尋服務頁面。

  2. 在左側瀏覽窗格中,選取 [訪問控制][IAM],然後選取 [ 角色指派] 索引 標籤。

  3. 在 [ 角色 篩選] 中,選取有權檢視或管理密鑰的角色(擁有者、參與者、搜尋服務參與者)。 指派給這些角色之產生的安全性主體具有搜尋服務的主要許可權。

  4. 作為預防措施,也請檢查 [ 傳統系統管理員] 索引 標籤,以判斷系統管理員和共同管理員是否具有存取權。

最佳作法

  • 只有在數據洩漏不具風險時,才使用 API 金鑰(例如,使用範例數據時),以及在防火牆後方操作時。 公開 API 金鑰是數據與未經授權使用搜尋服務的風險。

  • 在發佈之前,請務必先檢查程式代碼、範例和訓練數據,以確保您未留下有效的 API 金鑰。

  • 針對生產工作負載,切換至 Microsoft Entra 標識碼和角色型存取。 或者,如果您想要繼續使用 API 金鑰,請務必一律監視誰可以存取 API 金鑰,並定期重新產生 API 金鑰

另請參閱