共用方式為


使用角色型訪問控制連線到 Azure AI 搜尋

Azure 會針對平台上執行的所有服務,提供全域角色型存取控制授權系統。 在 Azure AI 搜尋中,您可以為下列專案指派 Azure 角色:

透過角色指派不支援對搜尋結果的個別使用者存取(有時稱為 數據列層級安全性檔層級安全性)。 因應措施是建立安全性篩選,其會依使用者身分識別修剪結果,並移除要求者不應具有存取權的文件。 如需示範,請參閱此 使用RAG 的企業聊天範例。

角色指派在所有工具和用戶端程式庫中都會累積且普遍的。 您可以使用 Azure 角色型存取控制文件中所述的任何支援的方法來指派角色。

角色型存取是選擇性的,但建議使用。 替代方法是 金鑰型驗證,這是預設值。

必要條件

下列角色是內建的。 如果這些角色不足,請建立自訂角色

角色 平面 描述
擁有者 控制與資料 完整存取搜尋資源的控制平面,包括指派 Azure 角色的能力。 只有「擁有者」角色可以啟用或停用驗證選項,或管理其他使用者的角色。 訂用帳戶管理員預設為成員。

在資料平面上,此角色具有與「搜尋服務參與者」角色相同的存取權。 其包括所有資料平面動作的存取權,但查詢文件或編製文件索引的能力除外。
參與者 控制與資料 與「擁有者」具有相同的控制平面存取層級,減去指派角色或變更授權選項的能力。

