共用方式為


設定搜尋服務以使用受控識別進行連線

您可以使用 Microsoft Entra ID 安全性原則和角色指派,用於從 Azure AI 搜尋服務到在編製索引或查詢期間提供資料、應用 AI 或向量化的其他 Azure 資源的輸出連線。

若要在輸出連線中使用角色,請先將搜尋服務設定為使用系統指派或使用者指派的受控識別,作為 Microsoft Entra 租用戶中搜尋服務的安全性主體。 擁有受控識別之後,您就可以指派角色以取得授權的存取權。 受控識別和角色指派不需要在連接字串或程式碼中傳遞密碼和認證。

先決條件

  • 任何區域中,基本層或更高層級的搜尋服務。

  • Azure 資源會接受來自具有有效角色指派的 Microsoft Entra 安全性主體的傳入要求。

  • 若要建立受控識別,您必須是擁有者或使用者存取管理員角色。 若要指派角色,您必須是擁有者、使用者存取管理員、角色型存取控制管理員,或具有 Microsoft.Authorization/roleAssignments/write 權限的自訂角色的成員。

支援的案例

您可以針對這些案例使用受控識別。

狀況 系統 使用者指派
連接到索引器數據源1 是的 2
透過技能/向量化工具連線至 Azure OpenAI、Microsoft Foundry 和 Azure Functions 中的內嵌和聊天完成模型 3 是的 是的
線上至 Azure Key Vault 以取得客戶管理的密鑰 是的 是的
連線至偵錯工作階段 (託管於 Azure 儲存體中)1 是的
連接到增強快取(儲存於 Azure 儲存空間中)1,4 是的 2
連接到知識儲存庫(託管在 Azure 儲存體中)1 是的 2

1 針對搜尋和儲存體之間的連線,網路安全性會對您可以使用的受控識別類型施加限制。 只有系統受控識別可以用於與 Azure 儲存體的相同區域連線,且該連線必須透過受信任的服務例外狀況或資源執行個體規則。 如需詳細資訊,請參閱存取受網路保護的儲存體帳戶

2 使用者指派的受控識別可用於數據源連接字串。 不過,只有較新的預覽 REST API 和預覽套件支援連接字串中使用者指派的受控識別。 如果您在數據源連線中將 SearchIndexerDataUserAssignedIdentity 設為 identity,請務必切換至預覽 API。

透過技能/向量器與 Azure OpenAI、Foundry 及 Azure 函數的 3 個連結包括:自訂技能自訂向量器Azure OpenAI 嵌入技能Azure OpenAI 向量器AML 技能Microsoft Foundry 模型目錄向量器

4 AI 搜尋服務目前無法連線到已 關閉共用金鑰存取的記憶體帳戶上的數據表。

建立系統受控識別

系統指派的受控識別是自動建立並連結至 Azure 資源 (例如 Azure AI 搜尋服務) 的 Microsoft Entra ID 安全性主體。

您可以針對每個搜尋服務有一個系統指派的受控識別。 其在搜尋服務中是唯一的,且在服務的存留期受其約束。

當您啟用系統指派的受控識別時,Microsoft Entra ID 會為您的搜尋服務建立安全性主體,以用來向其他 Azure 資源進行驗證。 然後,您可以在角色指派中使用此身分識別,以取得數據與作業的授權存取權。

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

  2. 從左窗格中,選取 [設定]> [身分識別]

  3. 在 [系統指派] 索引標籤的 [狀態] 底下,選取 [開啟]

  4. 選取 [儲存]。

    此螢幕擷取畫面顯示 Azure 入口網站中的身分識別頁面。

    儲存設定之後,即會更新頁面以顯示指派給搜尋服務的物件識別碼。

    此螢幕擷取畫面顯示系統身分識別物件識別碼。

建立使用者指派的管理型身分識別

使用者指派的受控識別是一種 Azure 資源,範圍可涵蓋訂用帳戶、資源群組或資源類型。

如果您希望能夠讓角色指派更細緻,則可以建立多個使用者指派的受控識別。 例如,您可能想要在不同的應用程式和案例中使用不同的身分識別。 作為獨立建立和受控的資源,它不會繫結至服務本身。

