使用用户名/密码凭据从一个应用程序访问另一个应用程序会带来巨大的安全风险,原因有很多。今天,我们宣布预览 Java 应用程序到 Azure 数据库和事件服务之间无密码连接的功能,让您终于可以摆脱使用密码了。
密码的安全挑战
密码应谨慎使用,开发人员绝不应将密码放置在不安全的位置。许多 Java 应用程序使用用户名和密码或其他敏感凭据(如访问令牌或连接字符串)连接到后端数据、缓存、消息传递和事件服务。如果泄露,密码可能会被用于未经授权地访问敏感信息,例如您为即将推出的活动构建的销售目录,或者只是所有必须保密的客户数据。
将密码嵌入到应用程序本身会带来巨大的安全风险,原因有很多,包括通过代码存储库发现(请参见下面的图 1)。许多开发人员使用环境变量外部化此类密码,以便应用程序可以从不同的环境中加载它们。但是,这只是将风险从代码本身转移到执行环境。任何获得环境访问权限的人都可以窃取密码,进而增加数据泄露的风险。
图 1 – 显示包含嵌入式用户名和密码以连接到数据库的 Java 代码
我们的客户可能对连接到 Azure 服务有严格的安全要求,而无需向开发人员、运营商或任何其他人公开密码。他们通常使用保管库来存储密码并将其加载到应用程序中,并且他们通过添加密码轮换要求和程序进一步降低了风险。这反过来增加了操作复杂性,并可能导致应用程序连接中断。
无密码连接 – 零信任
现在,您可以在应用程序中使用无密码连接来连接到基于 Azure 的服务,并且无需进行任何代码配置。您不再需要轮换密码。使用“从不信任,始终验证和无凭据”的原则,零信任通过在授予后端服务访问权限之前仅在验证身份后才信任机器或用户,从而帮助保护所有通信。
“我们拥有的每个密码和每个 Key Vault 都是潜在的风险,这会增加更多开销和管理成本。我总是很高兴看到更多身份验证和授权由我们处理,并作为简单的集成交付到 Azure 上的 Java 和 Spring 生态系统中。当我不再需要 Key Vault 时,我不会感到难过,因为 PostgreSQL 现在支持无密码连接。”
-Jonathan Jones,首席解决方案架构师,瑞士再保险管理有限公司(瑞士)
使用托管身份和 Azure RBAC(基于角色的访问控制)组合是 Java 应用程序到 Azure 服务安全无密码连接的推荐身份验证选项。开发人员或运营商无需手动跟踪和管理托管身份的许多不同机密,因为这些任务由 Azure 在内部安全地处理。
您可以使用 服务连接器(请参见下面的图 2)配置对 Azure 服务的无密码连接,或者您可以手动配置它们。服务连接器在 Azure Spring Apps、App Service 和 Azure Container Apps 等应用程序托管服务中启用托管身份。它使用托管身份和 Azure RBAC 为后端服务配置无密码连接,并为应用程序提供必要的连接信息 – 不再需要密码。
图 2 – 服务连接器为 Java 应用程序到 PostgreSQL 数据库的连接配置无密码连接
如果您检查配置为无密码连接的应用程序的运行环境,则可以看到完整的连接字符串。例如,图 3 显示了它如何承载数据库服务器地址、数据库名称以及将身份验证委托给 Microsoft Azure 的 JDBC 身份验证插件的指令。
图 3 – 数据源配置“spring.datasource.url”显示了无密码连接
让我们考虑一个连接到使用 Spring Cloud Azure 启动器的 PostgreSQL 数据库的 Spring Boot 应用程序。启动器为 Spring Data JPA 模块组合了一个无密码的连接字符串。从连接字符串中,驱动程序了解到它必须加载 Azure 的 JDBC 身份验证插件,该插件使用 Azure Identity 客户端库获取访问令牌。驱动程序使用令牌作为密码登录数据库 - 不再需要密码。
对于本地开发和测试,开发人员可以使用相同的安排来连接到服务,而无需使用密码。您将通过 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 的另一期!
9 月份已经进入最后一周了!今年已经过去了一大半。白天越来越快地变成了黑夜。南瓜香料拿铁也来了。天色变暗变冷有点让人扫兴,但在这个时候我还是感到兴奋和喜悦。你知道为什么吗?
SpringOne 2022 即将到来!我觉得这就像在某种重要的节日之前的那种焦虑而兴奋的时刻,你会收到礼物!以及随之而来的 Spring Boot 3 和 Spring Framework 6。我们当然会在 Spring 博客上发布所有公告,但如果您想有机会从源头学习,那么我希望您能加入我们,2022 年 12 月 6 日至 8 日,就在我的家乡旧金山,我最喜欢的美国西海岸城市,也是我的家乡。)悄悄话:如果您现在注册,使用代码 S1VM22_Advocate_200
可以享受通行证价格 200 美元的折扣……
Spring 团队一直在努力为 Spring 应用程序提供原生镜像支持。在使用 Spring Boot 2 的 Spring Native 实验项目中孵化了 3 年多之后,原生支持将随着 Spring Framework 6 和 Spring Boot 3 进入通用可用性!
原生镜像为 Java 应用程序提供了几乎即时的启动时间和减少的内存消耗。最近的 Spring Boot 3.0.0-M5
版本是我们首次寻求更广泛的社区反馈来了解我们的原生故事。如果您需要了解基础知识,请参阅 3 月下旬的 提前编译基础知识博客文章。您还可以学习 如何为 Spring Boot 3.0 准备您的应用程序……
我花了很长时间才意识到并理解,软件开发的细节非常重要。编写 happy-path 业务逻辑不是难点!难点在于故障情况、可观察性、弹性和流程。是安全性和其他所谓的非功能性需求。是为了敏捷性而进行的架构设计。是生产环境。Spring 独特之处在于它位于许多令人兴奋的应用程序开发讨论的十字路口。
Spring 的社区包含众多成员,并且是其关键的定义特征之一。这种多元化的讨论意味着任何试图涵盖全部想法的会议都需要做好准备。我不知道还有其他什么展会——在我的生活中,我已经参加过数千场展会和活动!——像 SpringOne 一样全面涵盖应用程序开发的不同维度……
领先一步
VMware 提供培训和认证,以加速您的进步。
了解更多获取支持
Tanzu Spring 在一个简单的订阅中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。
了解更多即将举行的活动
查看 Spring 社区中所有即将举行的活动。
查看全部