你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用托管标识设置到 Azure 存储的索引器连接

本文说明了如何使用托管标识设置到 Azure 存储帐户的索引器连接,而不是在连接字符串中提供凭据。

可以使用系统分配的托管标识或用户分配的托管标识(预览版)。 托管标识是 Microsoft Entra ID 登录名,需要 Azure 角色分配才能访问 Azure 存储中的数据。

注意

如果存储受网络保护并且与搜索服务位于同一区域,则必须使用系统分配的托管标识和以下任一网络选项:作为受信任的服务进行连接使用资源实例规则进行连接

先决条件

  • 为搜索服务创建托管标识

  • 在 Azure 存储中分配角色

    • 在用于在 Blob 存储和 ADLS Gen2 中数据读取访问中选择“存储 blob 数据读取器”。

    • 在表存储和文件存储中选择用于数据读取访问的“读取器和数据”。

  • 你应熟悉索引器概念配置

提示

有关 C# 中的代码示例,请参阅 GitHub 上的使用 Microsoft Entra ID 为 Data Lake Gen2 编制索引

创建数据源

创建数据源并提供系统分配的托管标识或用户分配的托管标识(预览版)。

系统分配的托管标识

REST API、Azure 门户和 .NET SDK 支持使用系统分配的托管标识。

使用系统分配的托管标识进行连接时,对数据源定义的唯一更改是“凭据”属性的格式。 提供没有帐户密钥或密码的 ResourceId。 ResourceId 必须包含存储帐户的订阅 ID、存储帐户的资源组和存储帐户名称。

下面的示例演示如何使用创建数据源 REST API 和托管标识连接字符串创建数据源以索引存储帐户的数据。 对于 REST API、.NET SDK 和 Azure 门户,托管标识连接字符串格式是相同的。

POST https://[service name].search.windows.net/datasources?api-version=2023-11-01
Content-Type: application/json
api-key: [admin key]

{
    "name" : "blob-datasource",
    "type" : "azureblob",
    "credentials" : { 
        "connectionString" : "ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Storage/storageAccounts/[storage account name]/;" 
    },
    "container" : { 
        "name" : "my-container", "query" : "<optional-virtual-directory-name>" 
    }
}   

用户分配的托管标识(预览版)

2021-04-30-preview REST API 支持基于用户分配的托管标识的连接。 使用用户分配的托管标识进行连接时,对数据源定义进行了两项更改:

  • 首先,“凭据”属性的格式是一个没有帐户密钥或密码的 ResourceId。 ResourceId 必须包含存储帐户的订阅 ID、存储帐户的资源组和存储帐户名称。 此格式与系统分配的托管标识的格式相同。

  • 其次,添加一个包含用户分配的托管标识的“标识”属性。 创建数据源时,只应提供一个用户分配的托管标识。 将其设置为类型“userAssignedIdentities”。

下面的示例演示如何使用预览版创建或更新数据源 REST API 创建索引器数据源对象:

POST https://[service name].search.windows.net/datasources?api-version=2021-04-30-preview
Content-Type: application/json
api-key: [admin key]

{
    "name" : "blob-datasource",
    "type" : "azureblob",
    "credentials" : { 
        "connectionString" : "ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Storage/storageAccounts/[storage account name]/;" 
    },
    "container" : { 
        "name" : "my-container", "query" : "<optional-virtual-directory-name>" 
    },
    "identity" : { 
        "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
        "userAssignedIdentity" : "/subscriptions/[subscription ID]/resourcegroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]" 
    }
}   

创建索引

索引指定文档、属性和其他构造中可以塑造搜索体验的字段。

下面介绍了使用可搜索 content 字段创建索引 REST API 调用,以存储从 Blob 中提取的文本:

POST https://[service name].search.windows.net/indexes?api-version=2023-11-01
Content-Type: application/json
api-key: [admin key]

{
        "name" : "my-target-index",
        "fields": [
        { "name": "id", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "content", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false }
        ]
}

创建索引器

索引器将数据源与目标搜索索引关联,并提供自动执行数据刷新的计划。 创建索引和数据源后,就可以创建和运行索引器。 如果索引器成功,则表明连接语法和角色分配有效。

下面是一个带有 Blob 索引器定义的创建索引器 REST API 调用。 提交请求时,索引器将开始运行。

POST https://[service name].search.windows.net/indexers?api-version=2023-11-01
Content-Type: application/json
api-key: [admin key]

{
    "name" : "blob-indexer",
    "dataSourceName" : "blob-datasource",
    "targetIndexName" : "my-target-index"
}

访问存储帐户中的网络安全数据

可使用防火墙和虚拟网络进一步保护 Azure 存储帐户。 如果要为使用防火墙或虚拟网络保护的存储帐户中的内容编制索引,请参阅将索引器作为受信任的服务连接到 Azure 存储

另请参阅