在資料平面上,此角色具有與「搜尋服務參與者」角色相同的存取權。 其包括所有資料平面動作的存取權,但查詢文件或編製文件索引的能力除外。
讀取者 控制與資料 跨整個服務的讀取存取,包括搜尋計量、內容計量 (取用的儲存體、物件數目) 以及資料平面資源的物件定義 (索引、索引子等)。 但是,它無法讀取 API 金鑰或讀取索引中的內容。
搜尋服務參與者 控制與資料 物件定義的讀寫存取權(索引、別名、同義字對應、索引器、數據源和技能集)。 此角色適用於建立對象的開發人員,以及管理搜尋服務及其對象的系統管理員,但無法存取索引內容。 使用此角色來建立、刪除和列出索引、取得索引定義、取得服務資訊(統計數據和配額)、測試分析器、建立和管理同義字對應、索引器、數據源和技能集。 如需權限清單,請參閱 Microsoft.Search/searchServices/*
搜尋索引資料參與者 資料 索引中內容的讀寫存取權。 此角色適用於需要匯入、重新整理或查詢索引文件集合的開發人員或索引擁有者。 此角色不支持索引建立或管理。 根據預設,此角色適用於搜尋服務上的所有索引。 請參閱 授與單一索引 的存取權以縮小範圍。
搜尋索引資料讀取者 資料 查詢搜尋索引的唯讀存取權。 此角色適用於執行查詢的應用程式和使用者。 此角色不支援物件定義的讀取許可權。 例如,您無法讀取搜尋索引定義或取得搜尋服務統計數據。 根據預設,此角色適用於搜尋服務上的所有索引。 請參閱 授與單一索引 的存取權以縮小範圍。

注意

如果您停用 Azure 角色型存取,控制平面的內建角色 (擁有者、參與者、讀者) 仍可繼續使用。 停用角色型存取只會移除與這些角色相關聯的數據相關許可權。 如果停用數據平面角色,Search Service 參與者相當於控制平面參與者。

指派角色

在本節中,為下列專案指派角色:

指派服務管理的角色

身為服務管理員,您可以建立及設定搜尋服務,並執行管理 REST API 或對等用戶端連結庫中所述的所有控制平面作業。 視角色而定,您也可以執行大部分的數據平面 搜尋 REST API 工作。

  1. 登入 Azure 入口網站

  2. 瀏覽至您的搜尋服務。

  3. 在左側導覽窗格中選取 [存取控制 (IAM)]

  4. 選取 [+新增]>[新增角色指派]

  5. 選取適用的角色:

    • 擁有者 (所有數據平面和控制平面作業的完整存取權,但查詢許可權除外)
    • 參與者(與擁有者相同,但指派角色的許可權除外)
    • 讀者(可接受監視和檢視計量)
  6. 在 [成員] 索引標籤上,選取 Microsoft Entra 使用者或群組身分識別。

  7. 在 [檢閱 + 指派] 索引標籤上,選取 [檢閱 + 指派] 以指派角色。

指派用於開發的角色

角色指派在搜尋服務之間是全域的。 若要 設定單一索引的許可權範圍,請使用 PowerShell 或 Azure CLI 來建立自定義角色。

注意

如果您提出要求,例如 REST 呼叫,其中包含 API 金鑰,而且您也是角色指派的一部分,API 金鑰會優先使用。 例如,如果您有只讀角色指派,但使用系統管理 API 金鑰提出要求,則 API 金鑰授與的許可權會覆寫角色指派。 只有在搜尋服務同時啟用密鑰和角色時,才會套用此行為。

  1. 登入 Azure 入口網站

  2. 瀏覽至您的搜尋服務。

  3. 在左側導覽窗格中選取 [存取控制 (IAM)]

  4. 選取 [+新增]>[新增角色指派]

    開啟 [新增角色指派] 功能表的存取控制 (IAM) 頁面。

  5. 選取角色:

    • 搜尋服務參與者(索引器、索引器、技能集和其他最上層物件的 create-read-update-delete 作業)
    • 搜尋索引數據參與者(載入檔並執行編制索引作業 )
    • 搜尋索引資料讀取器(查詢索引)

    提供完整存取權的另一個角色組合是參與者或擁有者,以及搜尋索引數據讀取器。

  6. 在 [成員] 索引標籤上,選取 Microsoft Entra 使用者或群組身分識別。

  7. 在 [檢閱 + 指派] 索引標籤上,選取 [檢閱 + 指派] 以指派角色。

  8. 針對其他角色重複。 大部分的開發人員都需要這三個。

為唯讀查詢指派角色

針對只需要索引讀取許可權的應用程式和進程,使用搜尋索引數據讀取器角色。 這是一個非常特定的角色。 它會授與 GET 或 POST 對搜尋索引的檔集合進行搜尋、自動完成和建議的存取權。

它不支援索引或其他最上層物件的 GET 或 LIST 作業,或 GET 服務統計數據。

  1. 登入 Azure 入口網站

  2. 瀏覽至您的搜尋服務。

  3. 在左側導覽窗格中選取 [存取控制 (IAM)]

  4. 選取 [+新增]>[新增角色指派]

  5. 選取 [ 搜尋索引數據讀取器 ] 角色。

  6. 在 [成員] 索引標籤上,選取 Microsoft Entra 使用者或群組身分識別。 如果您要設定另一個服務的許可權,您可能會使用系統或使用者管理的身分識別。 如果角色指派適用於服務身分識別,請選擇該選項。

  7. 在 [檢閱 + 指派] 索引標籤上,選取 [檢閱 + 指派] 以指派角色。

測試角色指派

使用用戶端來測試角色指派。 請記住,角色是訂用帳戶或資源群組層級範圍的累計和繼承角色,無法在資源層級刪除或拒絕。

在測試存取之前,請確定您使用 Microsoft Entra ID 註冊用戶端應用程式並進行角色指派。

  1. 登入 Azure 入口網站

  2. 瀏覽至您的搜尋服務。

  3. 在 [概觀] 頁面上,選取 [索引] 索引標籤:

    • 搜尋服務參與者可以檢視及建立任何物件,但無法載入檔或查詢索引。 若要驗證許可權, 請建立搜尋索引

    • 搜尋索引數據參與者可以載入檔。 在 [匯入數據精靈] 外部的入口網站中沒有載入檔選項,但您可以 重設並執行索引器 來確認檔載入許可權。

    • 搜尋索引數據讀取器可以查詢索引。 若要驗證許可權,請使用 搜尋總管。 您應該能夠傳送查詢和檢視結果,但不應該能夠檢視索引定義或建立索引定義。

以目前使用者的身分測試

如果您已經是搜尋服務的參與者或擁有者,您可以為使用者身分識別提供持有人權杖,以向 Azure AI 搜尋服務進行驗證。

  1. 使用 Azure CLI 取得目前使用者的持有人權杖:

    az account get-access-token --scope https://search.azure.com/.default
    

    或使用 PowerShell:

    Get-AzAccessToken -ResourceUrl https://search.azure.com
    
  2. 在 Visual Studio Code 的新文字檔中,貼上下列變數:

    @baseUrl = PASTE-YOUR-SEARCH-SERVICE-URL-HERE
    @index-name = PASTE-YOUR-INDEX-NAME-HERE
    @token = PASTE-YOUR-TOKEN-HERE
    
  3. 貼上 ,然後傳送要求以確認存取權。 以下是查詢 hotels-quickstart 索引的查詢

    POST https://{{baseUrl}}/indexes/{{index-name}}/docs/search?api-version=2023-11-01 HTTP/1.1
      Content-type: application/json
      Authorization: Bearer {{token}}
    
        {
             "queryType": "simple",
             "search": "motel",
             "filter": "",
             "select": "HotelName,Description,Category,Tags",
             "count": true
         }
    

授與單一索引的存取權

在某些情況下,您可能想要限制應用程式對單一資源的存取,例如索引。

入口網站目前不支援此細微性層級的角色指派,但可以使用 PowerShellAzure CLI 來完成。

在 PowerShell 中,使用 New-AzRoleAssignment,提供 Azure 使用者或群組名稱,以及指派的範圍。

  1. Azure載入和 AzureAD 模組並連線到您的 Azure 帳戶:

    Import-Module -Name Az
    Import-Module -Name AzureAD
    Connect-AzAccount
    
  2. 新增範圍限定於個別索引的角色指派:

    New-AzRoleAssignment -ObjectId <objectId> `
        -RoleDefinitionName "Search Index Data Contributor" `
        -Scope  "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Search/searchServices/<search-service>/indexes/<index-name>"
    

建立自訂角色

如果 內建角色 未提供正確的許可權組合,您可以建立 自定義角色 以支援所需的作業。

此範例會複製搜尋索引資料讀取者,然後新增依名稱列出索引的能力。 通常,列出搜尋服務上的索引會被視為系統管理權限。

這些步驟衍生自使用 Azure 入口網站建立或更新 Azure 自訂角色。 在搜尋服務頁面中支援從現有角色複製。

這些步驟會建立自訂角色,以增強搜尋查詢權限,以依名稱包含列出索引。 一般而言,列出索引會被視為系統管理功能。

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

  2. 在左側瀏覽窗格中,選取 [存取控制 (IAM)]

  3. 在動作列中,選取 [角色]

  4. 以滑鼠右鍵按一下 [搜尋索引資料讀取者] (或其他角色),然後選取 [複製] 以開啟 [建立自訂角色] 精靈。

  5. 在 [基本] 索引標籤上,提供自訂角色的名稱,例如「搜尋索引資料總管」,然後選取 [下一步]

  6. 在 [權限] 索引標籤上,選取 [新增權限]

  7. 在 [新增權限] 索引標籤上,搜尋並選取 [Microsoft 搜尋] 圖格

  8. 設定自訂角色的權限。 在頁面頂端,使用預設的 [動作] 選取項目:

    • 在 Microsoft.Search/operations 底下,選取 [讀取: 列出所有可用的作業]
    • 在 Microsoft.Search/searchServices/indexes 底下,選取 [讀取: 讀取索引]
  9. 在相同頁面上,切換至 [資料動作],然後在 Microsoft.Search/searchServices/indexes/documents 下,選取 [讀取: 讀取文件]

    JSON 定義看起來像下列範例:

    {
     "properties": {
         "roleName": "search index data explorer",
         "description": "",
         "assignableScopes": [
             "/subscriptions/0000000000000000000000000000000/resourceGroups/free-search-svc/providers/Microsoft.Search/searchServices/demo-search-svc"
         ],
         "permissions": [
             {
                 "actions": [
                     "Microsoft.Search/operations/read",
                     "Microsoft.Search/searchServices/indexes/read"
                 ],
                 "notActions": [],
                 "dataActions": [
                     "Microsoft.Search/searchServices/indexes/documents/read"
                 ],
                 "notDataActions": []
             }
         ]
       }
     }
    
  10. 選取 [檢閱 + 建立] 以建立角色。 您現在可以將使用者和群組指派給角色。

條件式存取

如果您需要強制執行組織原則,例如多重要素驗證,建議您 Microsoft Entra 條件式存取

若要啟用 Azure AI 搜尋的條件式存取原則,請遵循下列步驟:

  1. 登入 Azure 入口網站。

  2. 搜尋 Microsoft Entra 條件式存取

  3. 選取原則

  4. 選取 [新增原則]

  5. 在原則的 [雲端應用程式或動作] 區段中,根據您想要設定原則的方式,將 Azure AI 搜尋服務新增為雲端應用程式。

  6. 更新原則的其餘參數。 例如,指定此原則適用的使用者和群組。

  7. 儲存原則。

重要

如果您的搜尋服務已獲指派受控識別,則特定搜尋服務會顯示為雲端應用程式,可併入或排除為條件式存取原則的一部分。 無法在特定搜尋服務上強制執行條件式存取原則。 請改為確定您選取一般 Azure AI 搜尋服務雲端應用程式。

限制

  • 角色型訪問控制可以增加某些要求的延遲。 服務資源(索引、索引器等)和服務主體的每個唯一組合都會觸發授權檢查。 這些授權檢查可為每個要求新增最多 200 毫秒的延遲。

  • 在少數情況下,其中的要求源自大量不同的服務主體,都以不同服務資源為目標 (索引、索引子等),授權檢查可能會導致節流。 只有在一秒內使用了數百個唯一的搜尋服務資源和服務主體的組合時,才會發生節流。

針對角色型訪問控制問題進行疑難解答

開發使用角色型存取控制進行驗證的應用程式時,可能會發生一些常見問題:

  • 如果授權令牌來自 受控識別 ,且最近指派適當的許可權, 可能需要數小時 的時間,這些許可權指派才會生效。

  • 搜尋服務的預設組態是以 金鑰為基礎的驗證。 如果您未將預設密鑰設定變更為 [兩者 ] 或 [角色型訪問控制],則不論基礎許可權為何,都會自動拒絕使用角色型驗證的所有要求。