使用托管标识连接到 Azure 存储(Azure AI 搜索)

本文介绍如何使用托管标识(而不是通过在连接字符串中提供凭据)来配置搜索服务与 Azure 存储帐户的连接。

可以使用系统分配的托管标识或用户分配的托管标识。 托管标识是 Microsoft Entra 登录名,需要角色分配才能访问 Azure 存储。

先决条件

  • Azure AI 搜索基本层或更高层,具有托管标识

注意

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

在 Azure 存储中创建角色分配

  1. 登录到 Azure 门户并找到你的存储帐户。

  2. 选择“访问控制(IAM)”。

  3. 选择“添加”,然后选择“角色分配”

  4. 从工作职能角色列表中,选择搜索服务所需的角色:

    任务 角色分配
    使用索引器进行 Blob 索引编制 添加“存储 Blob 数据读取者”
    使用索引器进行 ADLS Gen2 索引编制 添加“存储 Blob 数据读取者”
    使用索引器进行表索引编制 添加“读取者和数据访问”
    使用索引器进行文件索引编制 添加“读取者和数据访问”
    写入到知识存储 添加适用于对象和文件投影的“存储 Blob 数据参与者”,以及适用于表投影的“读取者和数据访问”。
    写入到扩充缓存 添加“存储 Blob 数据参与者”
    保存调试会话状态 添加“存储 Blob 数据参与者”
  5. 选择下一步

  6. 选择“托管标识”,然后选择“成员”

  7. 按系统分配的托管标识或用户分配的托管标识进行筛选。 你应会看到之前为搜索服务创建的托管标识。 如果没有托管标识,请参阅配置搜索以使用托管标识。 如果已设置托管标识但它不可用,请等待几分钟。

  8. 选择标识并保存角色分配。

在连接字符串中指定托管标识

创建角色分配后,可以设置与该角色下运行的 Azure 存储的连接。

索引器使用数据源对象连接到外部数据源。 本部分介绍如何在数据源连接字符串上指定系统分配的托管标识或用户分配的托管标识。 可以在有关托管标识的文章中找到更多连接字符串示例

提示

可以在 Azure 门户中创建数据源与 Azure 存储的连接,指定系统或用户分配的托管标识,然后查看 JSON 定义以了解连接字符串的构建方式。

系统分配的托管标识

必须事先配置系统分配的托管标识,并且该标识必须在 Azure 存储上具有角色分配。

对于使用系统分配的托管标识建立的连接,对数据源定义的唯一更改是 credentials 属性的格式。

提供没有帐户密钥或密码的 ResourceIdResourceId 必须包含存储帐户的订阅 ID、存储帐户的资源组和存储帐户名称。

POST https://[service name].search.azure.cn/datasources?api-version=2024-07-01

{
    "name" : "blob-datasource",
    "type" : "azureblob",
    "credentials" : { 
        "connectionString" : "ResourceId=/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/MY-DEMO-RESOURCE-GROUP/providers/Microsoft.Storage/storageAccounts/MY-DEMO-STORAGE-ACCOUNT/;" 
    },
    "container" : { 
        "name" : "my-container", "query" : "<optional-virtual-directory-name>" 
    }
}   

用户分配的托管标识

必须事先配置用户分配的托管标识并将其与搜索服务关联,并且该标识必须在 Azure 存储上具有角色分配。

通过用户分配的托管标识建立的连接使用与系统分配的托管标识相同的凭据,外加一个包含用户分配的托管标识集合的额外标识属性。 创建数据源时,只应提供一个用户分配的托管标识。 将 userAssignedIdentity 设置为用户分配的托管标识。

提供没有帐户密钥或密码的 ResourceIdResourceId 必须包含存储帐户的订阅 ID、存储帐户的资源组和存储帐户名称。

使用以下示例中所示的语法提供 identity

POST https://[service name].search.azure.cn/datasources?api-version=2024-07-01

{
    "name" : "blob-datasource",
    "type" : "azureblob",
    "credentials" : { 
        "connectionString" : "ResourceId=/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/MY-DEMO-RESOURCE-GROUP/providers/Microsoft.Storage/storageAccounts/MY-DEMO-STORAGE-ACCOUNT/;" 
    },
    "container" : { 
        "name" : "my-container", "query" : "<optional-virtual-directory-name>" 
    },
    "identity" : { 
        "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
        "userAssignedIdentity" : "/subscriptions/00000000-0000-0000-0000-00000000/resourcegroups/MY-DEMO-RESOURCE-GROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/MY-DEMO-USER-MANAGED-IDENTITY" 
    }
}   

在索引器执行期间,在运行时会验证远程服务上的连接信息和权限。 如果索引器成功,则表明连接语法和角色分配有效。 有关详细信息,请参阅运行或重置索引器、技能或文档

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

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

另请参阅