使用用户名/密码凭据从一个应用程序访问另一个应用程序会带来巨大的安全风险。今天,我们宣布面向 Java 应用程序连接 Azure 数据库和事件服务提供无密码连接预览版,让您最终摆脱使用密码。
密码带来的安全挑战
密码应谨慎使用,开发人员绝不应将密码存放在不安全的位置。许多 Java 应用程序使用用户名和密码连接到后端数据、缓存、消息传递和事件服务,或使用访问令牌或连接字符串等其他敏感凭据 。如果泄露,这些密码可能被用于未经授权访问敏感信息,例如您为即将到来的营销活动构建的销售目录,或者所有必须保密的客户数据。
将密码直接嵌入应用程序本身会带来巨大的安全风险,原因有很多,包括通过代码仓库被发现(见下图图 1)。许多开发人员使用环境变量将此类密码外部化,以便应用程序可以从不同环境中加载它们。然而,这只是将风险从代码本身转移到了执行环境。任何获得环境访问权限的人都可以窃取密码,这反过来又会增加您的数据泄露风险。
图 1 – 显示嵌入用户名和密码连接数据库的 Java 代码
我们的客户可能对连接 Azure 服务有严格的安全要求,不允许向开发人员、操作员或任何其他人暴露密码。他们通常使用密钥保管库来存储密码并将其加载到应用程序中,并通过添加密码轮换要求和流程来进一步降低风险。然而,这会增加操作复杂性,并可能导致应用程序连接中断。
无密码连接 – 零信任
现在,您可以在应用程序中使用无代码配置连接到基于 Azure 的服务,无需密码。您不再需要轮换密码。零信任采用“永不信任,始终验证且无需凭据”的原则,通过在授予对后端服务的访问权限之前仅在验证身份后才信任机器或用户来帮助保护所有通信。
VIDEO
“我们拥有的每个密码和每个密钥保管库都是潜在的负担,增加了额外的开销和管理成本。我很高兴看到更多的认证和授权由我们处理,并作为简单的集成方式发布到 Azure 上的 Java 和 Spring 生态系统中。现在 PostgreSQL 支持无密码连接了,当我删除我们的密钥保管库时,我不会流一滴眼泪。”
-Jonathan Jones,首席解决方案架构师,瑞士再保险有限公司 。(瑞士)
使用托管身份和 Azure RBAC(基于角色的访问控制)相结合是 Java 应用程序安全、无密码连接到 Azure 服务的推荐身份验证选项。开发人员或操作员无需手动跟踪和管理托管身份的许多不同机密,因为这些任务由 Azure 在内部安全地处理。
您可以使用 Service Connector (见下图图 2)配置到 Azure 服务的无密码连接,或者您可以手动配置。Service Connector 在 Azure Spring Apps、App Service 和 Azure Container Apps 等应用程序托管服务中启用托管身份。它使用托管身份和 Azure RBAC 为后端服务配置无密码连接,并向应用程序提供必要的连接信息——不再需要密码。
图 2 – Service Connector 配置 Java 应用到 PostgreSQL 数据库的无密码连接
如果您检查已配置为无密码连接的应用程序运行环境,可以看到完整的连接字符串。例如,图 3 显示了它如何包含数据库服务器地址、数据库名称以及将身份验证委托给 Microsoft Azure 的 JDBC 身份验证插件的指令。
图 3 – 数据源配置“spring.datasource.url”显示无密码连接
让我们考虑一个使用 Spring Cloud Azure starter 连接到 PostgreSQL 数据库的 Spring Boot 应用程序。该 starter 为 Spring Data JPA 模块组合了一个不含密码的连接字符串。从连接字符串中,驱动程序知道必须加载 Azure 的 JDBC 身份验证插件,该插件使用 Azure Identity Client Library 获取访问令牌。驱动程序使用该令牌作为密码登录数据库——不再需要密码。
对于本地开发和测试,开发人员可以使用相同的配置连接到服务而无需使用密码。您将通过 Azure CLI、IntelliJ 或任何开发工具进行身份验证,并使用该身份安全地授权应用程序无需密码即可连接到 Azure 服务。
了解更多并删除密码!
您可以在应用程序中摆脱使用密码。立即迁移您现有的 Java 应用程序,使用无密码连接到 Azure 服务!
了解更多关于无密码连接的信息 – https://aka.ms/Delete-Passwords
资源
<tbody>
<tr>
<td>Azure Service</td>
<td>Java Quickstart</td>
<td>Spring Quickstart</td>
<td>Migration Guide</td>
</tr>
<tr>
<td> Azure Database for MySQL</td>
<td>
<a href="https://learn.microsoft.com/en-us/azure/mysql/single-server/connect-java?toc=%2Fazure%2Fdeveloper%2Fintro%2Ftoc.json&bc=%2Fazure%2Fdeveloper%2Fintro%2Fbreadcrumb%2Ftoc.json&tabs=passwordless">JDBC</a>
</td>
<td>
<div><a href="https://learn.microsoft.com/en-us/azure/developer/java/spring-framework/configure-spring-data-jdbc-with-azure-mysql?tabs…
各位 Spring 粉丝们好!欢迎来到新一期的《本周 Spring 动态》!
已经是九月 的最后一周了!一年已经过大半。天黑得越来越早。南瓜香料拿铁的季节也到了。虽然日照减少、天气转冷有点令人沮丧,但每到这个时候我仍然感到兴奋和高兴。你知道为什么吗?
SpringOne 2022 就要来了!我感觉就像在一个重要的节日前,那种既紧张又兴奋的心情,因为你可以收到礼物!同时,Spring Boot 3 和 Spring Framework 6 也即将发布。我们当然会在这里,在 Spring 博客上公布所有消息,但如果您想有机会向原作者 学习,我希望您能加入我们,于 2022 年 12 月 6 日至 8 日,就在我的家乡,美国我最喜欢的西海岸城市旧金山。悄悄话:如果您现在注册,使用代码 S1VM22_Advocate_200
,可以获得 200 美元的门票折扣……
让我感到尴尬的是,我花了很长时间才体会和理解到,软件开发的魔鬼藏在细节里。编写快乐路径的业务逻辑并不是难点!难的是失败案例、可观测性、韧性以及流程。是安全性和其他所谓的非功能性需求。是为*敏捷性*进行架构设计。是生产环境。Spring 之所以独特,是因为它位于许多令人兴奋的应用程序开发讨论的交汇点。
Spring 的社区包罗万象,是其关键的特色之一。这种讨论的多样性意味着任何试图涵盖所有想法的会议都面临着艰巨的任务。我不知道还有哪个展会——我在生命中参加并发表过*无数次*展会和活动!——能像 SpringOne 一样全面涵盖应用程序开发的不同维度……
我很高兴地宣布 Spring Batch 5.0.0-M6
现已可从我们的里程碑仓库 获取,并且 4.3.7
可从 Maven Central 获取。版本 4.3.7
是一个补丁版本,可以作为 4.3.6
的直接替代。您可以在此处 找到其发布说明。这篇博客文章主要介绍新的里程碑版本 5.0.0-M6
。在这个里程碑版本中,我们专注于改进 Spring Batch 的配置过程,使其更加灵活和直接。这篇博客文章将介绍框架在此领域的主要变化,并展示引入的新特性…
领先一步 VMware 提供培训和认证,助您快速提升。
了解更多 获取支持 Tanzu Spring 通过一个简单的订阅提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。
了解更多 近期活动 查看 Spring 社区的所有近期活动。
查看全部