您可以使用 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 資源進行驗證。 然後,您可以在角色指派中使用此身分識別,以取得數據與作業的授權存取權。
登入 Azure 入口網站,然後尋找您的搜尋服務。
從左窗格中,選取 [設定]> [身分識別]。
在 [系統指派] 索引標籤的 [狀態] 底下,選取 [開啟]。
選取 [儲存]。
儲存設定之後,即會更新頁面以顯示指派給搜尋服務的物件識別碼。
建立使用者指派的管理型身分識別
使用者指派的受控識別是一種 Azure 資源,範圍可涵蓋訂用帳戶、資源群組或資源類型。
如果您希望能夠讓角色指派更細緻,則可以建立多個使用者指派的受控識別。 例如,您可能想要在不同的應用程式和案例中使用不同的身分識別。 作為獨立建立和受控的資源,它不會繫結至服務本身。
設定使用者指派受控識別的步驟如下所示:
在您的 Azure 訂用帳戶中,建立使用者指派的受控識別。
在您的搜尋服務上,將使用者指派的受控識別與您的搜尋服務產生關聯。
在您要連線的其他 Azure 服務上,建立該身分識別的角色指派。
Azure 入口網站、搜尋管理 REST API 和提供此功能的 SDK 套件支援將使用者指派的受控識別與 Azure AI 搜尋服務產生關聯。
登入 Azure 入口網站。
在儀表板左上角,選取 [建立資源]。
使用搜尋方塊來尋找 [使用者指派的受控識別],然後選取 [建立]。
選取訂用帳戶、資源群組和區域。 為身分識別提供描述性名稱。
選取 [建立] 並等候資源完成部署。
您必須在幾分鐘後才能使用該身分識別。
在搜尋服務頁面,選取 [設定]> [身分識別]。
在 [使用者指派] 索引標籤上,選取 [新增]。
選取訂用帳戶和您先前建立的使用者指派的受控識別。
指派角色
擁有受控識別之後,請指派角色,以決定 Azure 資源的搜尋服務權限。
索引子資料連線以及在 Azure Key Vault 中存取客戶自控金鑰,都需要讀取權限。
使用 Azure 儲存體裝載偵錯工作階段資料、擴充快取和知識存放區長期內容儲存體的 AI 擴充功能,需要寫入權限。
下列步驟說明角色指派工作流程。 此範例適用於 Azure OpenAI。 如需其他 Azure 資源,請參閱連線至 Azure 儲存體、連線至 Azure Cosmos DB 或連線至 Azure SQL。
使用您的 Azure 帳戶登入 Azure 入口網站,然後前往您的 Azure OpenAI 資源。
從左側功能表中選取 [存取控制]。
選取 [新增],然後選取 [新增角色指派]。
在 [成員] 底下,選取 [受控識別],然後選取 [成員]。
依訂用帳戶和資源類型篩選 (搜尋服務),然後選取搜尋服務的受控識別。
選擇 檢閱 + 指派。
連接字串範例
從案例描述中回想一下,您可以在對其他 Azure 資源的連線字串中使用受控識別。 本節提供範例。 您可以使用系統指派的受控識別,使用一般可用的 REST API 版本和 Azure SDK 套件進行連線。
小提示
您可以在 Azure 入口網站中建立大部分的物件,並指定系統或使用者指派的受控識別,然後檢視 JSON 定義以取得連接字串。
以下是各種案例的連接字串範例。
索引器數據源包含 credentials 屬性,可決定如何連接數據源。 下列範例顯示指定儲存體帳戶唯一資源身分識別碼的連接字串。
當連接字串是 Microsoft Entra ID 感知服務或應用程式的唯一資源識別碼時,這表示該系統具有受控識別。 使用者指派的受控識別是透過 identity 屬性來指定。
"credentials": {
"connectionString": "ResourceId=/subscriptions/{subscription-ID}/resourceGroups/{resource-group-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name};"
}
使用者指派的受控識別也可以在索引器數據源連接字串中使用。 不過,只有較新的預覽 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 入口網站的要求。
針對與 Azure Blob 儲存體或 Azure Data Lake Storage Gen2 的相同區域連線,請使用系統受控識別和受信任的服務例外狀況。 您可以選擇性地設定資源執行個體規則來允許要求。
針對所有其他資源和連線, 設定可允許來自 Azure AI 搜尋要求的 IP 防火牆規則 。 如需詳細資料,請參閱索引子存取受 Azure 網路安全性功能保護的內容。