你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Azure Front Door 上的 Azure Web 应用程序防火墙来保护 Azure OpenAI
使用 Azure OpenAI API 的企业越来越多,针对 Web 应用程序的安全攻击的数量和复杂性也在不断发展。 要保护 Azure OpenAI API 免受各种 Web 应用程序攻击,必须制定强大的安全策略。
Azure Web 应用程序防火墙 (WAF) 是一种 Azure 网络产品,可保护 Web 应用程序和 API 免受 OWASP 十大 Web 攻击、常见漏洞和风险 (CVE) 以及恶意机器人攻击。
本文介绍如何使用 Azure Front Door 上的 Azure Web 应用程序防火墙 (WAF) 来保护 Azure OpenAI 终结点。
先决条件
如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
使用 gpt-35-turbo 模型创建 Azure OpenAI 实例
首先,创建一个 OpenAI 实例。
按照创建和部署 Azure OpenAI 服务资源中的说明,创建一个 Azure OpenAI 实例并部署 gpt-35-turbo 模型。
标识 Azure OpenAI 终结点和 API 密钥。
打开 Azure OpenAI 工作室,然后打开“操场”下的“聊天”选项。 使用“查看代码”选项显示终结点和 API 密钥。
使用你喜欢的 API 测试方法(如 Visual Studio 或 Insomnia)验证 Azure OpenAI 调用。 使用在前面步骤中找到的 Azure OpenAPI 终结点和 api-key 值。 在 POST 正文中使用以下代码行:
{ "model":"gpt-35-turbo", "messages": [ { "role": "user", "content": "What is Azure OpenAI?" } ] }
-
Azure OpenAI 还会使用 GPT 模型生成响应。
创建具有 Azure WAF 的 Azure Front Door 实例
现在,使用 Azure 门户创建具有 Azure WAF 的 Azure Front Door 实例。
在同一资源组中使用关联的 WAF 安全策略创建 Azure Front Door 高级优化层。 使用“自定义创建”选项。
添加终结点和路由。
添加源主机名:源主机名为
testazureopenai.openai.azure.com
。添加 WAF 策略。
配置 WAF 策略以防范 Web 应用程序和 API 漏洞
在防护模式下启用 WAF 策略,并确保启用 Microsoft_DefaultRuleSet_2.1 和 Microsoft_BotManagerRuleSet_1.0。
通过 Azure Front Door 终结点验证对 Azure OpenAI 的访问
现在,请验证 Azure Front Door 终结点。
从 Front Door 管理器检索 Azure Front Door 终结点。
使用你喜欢的 API 测试方法(如 Visual Studio 或 Insomnia)将 POST 请求发送到 Azure Front Door 终结点。
Azure OpenAI 还会使用 GPT 模型生成响应。
验证 WAF 是否会阻止 OWASP 攻击
在 Azure OpenAI 终结点上发送模拟 OWASP 攻击的 POST 请求。 WAF 会使用 403 禁止的响应代码来阻止调用。
使用 WAF 配置 IP 限制规则
要将对 Azure OpenAI 终结点的访问限制为所需的 IP 地址,请参阅使用 Azure Front Door 的 WAF 配置 IP 限制规则。
常见问题
以下各项是将 Azure OpenAI 与 Azure Front Door 和 Azure WAF 配合使用时可能会遇到的常见问题。
向 Azure OpenAI 终结点发送 POST 请求时,你会收到消息 401:拒绝访问。
如果在创建 POST 请求后立即尝试将它发送到 Azure OpenAI 终结点,则即使请求中包含正确的 API 密钥,也可能会收到消息 401:拒绝访问。 此问题通常会在一段时间后自行解决,而无需任何直接干预。
向 Azure OpenAI 终结点发送 POST 请求时,你会收到消息 415:不支持的媒体类型。
如果尝试使用 Content-Type 标头
text/plain
将 POST 请求发送到 Azure OpenAI 终结点,则会收到此消息。 确保在测试中将标头部分的 Content-Type 标头更新为application/json
。