Azure 应用服务提供平台即服务(PaaS)环境,可用于生成、部署和缩放 Web 应用、移动应用后端、RESTful API 和函数应用。 部署此服务时,请务必遵循安全最佳做法来保护应用程序、数据和基础结构。
本文提供有关如何最好地保护 Azure 应用服务部署的指导。
Azure 应用服务积极保护并强化其平台组件,包括 Azure 虚拟机(VM)、存储、网络连接、Web 框架以及管理和集成功能。 应用服务会进行持续、严格的合规性检查,以确保:
- 每个应用与其他 Azure 应用和资源隔离。
- VM 和运行时软件的定期更新 可解决新发现的漏洞。
- 应用和其他 Azure 资源(例如 Azure SQL 数据库 )之间的机密和连接字符串的通信仅在 Azure 中发生,而不会跨越任何网络边界。 存储的机密始终加密。
- 通过应用服务连接功能(如 混合连接 )的所有通信均已加密。
- 通过 Azure PowerShell、Azure CLI、Azure SDK 和 REST API 等远程管理工具进行的所有连接均已加密。
- 持续威胁管理可保护基础结构和平台免受恶意软件、分布式拒绝服务(DDoS)和中间人攻击和其他威胁。
本文中的安全建议实施零信任原则:“显式验证”、“使用最低特权访问”和“假设违规”。 有关全面的零信任指南,请参阅 零信任指南中心。
特定于服务的安全性
Azure 应用服务 有独特的安全考量,您需要关注这些因素,以确保您的网络应用的整体安全性。
禁用基本身份验证:禁用 FTP 和 SCM 终结点的基本用户名和密码身份验证,以支持基于 Microsoft Entra ID 的身份验证,这为基于 OAuth 2.0 令牌的身份验证提供了增强的安全性。 有关详细信息,请参阅 “在 Azure 应用服务部署中禁用基本身份验证”。
保护 FTP/FTPS 部署:使用 FTP 进行部署时禁用 FTP 访问或强制实施仅 FTPS 模式,以防止以明文形式传输凭据和内容。 有关详细信息,请参阅 使用 FTP/S 将应用部署到 Azure 应用服务。
实现完整的网络隔离:使用应用服务环境在自己的 Azure 虚拟网络实例的专用应用服务环境中运行应用。 该配置通过专用公共端点、内部负载均衡器(ILB)选项实现了与共享基础设施的完全隔离,并可在网络应用防火墙后使用ILB实现企业级保护。 欲了解更多信息,请参见《Azure 应用服务 环境介绍》。
实施DDoS防护:在您的App Service应用前部署Azure Front Door和Web 应用程序防火墙(WAF),以吸收和过滤网络层和应用层DDoS攻击,防止其到达您的应用。 更多信息请参见 Azure Front Door 和 DDoS 防护。
网络安全
应用服务支持许多网络安全功能来锁定应用程序并防止未经授权的访问。
配置专用终结点:通过使用 Azure 专用链接将流量通过虚拟网络路由到您的应用服务,确保您专用网络中客户端的安全连接,从而消除公共 Internet 的暴露。 有关详细信息,请参阅 将专用终结点用于 Azure 应用服务。
实现虚拟网络集成:通过使应用能够访问 Azure 虚拟网络中的或通过 Azure 虚拟网络中的资源来保护出站流量,同时保持与公共 Internet 的隔离。 有关详细信息,请参阅将应用与 Azure 虚拟网络集成。
配置 IP 访问限制:通过定义可访问应用程序的 IP 地址和子网允许列表来限制对应用的访问,从而阻止所有其他流量。 可以定义子网掩码定义的单个 IP 地址或范围,并通过 Windows 应用上的 web.config 文件配置动态 IP 限制。 有关详细信息,请参阅设置 Azure 应用服务访问限制。
设置服务终结点限制:使用服务终结点从虚拟网络中的特定子网锁定对应用的入站访问,这些终结点与 IP 访问限制结合使用以提供网络级筛选。 有关详细信息,请参阅 Azure 应用服务访问限制。
使用 Web 应用程序防火墙:通过在应用服务前面实现具有 Web 应用程序防火墙功能的 Azure Front Door 或应用程序网关,增强对常见 Web 漏洞和攻击的保护。 有关详细信息,请参阅 Azure 应用程序网关上 的 Azure Web 应用程序防火墙。
标识和访问管理
正确管理标识和访问控制对于保护 Azure 应用服务部署免受未经授权的使用和潜在的凭据盗窃至关重要。
为传出请求启用托管标识:通过使用托管标识,从应用程序安全地向 Azure 服务进行身份验证,而无需在代码或配置中存储凭据,从而无需管理服务主体和连接字符串。 在 Microsoft Entra ID 中托管的标识为应用提供了一个自动管理的身份,用于在发出到其他 Azure 服务(例如 Azure SQL 数据库、Azure 密钥保管库 和 Azure 存储)的请求时使用。 应用服务支持系统分配的托管标识和用户分配的托管标识。 有关详细信息,请参阅 使用应用服务和 Azure Functions 的托管标识。
配置身份验证和授权:实现应用服务身份验证/授权,以使用 Microsoft Entra ID 或其他标识提供者保护应用程序,从而防止未经授权的访问,而无需编写自定义身份验证代码。 内置身份验证模块在将 Web 请求传递给应用程序代码之前处理 Web 请求,并支持多个提供程序,包括Microsoft Entra ID、Microsoft 帐户。 有关详细信息,请参阅 Azure 应用程序服务中的身份验证和授权。
为管理作实现基于角色的访问控制:通过向用户和服务主体分配最低所需的 Azure RBAC 权限,控制谁可以管理和配置应用服务资源(管理平面),并遵循最低特权原则。 它控制对创建应用、修改配置设置和管理部署等操作的管理访问,这些操作与应用级认证(简易身份验证)或应用到资源认证(托管身份)分开。 有关详细信息,请参阅 Azure Web 和移动设备内置角色。
实现代理身份验证:使用 Microsoft Entra ID 作为身份验证提供程序,代表用户委托对远程资源的访问。 应用服务应用可以执行委托登录到 Microsoft Graph 或远程应用服务 API 应用等服务。 欲了解更多信息,请参阅 在 Azure 应用服务 中端到端地对用户进行身份验证和授权。
启用相互 TLS 身份验证:当应用程序需要验证客户端标识时,需要客户端证书才能增加安全性,尤其是对于 B2B 方案或内部应用程序。 欲了解更多信息,请参见配置 Azure 应用服务 的 TLS 互认证。
数据保护
保护传输中的数据和静止状态的数据对于维护应用程序及其数据的机密性和完整性至关重要。
强制实施 HTTPS:通过启用仅 HTTPS 模式将所有 HTTP 流量重定向到 HTTPS,确保客户端和应用之间的所有通信都已加密。 默认情况下,仅限HTTPS的重定向功能并不开启,所以要明确启用它;请注意,你的应用默认域名
<app_name>.chinacloudsites.cn已经可以通过HTTPS访问。 更多信息请参见 配置一般设置。配置 TLS 版本:通过将最低 TLS 版本配置为 1.2 或更高版本来使用新式 TLS 协议,并禁用过时不安全的协议,以防止潜在的漏洞。 应用服务支持 TLS 1.3(最新)、TLS 1.2(默认最小值)和 TLS 1.1/1.0(仅用于向后兼容性)。 为 Web 应用和 SCM 站点配置最低 TLS 版本。 更多信息请参见 配置一般设置。
管理 TLS/SSL 证书:使用正确配置的 TLS/SSL 证书建立受信任的连接来保护自定义域。 应用服务支持多种证书类型:免费应用服务托管证书、应用服务证书、第三方证书和从 Azure 密钥保管库 导入的证书。 如果配置自定义域,请使用 TLS/SSL 证书保护该域,以便浏览器能够建立安全的 HTTPS 连接。 有关详细信息,请参阅 在 Azure 应用服务中添加和管理 TLS/SSL 证书。
在 密钥保管库 中存储机密:通过将机密存储在 Azure 密钥保管库 中并使用托管标识访问机密,而不是将它们存储在应用程序设置或代码中,来保护敏感的配置值,例如数据库凭据、API 令牌和私钥。 应用服务应用可以使用托管标识身份验证安全地访问 密钥保管库。 有关详细信息,请参阅 在 App Service 和 Azure Functions 中使用 密钥保管库 引用。
避免在应用设置中使用硬编码秘密:不要将密钥存储在代码或配置文件中。 App Service 在静止时会加密应用设置和连接字符串,并在注入应用进程内存前解密,但对于敏感的密钥,更倾向于 密钥保管库 引用,这样密钥由集中管理,不会存储在应用配置中。 使用编程语言的标准模式以环境变量的形式访问这些值。 有关详细信息,请参阅配置应用设置。
安全远程连接:访问远程资源时始终使用加密连接,即使后端资源允许未加密的连接也是如此。 对于 Azure SQL 数据库和 Azure 存储等 Azure 资源,连接会保留在 Azure 中,不会跨越网络边界。 对于虚拟网络资源,请使用虚拟网络与点到站点 VPN 的集成。 对于本地资源,请使用支持 TLS 1.2 的混合连接,或通过站点到站点 VPN 进行虚拟网络集成。 确保后端 Azure 服务仅允许来自应用的尽可能少的 IP 地址集。 更多信息请参见 “查找出站IP”。
日志记录和监控
实施全面的日志记录和监视对于检测潜在安全威胁和排查 Azure 应用服务部署问题至关重要。
启用诊断日志记录:配置 Azure 应用服务诊断日志以跟踪应用程序错误、Web 服务器日志、失败的请求跟踪和详细的错误消息,以识别安全问题并解决问题。 欲了解更多信息,请参见 Azure 应用服务 中的应用启用诊断日志。
与 Azure Monitor 集成:设置 Azure Monitor 以从应用服务收集和分析日志和指标,为安全事件和性能问题启用全面的监视和警报。 欲了解更多信息,请参见 Azure 应用服务 中的 Monitor 应用。
配置 Application Insights:实现 Application Insights,以便通过实时监视和分析功能深入了解应用程序性能、使用模式和潜在安全问题。 有关详细信息,请参阅监视 Azure 应用程序服务性能。
设置安全警报:创建自定义警报,以通知异常使用模式、潜在的安全漏洞或服务中断,从而影响应用服务资源。 有关详细信息,请参阅使用 Azure Monitor 创建、查看和管理指标警报。
启用运行状况检查:配置运行状况检查以监视应用程序的作状态,并尽可能自动修正问题。 若要了解详细信息,请参阅通过运行状况检查监视应用服务实例。
合规性和治理
建立适当的治理并确保符合相关标准对于 Azure 应用服务应用程序的安全作至关重要。
实现 Azure Policy:通过创建和分配用于审核和强制实施合规性要求的 Azure Policy 定义,为应用服务部署强制实施组织范围的安全标准。 欲了解更多信息,请参见 Azure Policy Regulatory Compliance controls for Azure 应用服务。
审查安全建议:定期使用Microsoft Defender for Cloud评估您的App Service安全状态,以识别和修复安全漏洞和配置错误。 欲了解更多信息,请参见保护您的 Azure 应用服务 网页应用和 API。
进行安全评估:定期对您的应用服务应用进行安全评估和渗透测试,以验证访问权限限制、TLS设置和易认证配置。 遵循Azure云渗透测试参与规则。
保持合规性:分配内置的合规政策举措(如PCI DSS、HIPAA/HITRUST或ISO 27001),其中包含应用服务控制,以审计您的应用是否符合行业和地区的需求,特别是在数据保护和隐私方面。
实施安全的DevOps实践:建立安全的CI/CD流水线以部署到应用服务;使用部署槽进行分阶段验证,禁用SCM/FTP端点的基本认证,转而采用基于托管身份的部署,并添加代码扫描和依赖检查功能。 更多信息请参见 部署最佳实践。
备份和恢复
实施可靠的备份和恢复机制对于确保 Azure 应用服务部署中的业务连续性和数据保护至关重要。
启用自动备份:为应用服务应用程序配置计划备份,以确保在意外删除、损坏或其他故障时恢复应用程序和数据。 欲了解更多信息,请参见 Azure 应用服务 中的“备份并恢复您的应用”。
配置备份保留:根据业务需求和合规性需求为备份设置适当的保留期,确保关键数据在所需持续时间内保留。 欲了解更多信息,请参见 Azure 应用服务 中的“备份并恢复您的应用”。
实施多区域部署:将关键应用部署到多个区域,以便在区域故障发生时提供高可用性和灾难恢复能力。 更多信息请参见 教程:在 App Service 中创建一个高度可用的多区域应用。
测试备份还原:定期测试备份还原过程,以确保备份有效,并在需要时成功还原,同时验证应用程序功能和数据完整性。 更多信息请参见 “从备份恢复应用”。
文档恢复过程:为恢复过程创建和维护全面的文档,确保在服务中断或灾难期间快速有效的响应。 有关详细信息,请参阅 Azure 应用服务中的可靠性。