如何扩展AOAI Studio生成的索引以添加Data Lake Gen 2 ACL信息
扩展Azure认知搜索索引与索引器导入ADLS Gen2 ACL信息方案
1. 扩展现有搜索索引添加ACL字段
先修改自动创建的搜索索引,新增用于存储权限信息的字段,适配Entra用户组权限控制需求:
allowedGroups:类型设为Collection(Edm.String),用于存储允许访问该文档的Entra用户组ID集合- (可选)
allowedUsers:类型设为Collection(Edm.String),若需限制单个用户访问可添加
操作方式
通过Azure CLI修改:
- 导出现有索引定义:
az search index show --name <你的索引名称> --resource-group <资源组名称> --service-name <搜索服务名称> > index-def.json
- 在
fields数组中添加上述字段后,执行更新:
az search index create --name <你的索引名称> --resource-group <资源组名称> --service-name <搜索服务名称> --file index-def.json --merge
2. 配置索引器提取ADLS Gen2 ACL信息
自动创建的索引器默认不提取ACL,需调整数据源配置与字段映射:
- 确保数据源权限:数据源使用系统分配托管标识,且该标识拥有ADLS Gen2容器的
Storage Blob Data Reader权限,保证能读取Blob的元数据与ACL信息 - 字段映射配置:
若已将允许的用户组ID以分号/逗号分隔的形式存入Blob自定义元数据(比如x-ms-meta-allowedgroups字段),可直接通过内置映射函数提取:
"fieldMappings": [ // 保留原有字段映射 { "sourceFieldName": "metadata_x-ms-meta-allowedgroups", "targetFieldName": "allowedGroups", "mappingFunction": { "name": "split", "parameters": { "delimiter": ";" } } } ]
若依赖ADLS Gen2原生POSIX ACL,可通过添加自定义技能调用存储API获取权限并解析组ID,但优先推荐自定义元数据方式,避免额外预处理工作。
3. 在Azure OpenAI聊天界面实现ACL过滤
用户发起查询时,需在搜索请求中加入安全筛选器,将当前用户所属的Entra组ID与索引中allowedGroups字段匹配。构造筛选条件示例:
allowedGroups/any(g: g eq '<组ID1>' or g eq '<组ID2>')
通过Azure OpenAI的data_source参数调用搜索时,将上述条件传入filter字段即可。
4. 验证权限控制效果
- 手动触发索引器运行,检查索引中
allowedGroups字段是否正确填充目标组ID - 使用不同用户组的账号登录聊天界面,验证仅能访问对应权限范围内的文档
内容的提问来源于stack exchange,提问作者Epstone
相关产品推荐
相关产品推荐

