다음을 통해 공유

使用 Azure AI 搜索索引器引入 Azure Purview 敏感度标签并强制实施文档级安全性

注释

此功能目前处于公开预览状态。 此预览版未随附服务级别协议,建议不要用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅适用于 Azure 预览版的补充使用条款

Azure AI 搜索现在支持在索引编制期间自动提取文档级别 Microsoft Purview 敏感度标签 ,并在查询时强制执行基于标签的访问控制。 此功能在公共预览版中提供,使组织能够将搜索体验与 Azure Purview 中定义的现有 信息保护策略 保持一致。

使用敏感度标签索引,Azure AI 搜索提取并存储描述每个文档敏感度级别的元数据。 它还强制实施基于标签的访问控制,确保只有经过授权的用户才能在搜索结果中查看或检索标记的内容。

此功能适用于以下数据源:

重要

目前不支持管理员的门户配置和调试模式。

策略强制执行

在查询时,Azure AI 搜索会评估敏感度标签,并根据用户的 Microsoft Entra ID 令牌和 Purview 标签策略强制实施 文档级访问控制

只有有权在给定标签下访问具有 READ 使用权限 的内容的用户才能在搜索结果中检索相应的文档。 在更改之后,从文档提取标签的频率会有延迟。

按计划配置时,索引器将从数据源拉取新文档和更新。 它捕获:

  • 新添加的文档及其关联的敏感度标签
  • 文档内容更改
  • 对现有文档的敏感度标签的更新

如果自上次运行索引器以来发生这些更新,则会检测到这些更新。

先决条件

  • Microsoft Purview 敏感度标签策略必须在编制索引之前配置并 应用于文档

  • Microsoft Entra 租户中的全局管理员特权角色管理员角色需要授予搜索服务对 Purview API 和敏感度标签的访问权限。

  • Azure AI 搜索服务和查询内容的最终用户必须属于同一Microsoft Entra 租户。 不支持来宾用户和多租户方案。

  • 文件类型必须包含在 Purview 敏感度标签支持的格式列表中,并且也可以被 Azure AI 搜索索引器识别为 Office 支持的文件类型

局限性

  • 文档删除和敏感度标签存在已知问题。 为索引启用敏感度标签时,索引器无法枚举索引的文档。 因此,软删除作不会运行,因为索引器无法列出需要删除的文档。 这适用于支持软删除的索引器,包括 Azure Blob、ADLS Gen2、OneLake、SharePoint。

  • 初始版本仅支持 REST API 版本 2025-11-01-preview 和关联的 beta SDK。 没有用于配置或管理的门户体验。

  • 当与 基于 ACL 的安全筛选器 同时使用(目前也处于预览状态)时,不支持此功能。 独立测试每个功能,直到 Azure 宣布正式共存支持。

  • 为启用了 Purview 的索引禁用自动完成建议 API,因为它们尚不能强制实施基于标签的访问控制。

  • 不支持来宾帐户和跨租户查询。

  • 在初始版本中,启用敏感度标签的索引不支持未标记的文档,也不会在查询结果中返回它们。 此功能将在可用时编入文档。

  • 以下索引器功能不支持具有敏感度标签的文档。 如果在技能组或索引器中使用这些功能中的任何一项,它们不会处理这些文档。

    • 自定义 Web API 技能
    • GenAI 提示技能
    • 知识存储
    • 索引器扩充缓存
    • 调试会话

若要在 Azure AI 搜索中配置敏感度标签同步,必须遵循以下步骤。

1. 启用 AI 搜索托管标识

为 Azure AI 搜索服务启用系统分配的托管标识。 索引器需要此标识才能安全地访问 Azure Purview 并提取标签元数据。

2. 在 AI 搜索服务上启用 RBAC

在 Azure AI 搜索服务上启用基于角色的访问控制(RBAC)。 此步骤是必需的,以确保与内容相关的操作(如索引内容和查询索引)能够成功。 保留 RBAC 和 API 密钥,以避免中断依赖于 API 密钥的作。

3. 授予权限以提取敏感度标签

访问 Azure Purview 敏感度标签元数据涉及高特权作,包括读取加密内容和安全分类。 若要在 Azure AI 搜索中启用此功能,必须按照组织的内部治理和审批流程,向服务的托管标识授予特定角色。

标识全局或特权角色管理员

如果需要确定谁可以授权搜索服务的权限,可以在 Microsoft Entra 租户中找到活动或符合条件的全局管理员。

  1. Azure 门户中,搜索“Microsoft Entra ID”

    Microsoft Entra 产品搜索动作的屏幕截图。

  2. 在左侧导航窗格中,选择“ 管理 > 角色”和“管理员”。

    Entra 角色和管理员页面的屏幕截图。

  3. 搜索 全局管理员特权角色管理员 角色,并选择它。

    全局管理员角色选择的屏幕截图。

  4. “合格分配 ”和 “活动分配”下,查看有权运行权限设置过程的管理员列表。

    符合条件的角色和活动分配的屏幕截图。

安全治理审批

让内部安全或合规性团队查看请求。 在继续执行任何角色分配之前,Azure 建议遵循公司的标准治理和安全评审过程。

获得批准后,全局管理员或特权角色管理员必须为Azure AI 搜索的系统分配托管标识分配以下角色:

  • Content.SuperUser - 用于标签和内容提取
  • UnifiedPolicy.Tenant.Read - 用于 Purview 策略和标签元数据访问

