保护 PaaS 部署
参考本文中的信息,可以:
- 了解云中的托管应用程序的安全优势
- 评估平台即服务 (PaaS) 相比其他云服务模型的安全优势
- 将安全重心从以网络为中心的方案转换为以标识为中心的外围安全方案
- 实施一般的 PaaS 安全最佳实践建议
在 Azure 上开发安全应用程序是一个常规指南,其针对的安全问题和控制是你在开发适用于云的应用程序时应该在软件开发生命周期的每个阶段考虑的。
云的安全优势
请务必了解你与 Microsoft 之间的责任分工。 在本地,拥有整个堆栈,但迁移到云后,某些责任将转移到 Microsoft。
转移到云中可带来一定的安全优势。 在本地环境中,组织的可用资源可能有限,无法尽责在安全措施上投资,使得攻击者能够利用所有层中的漏洞。
组织可以使用提供商的基于云的安全功能和云智能来改善其威胁检测和响应时间。 通过将责任转移到云提供商,组织可以扩大安全覆盖范围,为其他优先业务重新调配安全资源与预算。
PaaS 云服务模型的安全优势
让我们来了解一下 Azure PaaS 部署相比本地部署的安全优势。
从堆栈的底部(即物理基础结构)开始,Microsoft 可以消除常见的风险和管理责任。 由于 Azure 云受到 Microsoft 的持续监视,因此很难攻破。 对于攻击者而言,将 Azure 云作为目标没有任何意义。 他们往往会改换目标,除非他们有大量的金钱和资源。
在堆栈的中间,PaaS 部署与本地之间没有差别。 在应用程序层和帐户与访问管理层,面临的风险是类似的。 本文的后续步骤部分将提供有关消除或尽量避免这些风险的最佳实践指导。
堆栈的顶层(即数据监管和权限管理)存在一种风险,不过可以使用密钥管理来缓解。 (最佳实践中介绍了密钥管理。)尽管密钥管理是一个附加的责任,但你不再需要管理 PaaS 部署中的某些区域,因此可将资源转移到密钥管理。
Azure 平台还使用各种基于网络的技术提供强大的 DDoS 保护。 但是,根据链路和数据中心的不同,所有类型的基于网络的 DDoS 保护方法都有自身的限制。 为了帮助避免大规模 DDoS 攻击造成的影响,可以利用 Azure 的核心云功能快速自动扩展,从而防御 DDoS 攻击。 在建议的实践文章中,我们将更详细地介绍如何采取这种措施。
革新 Defender for Cloud 的思维方式
PaaS 部署为整体安全方案带来了变革。 事必躬亲的局面现在可以改为与 Microsoft 分担责任。
PaaS 与传统本地部署之间的另一个重大差别在于,前者为主要安全边界的界定因素提供了全新的视野。 一直以来,主要的本地安全边界就是网络,大多数本地安全设计都使用网络作为主要安全枢纽。 在 PaaS 部署中,可将标识视为主要安全边界,从而改善安全性。
采用标识用作主要安全边界的策略
在云计算的五大基本特征中,一个特征就是网络访问范围广泛,这使得以网络为中心的理念显得有点毫不相干。 许多云计算解决方案的目标是不管用户身居何处,都能允许他们访问资源。 对于大多数用户而言,他们的位置就是 Internet 上的某个节点。
下图演示了安全边界从网络边界演进成标识边界的过程。 安全性越来越少地与如何保护网络相关,而更多地与如何保护数据,以及如何管理应用和用户的安全性相关。 两者的关键差别在于如何为公司的重要资产提供更多的安全保障。
最初,Azure PaaS 服务(例如 Web 角色和 Azure SQL)提供的传统网络边界防护措施很少,或者根本不提供。 开发人员已认识到,设计元素的目的就是在 Internet 上公开(Web 角色),而身份验证可提供新的边界(例如 BLOB 或 Azure SQL)。
新式安全措施假设入侵者会突破网络边界。 因此,新式防护措施已转移到标识。 组织必须使用强身份验证和授权保护机制建立基于标识的安全边界(最佳实践)。
网络边界的原理和模式早在几十年前就已建立。 相比之下,行业在使用标识作为主要安全边界的经验相对缺乏。 正因如此,我们累积了足够的经验,乐于提供已在现场得到证实的、适用于几乎所有 PaaS 服务的一些普通建议。
下面是管理标识边界的最佳做法。
最佳做法:保护密钥和凭据以保护 PaaS 部署。 详细信息:丢失密钥和凭据是一个常见问题。 可以使用集中式解决方案,将密钥和机密存储在硬件安全模块 (HSM) 中。 Azure Key Vault 通过使用受 HSM 保护的密钥对身份验证密钥、存储帐户密钥、数据加密密钥、.pfx 文件和密码进行加密来保护你的密钥和机密。
最佳做法:不要将凭据和其他机密放入源代码或 GitHub。 详细信息:唯一比丢失密钥和凭据更遭糕的事情是让未经授权的一方获取这些密钥和凭据的访问权限。 攻击者可以利用 bot 技术来查找 GitHub 等代码存储库中存储的密钥和机密。 请不要将密钥和机密放入这些公共代码存储库。
最佳做法:通过使用可以直接远程管理这些 VM 的管理接口来保护混合 PaaS 和 IaaS 服务上的 VM 管理接口。 详细信息:可以使用 SSH、RDP 和 PowerShell 远程处理等远程管理协议。 通常,我们建议不要从 Internet 启用对 VM 的直接远程访问。
如果可以,请使用替代方法,例如在 Azure 虚拟网络中使用虚拟专用网络。 如果无法使用替代方法,请确保使用复杂的通行短语,并使用双重身份验证(例如 Microsoft Entra 多重身份验证)。
最佳做法:使用强身份验证和授权平台。 详细信息:使用 Microsoft Entra ID 中的联合标识,而不是自定义用户存储。 使用联合标识时,可以利用基于平台的方法,将已获授权的标识的管理权限委托给合作伙伴。 如果员工离职后,需要通过多个标识和授权系统反映该信息,则联合标识方法就特别重要。
使用平台提供的身份验证和授权机制,而不要使用自定义代码。 原因是开发自定义身份验证代码可能很容易出错。 大部分开发人员都不是安全专家,不太可能会注意到身份验证和授权的细微之处与最新开发情况。 商业代码(例如 Microsoft 编写的代码)通常会接受广泛的安全性评审。
使用双重身份验证。 双重身份验证是最新的身份验证和授权标准,它避免了用户名与密码类型的身份验证所固有的安全漏洞。 需要访问 Azure 管理界面(门户/远程 PowerShell)和面向客户的服务的应用程序应设计并配置为使用 Microsoft Entra 多重身份验证。
使用 OAuth2 和 Kerberos 等标准身份验证协议。 这些协议经过广泛的同行评审,有时可实现为平台库的一部分用于身份验证和授权。
在应用程序设计期间使用威胁建模
Microsoft 安全开发生命周期指定团队应在设计阶段参与名为威胁建模的过程。 为了帮助简化此过程,Microsoft 已创建 SDL 威胁建模工具。 对应用程序设计进行建模以及跨所有信任边界枚举 STRIDE 威胁可以在早期捕获设计错误。
下表列出了 STRIDE 威胁,并提供了一些使用 Azure 功能的示例缓解措施。 这些缓解措施并非在每种情况下都起作用。
威胁 | 安全属性 | 潜在的 Azure 平台迁移 |
---|---|---|
欺骗 | 身份验证 | 要求使用 HTTPS 连接。 |
篡改 | 完整性 | 验证 TLS/SSL 证书。 |
否认性 | 不可否认性 | 启用 Azure 监视和诊断。 |
信息泄露 | 机密性 | 使用服务证书加密静态敏感数据。 |
拒绝服务 | 可用性 | 监视潜在拒绝服务条件的性能指标。 实现连接筛选器。 |
特权提升 | 授权 | 使用特权标识管理。 |
在 Azure 应用服务上开发
Azure App Service 是一个 PaaS 产品,可创建适用于任何平台或设备的 Web 和移动应用,并可连接到云中或本地任何位置的数据。 应用服务所包括的 Web 功能和移动功能是以前作为 Azure 网站和 Azure 移动服务单独交付的。 它还包括各种新功能,可以实现业务流程的自动化,并可托管云 API。 应用服务以单个集成服务的形式为 Web、移动和集成方案提供一组丰富的功能。
下面是使用应用服务的最佳做法。
最佳做法:通过 Microsoft Entra ID 进行身份验证。 详细信息:应用服务为标识提供者提供 OAuth 2.0 服务。 OAuth 2.0 注重简化客户端开发人员的工作,同时为 Web 应用程序、桌面应用程序和移动电话提供特定的授权流。 Microsoft Entra ID 使用 OAuth 2.0,可让你授予对移动和 Web 应用程序的访问权限。
最佳做法:根据“需要知道”和“最低权限”安全原则限制访问。 详细信息:对于想要实施数据访问安全策略的组织,限制访问是必须要做的事。 可以使用 Azure RBAC 向用户、组和应用程序分配对特定作用域的权限。 若要了解有关向用户授予应用程序访问权限的详细信息,请参阅访问管理入门。
最佳做法:保护密钥。 详细信息:Azure Key Vault 可帮助保护云应用程序和服务使用的加密密钥和机密。 通过 Key Vault,可以使用受硬件安全模块 (HSM) 保护的密钥,来加密密钥和机密(例如身份验证密钥、存储帐户密钥、数据加密密钥、.PFX 文件和密码)。 为了提升可靠性,可以在 HSM 中导入或生成密钥。 请参阅 Azure Key Vault 了解详细信息。 还可以使用 Key Vault 和自动续订来管理 TLS 证书。
最佳做法:限制传入的源 IP 地址。 详细信息:应用服务环境提供虚拟网络集成功能,可帮助你通过网络安全组限制传入的源 IP 地址。 使用虚拟网络可将 Azure 资源置于可以控制其访问权限但无法通过 Internet 路由的网络中。 若要了解详细信息,请参阅将应用与 Azure 虚拟网络集成。
最佳做法:监视应用服务环境的安全状态。 详细信息:使用 Microsoft Defender for Cloud 监视应用服务环境。 当 Defender for Cloud 识别潜在的安全漏洞时,它会创建一些建议,这些建议会指导完成配置所需控件的过程。
Azure 云服务
Azure 云服务是一个 PaaS 示例。 与 Azure 应用服务一样,此技术设计用于支持可缩放、可靠且运营成本低廉的应用程序。 同样,应用服务托管在虚拟机 (VM) 上,Azure 云服务也是如此。 但是,你对 VM 有更多的控制。 可以在使用 Azure 云服务的 VM 上安装自己的软件,并且可以远程访问它们。
安装 Web 应用程序防火墙
Web 应用程序已逐渐成为利用常见已知漏洞的恶意攻击的目标。 这些攻击中最常见的攻击包括 SQL 注入攻击、跨站点脚本攻击等。 防止应用程序代码中的此类攻击颇具挑战性,可能需要在应用程序拓扑的多个层进行严格的维护、修补和监视。 集中式 Web 应用程序防火墙有助于大幅简化安全管理,为抵卸威胁或入侵的应用程序管理员提供更好的保障。 相较保护每个单独的 Web 应用程序,WAF 解决方案还可通过在中央位置修补已知漏洞,更快地响应安全威胁。
Web 应用程序防火墙 (WAF) 为 Web 应用程序提供集中保护,使其免受常见攻击和漏洞的影响。
监视应用程序的性能
监视是一种数据收集和分析操作,用于确定应用程序的性能、运行状况及可用性。 有效的监视策略有助于了解应用程序组件的详细运行状况, 它有助于向你发送关键情况的通知,让你在这些情况成为问题之前解决它们,从而提高运行时间。 它还有助于检测可能与安全相关的异常。
使用 Azure Application Insights 监视应用程序的可用性、性能和使用情况,不管其是托管在云中还是在本地。 通过使用 Application Insights,可以快速确定并诊断应用程序中的错误,而无需等待用户报告这些错误。 利用所收集的信息,可作出有关应用程序维护和优化的明智抉择。
Application Insights 提供各种可以与所收集的数据交互的工具。 Application Insights 在公用存储库中存储其数据。 它可以通过 Kusto 查询语言充分利用各种共享功能,例如警报、仪表板和深入分析。
执行安全渗透测试
验证安全防御与测试任何其他功能一样重要。 将渗透测试规定为生成和部署过程的标准组成部分。 针对已部署应用程序对定期安全测试和漏洞扫描进行计划,并监视打开的端口、终结点和攻击活动。
模糊测试是一种通过将格式错误的输入数据提供给分析并使用此数据的程序接口(入口点)来查找程序故障(代码错误)的方法。
后续步骤
本文重点介绍了 Azure PaaS 部署的安全优势以及云应用程序的最佳安全做法。 接下来,请阅读有关使用特定 Azure 服务保护 PaaS Web 和移动解决方案的建议做法。 首先来了解 Azure 应用服务、Azure SQL 数据库和 Azure Synapse Analytics、Azure 存储以及 Azure 云服务。 随着适用于其他 Azure 服务的建议做法文章的发布,我们会在以下列表中提供相应的链接:
- Azure 应用服务
- Azure SQL 数据库和 Azure Synapse Analytics
- Azure 存储
- 用于 Redis 的 Azure 缓存
- Azure 服务总线
- Web 应用程序防火墙
有关在开发适用于云的应用程序时,应在软件开发生命周期的每个阶段中考虑的安全性问题和控件,请参见在 Azure 上开发安全的应用程序。
有关通过 Azure 设计、部署和管理云解决方案时可以使用的更多安全最佳做法,请参阅 Azure 安全最佳做法和模式。
以下资源提供了有关 Azure 安全性及相关 Microsoft 服务的更多常规信息:
- Microsoft 产品生命周期 - 在产品的整个生命周期内获得一致且可预测的支持指南
- Microsoft 安全响应中心 - 可在其中报告 Microsoft 安全漏洞(包括 Azure 问题)或将其通过电子邮件发送到 secure@microsoft.com