設定使用者指派受控識別的步驟如下所示:

  • 在您的 Azure 訂用帳戶中,建立使用者指派的受控識別。

  • 在您的搜尋服務上,將使用者指派的受控識別與您的搜尋服務產生關聯。

  • 在您要連線的其他 Azure 服務上,建立該身分識別的角色指派。

Azure 入口網站、搜尋管理 REST API 和提供此功能的 SDK 套件支援將使用者指派的受控識別與 Azure AI 搜尋服務產生關聯。

  1. 登入 Azure 入口網站

  2. 在儀表板左上角,選取 [建立資源]

  3. 使用搜尋方塊來尋找 [使用者指派的受控識別],然後選取 [建立]

    此螢幕擷取畫面顯示 Azure Marketplace 中使用者指派的受控識別圖格。

  4. 選取訂用帳戶、資源群組和區域。 為身分識別提供描述性名稱。

  5. 選取 [建立] 並等候資源完成部署。

    您必須在幾分鐘後才能使用該身分識別。

  6. 在搜尋服務頁面,選取 [設定]> [身分識別]

  7. [使用者指派] 索引標籤上,選取 [新增]

  8. 選取訂用帳戶和您先前建立的使用者指派的受控識別。

指派角色

擁有受控識別之後,請指派角色,以決定 Azure 資源的搜尋服務權限。

  • 索引子資料連線以及在 Azure Key Vault 中存取客戶自控金鑰,都需要讀取權限。

  • 使用 Azure 儲存體裝載偵錯工作階段資料、擴充快取和知識存放區長期內容儲存體的 AI 擴充功能,需要寫入權限。

下列步驟說明角色指派工作流程。 此範例適用於 Azure OpenAI。 如需其他 Azure 資源,請參閱連線至 Azure 儲存體連線至 Azure Cosmos DB連線至 Azure SQL

  1. 使用您的 Azure 帳戶登入 Azure 入口網站,然後前往您的 Azure OpenAI 資源。

  2. 從左側功能表中選取 [存取控制]

  3. 選取 [新增],然後選取 [新增角色指派]

  4. 在 [作業函式角色] 底下,選取 [認知服務 OpenAI 使用者],然後選取 [下一步]

  5. 在 [成員] 底下,選取 [受控識別],然後選取 [成員]

  6. 依訂用帳戶和資源類型篩選 (搜尋服務),然後選取搜尋服務的受控識別。

  7. 選擇 檢閱 + 指派

連接字串範例

從案例描述中回想一下,您可以在對其他 Azure 資源的連線字串中使用受控識別。 本節提供範例。 您可以使用系統指派的受控識別,使用一般可用的 REST API 版本和 Azure SDK 套件進行連線。

小提示

您可以在 Azure 入口網站中建立大部分的物件,並指定系統或使用者指派的受控識別,然後檢視 JSON 定義以取得連接字串。

以下是各種案例的連接字串範例。

Blob 資料來源 (系統受控識別):

索引器數據源包含 credentials 屬性,可決定如何連接數據源。 下列範例顯示指定儲存體帳戶唯一資源身分識別碼的連接字串。

當連接字串是 Microsoft Entra ID 感知服務或應用程式的唯一資源識別碼時,這表示該系統具有受控識別。 使用者指派的受控識別是透過 identity 屬性來指定。

"credentials": {
    "connectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name};"
    }

Blob 資料來源 (使用者受控識別):

使用者指派的受控識別也可以在索引器數據源連接字串中使用。 不過,只有較新的預覽 REST API 和預覽套件支援數據源連接字串中使用者指派的受控識別。 如果您將 SearchIndexerDataUserAssignedIdentity 設定為數據源連線中的身分識別,請務必切換至預覽版本。

搜尋服務使用者身分識別是在 identity 屬性中指定。

"credentials": {
    "connectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name};"
    },
  . . .
"identity": {
    "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
    "userAssignedIdentity": "/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{user-assigned-managed-identity-name}"
  }

知識存放區:

知識存放區定義包含 Azure 儲存體的連接字串。 連接字串是您儲存體帳戶的唯一資源身分識別碼。 請注意,字串不包含路徑中的容器或資料表。 這些定義是在內嵌投影定義中定義,而不是連接字串。

"knowledgeStore": {
  "storageConnectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/storage-account-name};"
}

擴充快取:

