零信任环境中 Spring Boot 应用程序的端到端安全通信
注意
基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告。
标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。
本文介绍如何在零信任环境中保护 Spring Boot 应用程序的端到端通信。 可以在 Spring Boot 应用程序的任何通信点保护端到端通信或终止传输级安全性。 还可以自动为保护通信所需的所有 Azure 资源进行预配和配置。
将安全通信作为解决方案架构的一部分实施绝非易事。 许多客户通过手动轮换他们的证书或创建他们自己的解决方案来自动化预配和配置。 即便如此,仍然存在数据泄露风险,例如未经授权从服务器系统复制或传输数据。 使用 Azure Spring Apps,我们将为你处理这些细节。 Azure Spring Apps 抽象出大部分复杂性,将安全通信作为服务中的可配置和自动化选项。
保护 Internet 通信
TLS/SSL 协议建立标识和信任,并对所有类型的通信进行加密。 TLS/SSL 实现了安全通信,尤其是承载商业和客户数据的网络流量。
你可以使用任何类型的 TLS/SSL 证书。 例如,可以使用证书颁发机构颁发的证书、扩展验证证书、支持任意数量子域的通配符证书,或用于开发和测试环境的自签名证书。
使用零信任加载证书安全性
零信任基于“从不信任、始终验证、无凭证”的原则。 零信任通过消除未知和非托管证书来帮助保护所有通信。 零信任涉及仅信任在授予对这些证书的访问权之前通过验证身份共享的证书。
为了从 Azure 密钥保管库安全加载证书,Spring Boot 应用使用托管标识和 Azure 基于角色的访问控制 (RBAC)。 Azure Spring Apps 使用提供者服务主体和 Azure 基于角色的访问控制。 此安全加载使用 Azure 密钥保管库 Java 加密体系结构 (JCA) 提供程序提供支持。 有关详细信息,请参阅适用于 Java 的 Azure 密钥保管库 JCA 客户端库。
使用 Azure 密钥保管库,可以控制证书的存储和分发,以减少意外泄漏。 应用程序和服务可以安全地访问证书。 密钥保管库使用 Azure 基于角色的访问控制,使用最小权限原则将访问权限锁定为仅对需要访问权限的人员(例如管理员)以及应用程序的访问。 应用程序和服务使用 Microsoft Entra ID 和 Azure 基于角色的访问控制进行身份验证和授权以访问证书。 可以通过其完整的审计跟踪监控 Key Vault 中证书的访问和使用情况。
保护端到端的通信或随时终止 TLS
如下图所示,通过以下组件进行多个通信段:
- Azure Front Door 等网络访问点
- Azure 应用网关
- F5 BIG-IP 本地流量管理器
- Azure API 管理
- Apigee API 管理 Spring Boot 应用和后端系统,例如数据库、消息传递和事件系统以及应用缓存。
可以在 Spring Boot 应用程序的任何通信点保护端到端通信或终止传输级安全性。
以下几节更详细地描述了此体系结构。
第 1 段:与 Azure Spring 应用程序的安全通信
第一段(图中的第 1 段)表示从使用者到 Azure Spring 应用中的入口控制器的通信。 这些使用者包括浏览器、移动电话、台式机、信息亭或网络访问点,例如 Azure Front Door、Azure 应用网关、F5 BIG-IP 本地流量管理器、Azure API Management 和 Apigee API Management。
默认情况下,此段使用 Microsoft 提供的 *.microservices.azure.cn
域 TLS/SSL 证书进行保护。 可以通过将自定义域绑定到 Azure Spring 应用中的应用,从而在 Azure Key Vault 中应用你自己的 TLS/SSL 证书。 不需要编写代码。 有关详细信息,请参阅教程:将现有的自定义域映射到 Azure Spring Apps。
第 2 段:保护从入口控制器到应用程序的通信
下一段(图中的第 2 段)表示从 Azure Spring 应用入口控制器到 Azure Spring 应用上的任何应用程序的通信。 可以启用 TLS/SSL 以保护从入口控制器到支持 HTTPS 的应用程序的流量。 有关更多信息,请参阅为应用程序启用入口到应用程序 TLS。
Spring Boot 应用可以使用 Spring 的方法来启用 HTTPS,或者该应用可以使用 Azure 密钥保管库证书 Spring Boot Starter 来保护通信。 有关详细信息,请参阅教程:使用 Azure Key Vault 证书确保 Spring Boot 应用安全。
需要以下三个配置步骤,才能使用 Azure 密钥保管库中的 TLS/SSL 证书保护通信。 不需要编写代码。
在 pom.xml 文件中包含以下 Azure 密钥保管库证书 Spring Boot Starter 依赖项:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>azure-spring-boot-starter-keyvault-certificates</artifactId> </dependency>
添加以下属性以将应用配置为从 Azure 密钥保管库加载 TLS/SSL 证书。 请务必指定 Azure 密钥保管库的 URI 和证书名称。
azure: keyvault: uri: ${KEY_VAULT_URI} server: ssl: key-alias: ${SERVER_SSL_CERTIFICATE_NAME} key-store-type: AzureKeyVault
启用应用的托管标识,然后向托管标识授予对 Azure 密钥保管库的“获取”和“列表”访问权限。 有关详细信息,请参阅在 Azure Spring 应用中为应用程序启用系统分配的托管标识和证书访问控制。
第 3 段:从应用到托管中间件的安全通信
图中的下一段(第 3 段)表示从任何应用到 Azure Spring Apps 中的托管 Spring Cloud 配置服务器和 Spring Cloud 服务注册表的通信。 默认情况下,此段使用 Microsoft 提供的 TLS/SSL 证书进行保护。
第 4 段:保护应用到应用的通信
下一段(图中的第 4 部分)表示应用与 Azure Spring 应用中的另一个应用之间的通信。 可以使用 Azure 密钥保管库 Certificates Spring Boot Starter 将调用方应用配置为信任启用了 HTTPS 的调用应用的 TLS/SSL 证书。 接收方 Spring Boot 应用可以使用 Spring 的方法来启用 HTTPS,或者该应用可以使用 Azure 密钥保管库证书 Spring Boot Starter 来保护通信。 有关详细信息,请参阅教程:使用 Azure Key Vault 证书确保 Spring Boot 应用安全。
第 5 段:保护应用与外部系统的通信
关系图中的下一段(第 5 段)表示在 Azure Spring Apps 和外部系统中运行的应用之间的通信。 你可以使用 Azure Key 密钥保管库 Spring Boot Starter 将 Azure Spring 应用中运行的应用配置为信任任何外部系统提供的 TLS/SSL 证书。 有关详细信息,请参阅教程:使用 Azure Key Vault 证书确保 Spring Boot 应用安全。
将 TLS/SSL 证书从密钥保管库隐式加载到应用程序中
如果你的 Spring 代码、Java 代码或开源库(如 OpenSSL)依赖 JVM 默认 JCA 链将证书隐式加载到 JVM 的信任存储中,那么可以将 TLS/SSL 证书从密钥保管库导入 Azure Spring 应用程序并在应用程序中使用这些证书。 有关详细信息,请参阅在 Azure Spring Apps 的应用程序中使用 TLS/SSL 证书。
为后端系统上传知名的公共 TLS/SSL 证书
对于要与云中或本地系统中的后端服务进行通信的应用,可能需要使用公共 TLS/SSL 证书来保护通信。 可以上传这些 TLS/SSL 证书以保护出站通信。 有关详细信息,请参阅在 Azure Spring Apps 的应用程序中使用 TLS/SSL 证书。
自动预配和配置以保护通信
使用 ARM 模板、Bicep 或 Terraform,可以自动预配和配置上述所有 Azure 资源以保护通信。
构建你的解决方案和安全通信
Azure Spring 应用是适用于 Spring Boot 应用程序的完全托管式服务。 Azure Spring Apps 从用户中提取基础结构和 Spring Cloud 中间件管理的复杂性。 用户可以专注于构建业务逻辑,而让 Azure 来负责动态缩放、补丁、安全性、合规性和高可用性。 只需几个步骤,几分钟内即可预配 Azure Spring 应用、创建应用程序、部署和扩展 Spring Boot 应用程序,并开始保护通信。
Azure Spring 应用由 Microsoft 和 VMware 共同构建、运营和支持。