通过 PowerShell 分配角色

全局管理员或特权角色管理员应使用以下 PowerShell 脚本授予所需的权限。 将占位符值替换为实际订阅、资源组和搜索服务名称。

Install-Module -Name Az -Scope CurrentUser
Install-Module -Name Microsoft.Entra -AllowClobber
Import-Module Az.Resources
Connect-Entra -Scopes 'Application.ReadWrite.All'

$resourceIdWithManagedIdentity = "subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Search/searchServices/<searchServiceName>"
$managedIdentityObjectId = (Get-AzResource -ResourceId $resourceIdWithManagedIdentity).Identity.PrincipalId

# Azure Information Protection (MIP)
$MIPResourceSP = Get-EntraServicePrincipal -Filter "appID eq '870c4f2e-85b6-4d43-bdda-6ed9a579b725'"
New-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentityObjectId -Principal $managedIdentityObjectId -ResourceId $MIPResourceSP.Id -Id "8b2071cd-015a-4025-8052-1c0dba2d3f64"

# ARM Service Principal for policy read
$ARMSResourceSP = Get-EntraServicePrincipal -Filter "appID eq '00000012-0000-0000-c000-000000000000'"
New-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentityObjectId -Principal $managedIdentityObjectId -ResourceId $ARMSResourceSP.Id -Id "7347eb49-7a1a-43c5-8eac-a5cd1d1c7cf0"

提供的 PowerShell 脚本中的 appID 角色与以下 Azure 角色相关联:

AppID 服务主体
870c4f2e-85b6-4d43-bdda-6ed9a579b725 Azure 信息保护同步服务
00000012-0000-0000-c000-000000000000 Azure Resource Manager

4.配置索引以启用 Purview 敏感度标签

如果需要敏感度标签支持,请在 索引定义中将 purviewEnabled 属性设置为 true。

重要

创建索引时,purviewEnabled 属性必须设置为 true。 此设置是永久性的,以后无法修改。 当purviewEnabled设置为true时,API的所有文档操作仅支持RBAC身份验证。 API 密钥访问仅限于索引架构检索(列表和获取)。

PUT https://{service}.search.azure.cn/indexes('{indexName}')?api-version=2025-11-01-preview
{
  "purviewEnabled": true,
  "fields": [
    {
      "name": "sensitivityLabel",
      "type": "Edm.String",
      "filterable": true,
      "sensitivityLabel": true,
      "retrievable": true
    }
  ]
}

5. 配置数据源

若要启用敏感度标签引入,请使用 indexerPermissionOptions 属性设置为 [“sensitivityLabel”] 配置 数据源

{
  "name": "purview-sensitivity-datasource",
  "type": "azureblob", // < adjust type value according to the data source you are enabling this for: sharepoint, onelake, adlsgen2.
  "indexerPermissionOptions": [ "sensitivityLabel" ],
  "credentials": {
    "connectionString": <your-connection-string>;"
  },
  "container": {
    "name": "<container-name>"
  }
}

indexerPermissionOptions 属性指示索引器在引入过程中提取敏感度标签元数据,并将其附加到索引文档。

6.在技能集中配置索引投影(如果适用)

如果索引器具有 技能集 ,并且通过 拆分技能实现数据分块,例如,如果已集成向量化,则必须确保通过 技能集中的索引投影将敏感度标签映射到每个区块。

PUT https://{service}.search.azure.cn/skillsets/{skillset}?api-version=2025-11-01-preview
{
  "name": "my-skillset",
  "skills": [
    {
      "@odata.type": "#Microsoft.Skills.Text.SplitSkill",
      "name": "#split",
      "context": "/document",
      "inputs": [{ "name": "text", "source": "/document/content" }],
      "outputs": [{ "name": "textItems", "targetName": "chunks" }]
    }
    // ... (other skills such as embeddings, entity recognition, etc.)
  ],
  "indexProjections": {
    "selectors": [
      {
        "targetIndexName": "chunks-index",
        "parentKeyFieldName": "parentId",          // must exist in target index
        "sourceContext": "/document/chunks/*",     // match your split output path
        "mappings": [
          { "name": "chunkId",           "source": "/document/chunks/*/id" },     // if you create an id per chunk
          { "name": "content",           "source": "/document/chunks/*/text" },   // chunk text
          { "name": "parentId",          "source": "/document/id" },              // parent doc id
          { "name": "sensitivityLabel",  "source": "/document/metadata_sensitivity_label" } // <-- parent → child
        ]
      }
    ],
    "parameters": {
      "projectionMode": "skipIndexingParentDocuments"
    }
  }
}

7. 配置索引器

  • 索引器定义 中定义字段映射,以将提取的标签元数据路由到索引字段。 如果数据源以不同的字段名称(例如,metadata_sensitivity_label)发出标签元数据,请显式映射它。
{
  "fieldMappings": [
    {
      "sourceFieldName": "metadata_sensitivity_label",
      "targetFieldName": "sensitivityLabel"
    }
  ]
}
  • 在计划的索引器运行期间检测到对文档标签、内容或元数据的更改时,敏感度标签更新会自动编制索引。 按定期计划配置索引器。 支持的最小间隔为每 5 分钟一次。

后续步骤

如何查询已启用敏感度标签的索引

Azure AI 搜索中的文档级安全性