本文介绍了 Azure 应用服务 如何帮助保护 Web 应用、移动应用后端、API 应用或 函数应用。 本文还介绍了如何使用内置应用服务功能进一步帮助保护应用。
应用服务的各个平台组件(包括 Azure VM、存储、网络连接、Web 框架、管理和集成功能)都得到了积极保护和加强。 应用服务持续进行严格的符合性检查,以确保:
- 你的应用资源与其他客户的 Azure 资源隔离开来,从而受到保护。
- 定期更新 VM 实例和运行时软件,以解决新发现的漏洞。
- 你的应用与其他 Azure 资源(例如 SQL 数据库)之间的密钥(例如连接字符串)通信一直在 Azure 中进行,不跨越任何网络边界。 存储密钥时始终对其加密。
- 通过应用服务连接功能(例如混合连接)进行的所有通信均已加密。
- 与 Azure PowerShell、Azure CLI、Azure SDK、REST API 等远程管理工具的连接均已加密。
- 24 小时威胁管理可保护基础结构和平台免受恶意软件、分布式拒绝服务 (DDoS)、中间人 (MITM) 和其他威胁的危害。
以下部分介绍了帮助保护应用服务应用免受威胁的更多方法。
HTTPS 和证书
应用服务允许使用 HTTPS 保护应用。 创建应用后,可以使用 HTTPS 访问其默认域名(<app_name.chinacloudsites.cn>)。 如果 为应用配置自定义域,还应使用 TLS/SSL 证书保护该域,以便客户端浏览器能够与自定义域建立安全的 HTTPS 连接。 下面是应用服务支持的多种类型的证书:
应用服务支持以下类型的证书:
- 免费应用服务托管证书
- 应用服务证书
- 第三方证书
- 从 Azure Key Vault 导入的证书
有关详细信息,请参阅 在 Azure 应用服务中添加和管理 TLS/SSL 证书。
不安全的协议(HTTP、TLS 1.0、FTP)
默认情况下,应用服务强制从 HTTP 请求重定向到 HTTPS。 在请求到达应用程序代码之前,会重定向不安全的请求。 若要更改此行为,请参阅 “配置常规设置”。
应用服务支持 FTP 和 FTPS 来部署应用文件。 默认情况下,新应用设置为仅接受 FTPS。 若要提高安全性,请尽可能使用 FTPS 而不是 FTP。 如果不使用 FTP/S,则应 禁用它。 有关详细信息,请参阅 使用 FTP/S 将应用部署到 Azure 应用服务。
静态 IP 限制
默认情况下,应用服务应用接受来自所有 Internet IP 地址的请求,但你可以限制对一部分 IP 地址的访问。 你可以使用 Windows 上的应用服务来定义允许访问应用的 IP 地址列表。 允许列表可包括单个 IP 地址或由子网掩码定义的 IP 地址范围。 有关详细信息,请参阅设置 Azure 应用服务访问限制。
对于 Windows 上的应用服务,还可以通过配置 web.config 文件来动态限制 IP 地址。 有关详细信息,请参阅 动态 IP 安全性 <dynamicIpSecurity>。
客户端身份验证和授权
应用服务提供用户或客户端应用的内置身份验证和授权。 可以实现自己的身份验证和授权解决方案,或者允许应用服务为你处理它。
启用后,内置身份验证和授权可以使用很少或没有应用程序代码登录用户和客户端应用。 身份验证和授权模块在将 Web 请求传递给应用程序代码之前处理 Web 请求,并拒绝未经授权的请求。
应用服务身份验证和授权支持多个身份验证提供程序,包括Microsoft Entra ID 和Microsoft帐户。 有关详细信息,请参阅 Azure 应用程序服务中的身份验证和授权。
服务间身份验证
针对后端服务进行身份验证时,应用服务提供两种机制,具体取决于你的需求:
服务标识 使用应用本身的标识登录到远程资源。 在应用服务中,可以创建一个托管标识,其他服务(如Azure SQL 数据库或Azure Key Vault)可以使用它进行身份验证。 有关端到端教程,请参阅 使用托管标识将 Azure Web 应用连接到没有机密的 Azure SQL 数据库。
代表 (OBO) 身份验证代表用户委托对远程资源的访问。 使用 Microsoft Entra ID 作为身份验证提供程序,应用服务应用可以执行委托登录远程服务,例如 Microsoft Graph 或应用服务中的远程 API 应用。
远程资源连接
应用可能需要访问 Azure 资源、 本地资源或 Azure 虚拟网络中的资源。 应用服务为每个方案提供安全连接方法。 还应遵守安全最佳做法,例如,即使后端资源允许未加密的连接,也始终使用加密连接。
此外,请确保后端 Azure 服务允许尽可能小的 IP 地址集。 若要查找应用的出站 IP 地址,请参阅 “查找出站 IP”。
Azure 资源
当应用连接到 Azure 资源(例如 SQL 数据库和 Azure 存储)时,连接一直保持在 Azure 中,不会跨越任何网络边界。 但是,连接经过 Azure 中的共享网络,因此请务必确保连接已加密。
如果应用托管在 应用服务环境中,则应使用 虚拟网络服务终结点连接到受支持的 Azure 服务。
Azure 虚拟网络中的资源
应用可以使用点到站点 VPN 通过虚拟网络集成访问 Azure 虚拟网络中的资源。 然后,应用可以使用其专用 IP 地址访问虚拟网络中的资源。 点对站点连接仍然通过 Azure 中的共享网络。
若要完全隔离资源连接与 Azure 中的共享网络,请在 应用服务环境中创建应用。 由于应用服务环境始终部署到专用虚拟网络,因此应用与虚拟网络中的其他资源之间的连接完全隔离。 有关应用服务环境中网络安全的详细信息,请参阅 网络隔离。
本地资源
可以通过以下方式安全地访问本地资源,例如数据库:
混合连接通过传输控制协议(TCP)隧道与远程资源建立点到点连接,该隧道使用 TLS 1.2 和共享访问签名密钥。
虚拟网络与站点到站点 VPN 集成,或者应用服务环境与 站点到站点 VPN 集成。 这些方法将应用的虚拟网络连接到本地网络,如 Azure 虚拟网络中的资源中所述,但虚拟网络通过 站点到站点 VPN 连接到本地网络。 在这些网络拓扑中,应用可以连接到本地资源,就像它连接到虚拟网络中的其他资源一样。
应用程序密钥
不要在代码或配置文件中存储应用程序机密,如数据库凭据、API 令牌和私钥。 使用代码语言的标准模式以环境变量身份访问它们。 在应用服务中,通过 应用设置 定义环境变量,尤其是对于 .NET 应用程序,通过连接字符串定义 环境变量。
应用设置和连接字符串存储在 Azure 中,并在应用启动时将其注入应用进程内存之前解密。 加密密钥会定期轮换。
或者,可以将应用服务应用与 Azure Key Vault 集成,以实现高级密钥管理。 应用服务应用 可以使用托管标识来安全地访问密钥保管库 ,以获取所需的机密。
网络隔离
除独立定价层外,所有应用服务定价层都在 Azure 共享网络基础结构上运行应用。 例如,公共 IP 地址和前端负载均衡器与其他租户共享。
隔离层通过在自己的 Azure 虚拟网络实例中的专用应用服务环境中运行应用来提供完整的网络隔离。 通过使用网络隔离,可以:
- 通过具有专用前端的专用公共终结点为应用提供服务。
- 使用仅允许从 Azure 虚拟网络内部进行访问的内部负载均衡器(ILB)为内部应用提供服务。 ILB 有一个来自专用子网的 IP 地址,它可以让应用与 Internet 完全隔离。
- 使用 ILB 来保护 Web 应用程序防火墙 (WAF)。 WAF 为面向公众的应用程序提供企业级 URI 筛选、防止分布式拒绝服务 (DDoS) 攻击和 SQL 注入防护。