用私有终结点加固 Azure OpenAI:搭建一套零信任 AI 架构
企业里用 Azure OpenAI 的场景越来越多——内部知识库、自动化流程、客服助手、安全运营,几乎每个团队都想接进去用。但真正让AmalUBasnayake 停下来想一想的是这个问题:怎么让应用安全地访问 AI 服务,同时把不必要的网络暴露降到最低,还能保护好身份、凭据和敏感数据?
如果 AI 处理的是公司内部数据、敏感系统或者受保护的资源,这个问题就不只是"锦上添花"了。
一个基础的 Azure OpenAI 部署,不做任何私有网络设计也能跑起来。但站在云安全工程的角度,能跑起来和真正安全是两回事。一套说得过去的架构,至少要照顾到这几件事:网络隔离、私有连接、基于身份的认证、最小权限授权、密钥保护、公网暴露面、内部名称解析,以及零信任的整体思路。
为了把这些概念落地,AmalUBasnayake 搭了一个 Azure OpenAI 零信任安全实验室,用的都是 Azure 原生的安全能力,目标是给一个 Azure OpenAI 工作负载打好安全基础设施的底子。
🎯 项目目标
这个项目的目标从来不是"把 Azure OpenAI 部署起来"这么简单。AmalUBasnayake 更想搞清楚的是:一个 AI 工作负载,怎么在网络、身份、授权、密钥管理这几个层面同时被保护起来。
最终这套架构落了这些点:Azure 虚拟网络、网络分段、私有终结点、私有 DNS、禁用公网访问、系统分配的托管标识、Azure Key Vault、Azure RBAC、Key Vault Secrets User 角色,以及安全的密钥存储。
这些控制项构成了项目 1.0 版本里零信任架构的基础(详见 GitHub 仓库)。
🧠 为什么 AI 工作负载需要零信任
云安全里一个很常见的误区,是把"在 Azure 网络内部"直接当成信任的理由。比如有人会说:“这个应用在 Azure 里面,所以是可信的。"——这不是零信任。
零信任的前提是,访问必须被显式验证,而不是因为网络位置对了就自动放行。放到 AI 工作负载上,这意味着安全要在好几个层面同时生效。
网络层面,Azure OpenAI 服务应该只能通过受控的私有连接路径访问。身份层面,应用和工作负载应该用强身份,而不是把长期有效的凭据硬编码在代码里。授权层面,哪怕身份认证通过了,也只应该拿到这个角色真正需要的权限。密钥层面,敏感凭据要集中保护,不能直接写在应用代码或配置文件里。暴露面上,只要私有连接已经能用,多余的公网访问就该拿掉。
这几层叠在一起,才是一个真正分层的安全模型,而不是指望单靠一个控制项扛住所有风险。
🏗️ 架构总览
整套架构从一个 Azure 虚拟网络开始,它提供私有网络边界。接着建一个专用子网,用来承载私有终结点连接。Azure OpenAI 通过 Azure 私有终结点接入这个虚拟网络,私有 DNS 负责这条私有连接路径的内部名称解析,同时 Azure OpenAI 资源上的公网访问被关掉。
身份这一侧,启用了系统分配的托管标识。密钥管理用 Azure Key Vault 来做,Azure RBAC 通过 Key Vault Secrets User 角色提供最小权限访问。
仓库里同时放了详细架构图和架构概要图(GitHub)。
🔐 安全架构:纵深防御
这个项目背后一个核心的设计原则是纵深防御。不指望靠单一控制项扛住整个工作负载,而是叠加多层安全边界。
哪怕某一层配置出了问题,其他安全控制还能把潜在的暴露面压下去。这比单纯靠一个 API Key 或者一个公网终结点要靠谱得多。
🌐 第一步——创建 Azure 虚拟网络
第一步是建一个专用的 Azure 虚拟网络。VNet 给这个 AI 工作负载划定了网络边界,也是后面私有通信的基础。
在这套架构里,VNet 要负责:网络隔离、私有连接、分段、可控的通信路径,以及给私有终结点集成打地基。
AmalUBasnayake 没有把 Azure OpenAI 当成一个孤立的 PaaS 服务扔在公网上,而是先给它围了一圈可控的私有网络边界。
🧱 第二步——创建独立的私有终结点子网
下一步是给私有终结点连接单独建一个子网。网络分段之所以重要,是因为它能把基础设施组件在逻辑上分开管理。
最终的结构大概长这样:
仓库里专门记录了用独立子网承载私有终结点这一点,把它作为网络分段设计的一部分(GitHub)。
🤖 第三步——部署 Azure OpenAI
网络基础打好之后,才轮到部署 Azure OpenAI。到这一步,目标不是把服务暴露出去、指望靠身份认证兜底,而是让它成为整套安全架构真正要保护的核心资源。
接下来要回答的问题变成:谁能访问这个服务?从哪里能访问到?怎么连接过去?凭据怎么保护?访问权限怎么授权?
后面所有的实现都是围绕这几个问题展开的。
🔒 第四步——配置私有终结点
接下来是用 Azure 私有终结点把 Azure OpenAI 接入这个虚拟网络。私有终结点在 VNet 和受支持的 Azure 服务之间建立私有连接。
架构从常见的公网连接模型,变成了私有连接模型:
这个实验室里最终落地的是这样:
关键的安全收益在于,应用到 Azure OpenAI 资源之间有了一条私有连接路径。
🔐 第五步——验证私有终结点连接
建好私有终结点还不算完,这个连接本身得验证过才行。项目在切换到"只走私有连接"之前,先确认了私有终结点连接已经被批准。
这里有个操作上的原则 AmalUBasnayake 觉得挺重要:先把想要的安全路径立起来,再去拆掉备用路径。
仓库把私有终结点连接的批准记录为第五步(GitHub)。
🚫 第六步——禁用公共网络访问
这一步是整个项目里最关键的安全控制之一。私有连接路径搭好之后,Azure OpenAI 的公网访问被彻底关掉。
最终的安全模型是这样:
这一步大幅压缩了不必要的网络暴露面。仓库里明确把"公网访问已禁用"列为 1.0 版本已实现的安全控制之一(GitHub)。
光有私有终结点还不够,得让私有连接真正成为唯一的访问路径才算数。
🌐 为什么私有 DNS 很重要
私有连接要真正有用,前提是工作负载能把服务的主机名正确解析到私有终结点上。这就是私有 DNS 在这套架构里的作用。
应用可以继续用 Azure OpenAI 原本的主机名,DNS 配置会在背后把解析结果指向私有连接路径。概念上是这样:
这样一来,应用不用硬编码私有 IP 地址就能用上这个服务。仓库明确把私有 DNS 配置列为已实现的控制项,也是核心架构的一部分(GitHub)。
🛡️ 网络安全层的阶段性成果
走到这一步,网络安全层算是搭起来了,包含:
✓ Azure 虚拟网络
✓ 独立的私有终结点子网
✓ Azure OpenAI
✓ 私有终结点
✓ 已批准的私有终结点连接
✓ 私有 DNS
✓ 公网访问已禁用
这构成了第一道主要的零信任边界。但还有个问题绕不过去:如果一个工作负载在私有网络内部,是不是就该自动被信任?
答案是不。光靠网络隔离还不够,下一层要解决的是身份问题。
🧑💻 第七步——启用系统分配的托管标识
下一个重要的安全控制是托管标识。传统应用经常把 API Key、密码、连接字符串、客户端密钥这类凭据直接塞进应用配置里,这本身就是额外的风险。
一旦这些凭据通过源代码、配置文件、日志,或者一条没配置好的部署流水线泄露出去,攻击者就有可能拿去复用。托管标识提供了一种 Azure 原生的身份机制,让应用在和受支持的 Azure 资源交互时,不再需要把长期有效的凭据硬编码进代码里。
在这个项目里,AmalUBasnayake 启用了系统分配的托管标识。
🧠 为什么托管标识很重要
安全模型现在变成了这样:
问题不再是"API Key 存在哪里”,而是变成了"这次请求是哪个身份发起的,这个身份被授予了什么权限"。这对企业级云安全来说是一个更扎实的基础,也更符合零信任的思路——认证和授权被显式评估,而不是单靠网络位置来判断。
仓库把托管标识列为核心的已实现安全控制之一(GitHub)。
🔑 第八步——配置 Azure Key Vault
下一层是密钥管理。哪怕已经用上了基于身份的访问,应用有时候还是需要用到一些特定工作负载或集成所需的密钥。
与其把这些密钥直接写进应用配置,Azure Key Vault 提供了一个集中的密钥管理边界。这个项目里创建了一个 Azure Key Vault,专门给密钥提供集中保护。
架构变成了这样:
密钥存储和应用逻辑被分开了。
🔐 第九步——配置 RBAC 权限
光创建 Key Vault 还不够,这个身份还需要一个明确定义的授权边界,这就是 Azure 基于角色的访问控制(RBAC) 要解决的问题。
项目里用的是 Key Vault Secrets User 角色,目的是遵循最小权限原则——不给身份整个 Key Vault 的管理权限,只给它处理密钥所必需的那部分权限。
授权流程变成:
这里有个关键的区别:认证回答的是"你是谁",授权回答的是"你被允许做什么"。
项目明确用 Key Vault Secrets User 角色实现了基于 RBAC 的 Key Vault 访问(GitHub)。
🧩 第十步——安全存储密钥
1.0 版本里最后一步实现,是把需要用到的密钥安全地存进 Azure Key Vault。这里的核心原则是分离。
原本的做法是这样:
改造之后变成:
这样就给密钥管理建了一个专属的控制面。密钥不再被当成普通的应用配置,而是变成受身份和授权策略管辖的、受保护的云资源。
仓库把安全创建密钥记录为第十步(GitHub)。
🔄 把整套安全模型拼在一起
走到这一步,前面这些单独的控制项可以合并起来看成一套完整的安全架构。
每个组件都对应一个不同的安全需求:私有终结点提供私有连接,私有 DNS 支撑内部名称解析,禁用公网访问拿掉了原本不必要的公开路径,托管标识提供基于身份的认证,Azure RBAC 控制授权,Key Vault 提供集中的密钥保护。
这些控制项叠在一起,才构成一套分层的零信任架构。
🔍 从安全工程角度复盘
做完这个项目,AmalUBasnayake 最大的体会是:云安全从来不是一个开关就能搞定的事。一个安全的 AI 工作负载,需要好几层控制同时生效。
网络层回答的是工作负载怎么连到服务;身份层回答的是谁在发起请求;授权层回答的是这个身份被允许访问什么;密钥层回答的是敏感凭据存在哪里;暴露面这一层回答的是,这个服务是不是还能通过一条不必要的公网路径被访问到。
零信任模型把这几个问题串了起来。
比起单纯部署一个 AI 服务、打开身份认证就算完事,这套分层模型更贴近真实世界里云安全工程的样子。
🧠 学到的关键经验
搭这套环境的过程,让 AmalUBasnayake 在 Azure 安全的几个方向上都摸了一遍实操。
零信任架构这块,AmalUBasnayake 更深地体会到安全边界应该被显式定义出来,而不是想当然地认为内部资源就是可信的。私有连接方面,私有终结点确实能给 Azure PaaS 服务提供受控的私有访问路径。网络分段能帮着把基础设施组件在逻辑上组织和隔离开。托管标识这块最直观的收获是,基于身份的认证能明显减少对硬编码长期凭据的依赖。RBAC 提醒 AmalUBasnayake 授权要遵循最小权限。密钥管理上,敏感密钥应该放进专门的安全服务,而不是直接写进应用代码里。
说到底,AI 基础设施安全和其他企业级云工作负载没什么本质区别。身份、网络隔离、授权、密钥管理这几件事,一个都少不了。
⚠️ 这个实验室没做到的事
这里有必要说清楚,1.0 版本里实际做了什么,和后续计划做什么是两回事。
这个项目目前聚焦在安全基础设施这一层,并不能算是一套完整的企业级 SOC 监控实现。仓库里把这些能力列为 2.0 版本的未来增强项:Azure OpenAI 诊断设置、Azure Key Vault 诊断日志、Log Analytics 工作区、Microsoft Sentinel、KQL 威胁狩猎、Key Vault 活动监控、Azure OpenAI 活动监控、Defender for Cloud 建议、安全告警,以及事件响应流程。
这些内容被特意和当前实现区分开,为的是让项目如实反映出哪些已经做了、哪些还在计划里(GitHub)。
🚀 未来增强计划——2.0 版本
下一阶段,AmalUBasnayake 打算把重心放在安全监控和检测工程上。可以把 Azure OpenAI 和 Azure Key Vault 的诊断遥测接进 Log Analytics 来扩展这套架构,再引入 Microsoft Sentinel 作为 SIEM 层。
未来的架构大概会演变成这样:
Defender for Cloud 也能提供额外的安全态势可见性和建议。这样一来,项目就会从一套"安全的 AI 基础设施"升级成一套更完整的"AI 安全监控与检测工程平台"。
💡 最后的思考
保护好 AI 工作负载,正在变成云和安全工程师越来越绕不开的责任。企业在采用 Azure OpenAI 之类的 AI 服务时,安全团队得跳出模型本身去想问题,周边的基础设施同样重要。
一套安全的 AI 架构,得考虑清楚服务能从哪里被访问到、应用怎么做身份认证、身份被允许做什么、密钥存在哪里、暴露了哪些网络路径,以及安全监控要怎么落地。
这个项目让 AmalUBasnayake 有机会通过一次实打实的 Azure 实践,把这些概念过一遍,而不是只停留在纸面上的理解。最终的结果,是一套用 Azure 原生安全能力搭出来的、面向 Azure OpenAI 的基础零信任架构。
🎓 这个项目验证了哪些能力
做完这一趟,AmalUBasnayake 在这些方向上都有了实打实的动手经验:Azure OpenAI、Azure 虚拟网络、网络分段、Azure 私有终结点、Azure Private Link、私有 DNS、Azure Key Vault、托管标识、Microsoft Entra ID 相关概念、Azure RBAC、最小权限原则、密钥管理、零信任架构、云安全,以及 AI 基础设施安全。
⭐ 一点总结
一个安全的 AI 工作负载,从来不是靠某一个安全功能做出来的,而是把网络隔离、强身份、最小权限授权和安全的密钥管理拧成一套连贯的架构。Azure OpenAI 提供 AI 能力,私有终结点提供私有连接,私有 DNS 负责内部解析,托管标识提供工作负载身份,RBAC 控制授权,Azure Key Vault 保护密钥。零信任,则是把这一整套控制串起来的安全思路。
网络要锁死,身份要验证,权限要收紧,密钥要护好。信任这件事,从来都不该想当然。
📚 参考资料
- 本文作者:BeanHsiang
- 本文链接:https://beanhsiang.github.io/post/2026-08-11-securing-azure-openai-with-private-endpoints-building-a-zero-trust-ai-architecture/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。