category
注:
截至2024年6月,不再需要微软管理的Azure AI搜索专用端点的申请表。
受管理的专用端点将于2025年7月从微软管理的虚拟网络中删除。如果您在2024年6月之前已经通过应用程序流程配置了托管私有端点,请尽早启用Azure AI Search可信服务,以避免服务中断。
通过本文了解如何使用Microsoft Entra ID基于角色的访问控制、虚拟网络和私有端点保护数据和资源,从而安全地使用Azure OpenAI On Your Data。
本文仅适用于使用带有文本的Azure OpenAI On Your Data时。它不适用于带有图像的Azure OpenAI On Your Data。
数据摄取架构
当您使用Azure OpenAI On Your Data将数据从Azure blob存储、本地文件或URL摄取到Azure AI搜索中时,将使用以下过程来处理数据。
显示摄取数据过程的图表。
- 步骤1和2仅用于文件上传。
- 此图中没有说明将URL下载到blob存储。从互联网下载网页并上传到blob存储后,步骤3及以后是相同的。
- 在Azure AI搜索资源中创建了两个索引器、两个索引、两个数据源和一个自定义技能。
- 块容器在blob存储中创建。
- 如果时间表触发摄取,则摄取过程从步骤7开始。
- Azure OpenAI的预处理作业API实现了Azure AI搜索客户技能web API协议,并在队列中处理文档。
- Azure OpenAI:
- 内部使用之前创建的第一个索引器来破解文档。
- 使用基于启发式的算法来执行分块。它尊重块边界中的表布局和其他格式化元素,以确保最佳的块质量。
- 如果您选择启用矢量搜索,Azure OpenAI将使用所选的嵌入设置对块进行矢量化。
- 当服务正在监视的所有数据都处理完毕后,Azure OpenAI会触发第二个索引器。
- 索引器将处理后的数据存储到Azure AI搜索服务中。
对于服务调用中使用的托管标识,只支持系统分配的托管标识。不支持用户分配的托管身份。
推理架构
显示使用推理API的过程的图表。
当你发送API调用与Azure OpenAI模型就你的数据聊天时,该服务需要在推理过程中检索索引字段,以执行字段映射。因此,即使在推理过程中,该服务也要求Azure OpenAI身份具有搜索服务的搜索服务贡献者角色。
如果推理请求中提供了嵌入依赖关系,Azure OpenAI将对重写的查询进行矢量化,并将查询和矢量发送到Azure AI Search进行矢量搜索。
文档级访问控制
注:
仅Azure AI搜索支持文档级访问控制。
Azure OpenAI On Your Data允许您使用Azure AI Search安全过滤器限制可用于不同用户响应的文档。启用文档级访问时,Azure AI Search将根据筛选器中指定的用户Microsoft Entra组成员资格修剪搜索结果。您只能对现有的Azure AI搜索索引启用文档级访问。要启用文档级访问,请执行以下操作:
- 要注册您的应用程序并创建用户和组,请按照Azure AI搜索文档中的步骤进行操作。
- 使用允许的组对文档进行索引。确保您的新安全字段具有以下架构:
JSON
{"name": "group_ids", "type": "Collection(Edm.String)", "filterable": true }
group_ids是默认字段名。如果使用不同的字段名,如my_group_ids,则可以在索引字段映射中映射该字段。
确保索引中的每个敏感文档都将此安全字段值设置为文档的允许组。
- 在Azure OpenAI Studio中,添加您的数据源。在索引字段映射部分,只要模式兼容,就可以将零个或一个值映射到允许的组字段。如果未映射允许的组字段,则禁用文档级访问。
Azure OpenAI工作室
连接Azure AI搜索索引后,您在工作室中的响应将根据登录用户的Microsoft Entra权限进行文档访问。
Web应用程序
如果您正在使用已发布的web应用程序,则需要重新部署它以升级到最新版本。最新版本的web应用程序包括检索登录用户的Microsoft Entra帐户的组、缓存该帐户以及在每个API请求中包含组ID的功能。
API
使用API时,在每个API请求中传递过滤器参数。例如:
JSON
{
"messages": [
{
"role": "user",
"content": "who is my manager?"
}
],
"dataSources": [
{
"type": "AzureCognitiveSearch",
"parameters": {
"endpoint": "'$AZURE_AI_SEARCH_ENDPOINT'",
"key": "'$AZURE_AI_SEARCH_API_KEY'",
"indexName": "'$AZURE_AI_SEARCH_INDEX'",
"filter": "my_group_ids/any(g:search.in(g, 'group_id1, group_id2'))"
}
}
]
}
my_group_ids是您在字段映射期间为允许的组选择的字段名。
group_id1、group_id2是归属于登录用户的组。客户端应用程序可以检索和缓存用户组。
资源配置
使用以下部分配置资源,以实现最佳的安全使用。即使你计划只保护部分资源,你仍然需要遵循所有步骤。
本文描述了与禁用Azure OpenAI资源、Azure AI搜索资源和存储帐户的公共网络相关的网络设置。不支持使用具有IP规则的选定网络,因为服务的IP地址是动态的。
创建资源组
创建一个资源组,以便组织所有相关资源。资源组中的资源包括但不限于:
- 一个虚拟网络
- 三个关键服务:一个Azure OpenAI、一个Azure AI搜索、一个存储帐户
- 三个私有端点,每个端点都链接到一个密钥服务
- 三个网络接口,每个接口都与一个专用端点相关联
- 一个虚拟网络网关,用于从本地客户端机器进行访问
- 一个集成了虚拟网络的Web应用程序
- 一个专用DNS区域,因此Web应用程序可以找到Azure OpenAI的IP
创建虚拟网络
虚拟网络有三个子网。
- 第一个子网用于虚拟网络网关。
- 第二个子网用于三个关键服务的专用端点。
- 第三个子网为空,用于Web App出站虚拟网络集成。
显示虚拟网络体系结构的图。
配置Azure OpenAI
已启用自定义子域
基于Microsoft Entra ID的身份验证和私有DNS区域需要自定义子域。如果Azure OpenAI资源是使用ARM模板创建的,则必须明确指定自定义子域。
启用托管身份
为了允许您的Azure AI搜索和存储帐户通过Microsoft Entra ID身份验证识别您的Azure OpenAI服务,您需要为您的Azure Open AI服务分配一个托管身份。最简单的方法是在Azure门户上启用系统分配的托管标识。显示Azure门户中系统分配的托管身份选项的屏幕截图。
要通过管理API设置托管标识,请参阅管理API参考文档。
JSON
复制
"identity": {
"principalId": "12345678-abcd-1234-5678-abc123def",
"tenantId": "1234567-abcd-1234-1234-abcd1234",
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"/subscriptions/1234-5678-abcd-1234-1234abcd/resourceGroups/my-resource-group",
"principalId": "12345678-abcd-1234-5678-abcdefg1234",
"clientId": "12345678-abcd-efgh-1234-12345678"
}
}
启用可信服务
若要允许Azure AI搜索将Azure OpenAI预处理作业调用为自定义技能web API,而Azure OpenAI没有公共网络访问权限,您需要设置Azure OpenAI以绕过Azure AI搜索,将其作为基于托管身份的可信服务。Azure OpenAI通过验证JSON Web令牌(JWT)中的声明来识别来自Azure AI搜索的流量。Azure AI搜索必须使用系统分配的托管身份验证来调用自定义技能web API。
从管理API中将networkAcls.bypass设置为AzureServices。有关更多信息,请参阅虚拟网络文章。
只有当您拥有Azure AI搜索资源的共享私有链接时,才能跳过此步骤。
禁用公共网络访问
您可以在Azure门户中禁用Azure OpenAI资源的公共网络访问。
要允许从客户端计算机访问Azure OpenAI服务,例如使用Azure OpenAI Studio,您需要创建连接到Azure OpenAI资源的私有端点连接。
配置Azure AI搜索
您可以对搜索资源使用基本定价层或更高定价层。这不是必需的,但如果您使用S2定价层,则可以使用高级选项。
启用托管身份
为了允许您的其他资源使用Microsoft Entra ID身份验证识别Azure AI搜索,您需要为Azure AI搜索分配一个托管身份。最简单的方法是在Azure门户中打开系统分配的托管标识。
显示Azure门户中Azure AI搜索的托管身份设置的屏幕截图。
启用基于角色的访问控制
由于Azure OpenAI使用托管身份访问Azure AI搜索,因此您需要在Azure AI搜索中启用基于角色的访问控制。若要在Azure门户上执行此操作,请在Azure门户的“密钥”选项卡中选择“基于两者”或“基于角色”的访问控制。
显示Azure门户中Azure AI搜索的托管身份选项的屏幕截图。
有关更多信息,请参阅Azure AI Search RBAC文章。
禁用公共网络访问
您可以在Azure门户中禁用Azure AI搜索资源的公共网络访问。
要允许从客户端计算机访问Azure AI搜索资源,例如使用Azure OpenAI Studio,您需要创建连接到Azure AI搜索源的私有端点连接。
启用可信服务
您可以从Azure门户启用搜索资源的可信服务。
转到搜索资源的网络选项卡。在公共网络访问设置为禁用的情况下,选择允许受信任服务列表上的Azure服务访问此搜索服务。
显示搜索可信服务的图表。
您还可以使用REST API来启用可信服务。此示例使用Azure CLI和jq工具。
Bash
rid=/subscriptions/<YOUR-SUBSCRIPTION-ID>/resourceGroups/<YOUR-RESOURCE-GROUP>/providers/Microsoft.Search/searchServices/<YOUR-RESOURCE-NAME>
apiVersion=2024-03-01-Preview
#store the resource properties in a variable
az rest --uri "https://management.azure.com$rid?api-version=$apiVersion" > search.json
#replace bypass with AzureServices using jq
jq '.properties.networkRuleSet.bypass = "AzureServices"' search.json > search_updated.json
#apply the updated properties to the resource
az rest --uri "https://management.azure.com$rid?api-version=$apiVersion" \
--method PUT \
--body @search_updated.json
创建共享私有链接
小贴士如果您使用的是基本或标准定价层,或者这是您第一次安全地设置所有资源,则应跳过此高级主题。
本节仅适用于S2定价层搜索资源,因为它需要为具有特定技能的索引器提供私有端点支持。
若要从连接到Azure OpenAI资源的搜索资源创建共享私有链接,请参阅搜索文档。选择资源类型为Microsoft。识别服务/帐户和组ID为openai_account。
在共享私有链路的情况下,数据摄取架构图的步骤8从绕过可信服务更改为共享私有链路。
显示使用S2搜索资源摄取数据的过程的图。
配置存储帐户
启用可信服务
要允许从Azure OpenAI和Azure AI搜索访问您的存储帐户,您需要设置存储帐户,以绕过基于托管身份的受信任服务Azure OpenAI或Azure AI搜索。
在Azure门户中,导航到您的存储帐户网络选项卡,选择“选定网络”,然后选择允许受信任服务列表上的Azure服务访问此存储帐户,然后单击保存。
禁用公共网络访问
您可以在Azure门户中禁用存储帐户的公共网络访问。
要允许从客户端计算机访问您的存储帐户,例如使用Azure OpenAI Studio,您需要创建连接到blob存储的私有端点连接。
角色分配
到目前为止,您已经独立设置了每个资源工作。接下来,您需要允许这些服务相互授权。
Role | Assignee | Resource | Description |
---|---|---|---|
Search Index Data Reader |
Azure OpenAI | Azure AI Search | Inference service queries the data from the index. |
Search Service Contributor |
Azure OpenAI | Azure AI Search | Inference service queries the index schema for auto fields mapping. Data ingestion service creates index, data sources, skill set, indexer, and queries the indexer status. |
Storage Blob Data Contributor |
Azure OpenAI | Storage Account | Reads from the input container, and writes the preprocessed result to the output container. |
Cognitive Services OpenAI Contributor |
Azure AI Search | Azure OpenAI | Custom skill. |
Storage Blob Data Reader |
Azure AI Search | Storage Account | Reads document blobs and chunk blobs. |
Cognitive Services OpenAI User |
Web app | Azure OpenAI | Inference. |
在上表中,受让人是指系统分配的该资源的托管标识。
管理员需要在这些资源上具有所有者角色才能添加角色分配。
有关在Azure门户中设置这些角色的说明,请参阅Azure RBAC文档。您可以使用GitHub上的可用脚本以编程方式添加角色分配。
为了使开发人员能够使用这些资源构建应用程序,管理员需要将开发人员的身份与以下角色分配添加到资源中。
角色资源描述
Role | Resource | Description |
---|---|---|
Cognitive Services OpenAI Contributor |
Azure OpenAI | Call public ingestion API from Azure OpenAI Studio. The Contributor role is not enough, because if you only have Contributor role, you cannot call data plane API via Microsoft Entra ID authentication, and Microsoft Entra ID authentication is required in the secure setup described in this article. |
Cognitive Services User |
Azure OpenAI | List API-Keys from Azure OpenAI Studio. |
Contributor |
Azure AI Search | List API-Keys to list indexes from Azure OpenAI Studio. |
Contributor |
Storage Account | List Account SAS to upload files from Azure OpenAI Studio. |
Contributor |
The resource group or Azure subscription where the developer need to deploy the web app to | Deploy web app to the developer's Azure subscription. |
配置网关和客户端
要从本地客户端计算机访问Azure OpenAI服务,其中一种方法是配置Azure VPN网关和Azure VPN客户端。
按照此指南为您的虚拟网络创建虚拟网络网关。
按照此指南添加点到站点配置,并启用基于Microsoft Entra ID的身份验证。下载Azure VPN客户端配置文件包,解压缩并将AzureVPN/azurevpnconfig.xml文件导入到您的Azure VPN客户端。
显示在何处导入Azure VPN客户端配置文件的屏幕截图。
配置本地机器主机文件,将资源主机名指向虚拟网络中的专用IP。主机文件位于Windows的C:\Windows\System32\drivers\etc和Linux的/etc/hosts。例子:
10.0.0.5 contoso.openai.azure.com
10.0.0.6 contoso.search.windows.net
10.0.0.7 contoso.blob.core.windows.net
Azure OpenAI工作室
您应该能够从本地客户端机器使用所有Azure OpenAI Studio功能,包括摄取和推理。
Web应用程序
web应用程序与您的Azure OpenAI资源通信。由于您的Azure OpenAI资源已禁用公共网络,因此需要设置web应用程序以使用虚拟网络中的私有端点访问您的Azure Open AI资源。
web应用程序需要将您的Azure OpenAI主机名解析为Azure OpenAI私有端点的私有IP。因此,您需要首先为虚拟网络配置专用DNS区域。
- 在资源组中创建专用DNS区域。
- 添加DNS记录。IP是Azure OpenAI资源的私有端点的私有IP,您可以从与Azure OpenAI的私有端点关联的网络接口获取IP地址。
将专用DNS区域链接到您的虚拟网络,以便集成在此虚拟网络中的web应用程序可以使用此专用DNS区域。 - 从Azure OpenAI Studio部署web应用程序时,请选择与虚拟网络相同的位置,并选择适当的SKU,以便它可以支持虚拟网络集成功能。
部署web应用程序后,从Azure门户网络选项卡配置web应用程序出站流量虚拟网络集成,选择为web应用程序保留的第三个子网。
显示web应用程序出站流量配置的屏幕截图。
使用API
确保您的登录凭据在Azure OpenAI资源上具有Cognitive Services OpenAI Contributor角色,并首先运行az login。
Azure门户中显示认知服务OpenAI贡献者角色的屏幕截图。
API摄入
有关摄入API使用的请求和响应对象的详细信息,请参阅摄入API参考文章。
推论API
有关推理API使用的请求和响应对象的详细信息,请参阅推理API参考文章。
使用Microsoft Defender for Cloud
现在,您可以将Microsoft Defender for Cloud(预览版)与Azure资源集成,以保护您的应用程序。Microsoft Defender for Cloud通过针对AI工作负载的威胁防护来保护您的应用程序,为团队提供基于证据的安全警报,其中富含Microsoft威胁情报信号,并使团队能够通过集成的安全最佳实践建议来加强其安全态势。
使用此表格申请访问权限。
显示Microsoft Defender for Cloud的屏幕截图。
- 登录 发表评论
- 8 次浏览
Tags
最新内容
- 1 day 9 hours ago
- 1 day 12 hours ago
- 1 day 12 hours ago
- 4 days 4 hours ago
- 4 days 11 hours ago
- 4 days 12 hours ago
- 4 days 12 hours ago
- 4 days 12 hours ago
- 1 week 1 day ago
- 1 week 1 day ago