索引子會建立、使用及記住用於快取擴充的容器。 不需要在快取連接字串中包含容器。 您可以在 Azure 入口網站 中搜尋服務的 [身分識別] 頁面上找到物件識別碼。

"cache": {
  "enableReprocessing": true,
  "storageConnectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name};"
}

偵錯工作階段:

偵錯會話在 Azure 入口執行,並在您啟動會話時接受連接字串。 您可以貼上類似下列範例的字串。

"ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name}/{container-name};",

自訂技能:

自訂技能的目標是 Azure 函式或應用程式中裝載自定義程式碼的端點。

  • uri 是函式或應用程式的端點。

  • authResourceId 告知搜尋服務使用受控識別進行連線,並在屬性中傳遞目標函式或應用程式的應用程式識別碼。

{
  "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
  "description": "A custom skill that can identify positions of different phrases in the source text",
  "uri": "https://contoso.count-things.com",
  "authResourceId": "<Azure-AD-registered-application-ID>",
  "batchSize": 4,
  "context": "/document",
  "inputs": [ ... ],
  "outputs": [ ...]
}

模型的連線範例

對於使用受控識別建立的連線,本節會顯示搜尋服務用來連線到另一個資源上模型的連線資訊範例。 透過系統受控識別的連線是透明的;身分識別和角色已就緒,如果正確設定,連線就會成功。 相反地,使用者受控識別需要額外的連線屬性。

Azure OpenAI 內嵌技能Azure OpenAI 向量化工具:

Azure OpenAI 內嵌技能和 AI 搜尋服務中的向量化工具,均以裝載內嵌模型的 Azure OpenAI 端點為目標。 端點是在 Azure OpenAI 內嵌技能定義和/或 Azure OpenAI 向量化工具定義中指定。

如果 "apikey""authIdentity" 是空的,系統受控識別會自動使用,如下列範例所示。 屬性 "authIdentity" 僅用於使用者指派的受控識別。

系統受控識別範例:

{
  "@odata.type": "#Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill",
  "description": "Connects a deployed embedding model.",
  "resourceUri": "https://url.openai.azure.com/",
  "deploymentId": "text-embedding-ada-002",
  "modelName": "text-embedding-ada-002",
  "inputs": [
    {
      "name": "text",
      "source": "/document/content"
    }
  ],
  "outputs": [
    {
      "name": "embedding"
    }
  ]
}

以下是 針對系統指派的受控識別所設定的向量化程式範例 。 向量化器被指定在搜尋索引中。

 "vectorizers": [
    {
      "name": "my_azure_open_ai_vectorizer",
      "kind": "azureOpenAI",
      "azureOpenAIParameters": {
        "resourceUri": "https://url.openai.azure.com",
        "deploymentId": "text-embedding-ada-002",
        "modelName": "text-embedding-ada-002"
      }
    }
  ]

使用者指派的受控識別範例:

如果 "apiKey" 為空白且提供有效 "authIdentity" ,則會使用使用者指派的受控識別。

{
  "@odata.type": "#Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill",
  "description": "Connects a deployed embedding model.",
  "resourceUri": "https://url.openai.azure.com/",
  "deploymentId": "text-embedding-ada-002",
  "modelName": "text-embedding-ada-002",
  "inputs": [
    {
      "name": "text",
      "source": "/document/content"
    }
  ],
  "outputs": [
    {
      "name": "embedding"
    }
  ],
  "authIdentity": {
    "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
    "userAssignedIdentity": "/subscriptions/<subscription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-assigned-managed-identity-name>"
   }
}

以下是針對使用者指派的受控識別所設定的向量化程式範例。 向量化器被指定在搜尋索引中。

 "vectorizers": [
    {
      "name": "my_azure_open_ai_vectorizer",
      "kind": "azureOpenAI",
      "azureOpenAIParameters": {
        "resourceUri": "https://url.openai.azure.com",
        "deploymentId": "text-embedding-ada-002",
        "modelName": "text-embedding-ada-002"
        "authIdentity": {
            "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
            "userAssignedIdentity": "/subscriptions/<subscription_id>/resourcegroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-assigned-managed-identity-name>"
          }
      }
    }
  ]

檢查防火牆存取

如果您的 Azure 資源位於防火牆後方,請確定有入站規則允許來自搜尋服務和 Azure 入口網站的要求。

另請參閱