使用用户名/密码凭据从一个应用程序访问另一个应用程序会带来巨大的安全风险,原因有很多。今天,我们宣布了 Java 应用程序与 Azure 数据库和事件服务进行无密码连接的预览版,让您终于可以摆脱使用密码。
密码的安全挑战
应谨慎使用密码,开发人员绝不应将密码放在不安全的位置。许多 Java 应用程序使用用户名和密码连接到后端数据、缓存、消息传递和事件服务,或其他敏感凭据,例如访问令牌或连接字符串 。如果泄露,密码可能会被用于未经授权地访问敏感信息,例如您为即将推出的活动构建的销售目录,或者只是所有必须保密的客户数据。
将密码嵌入到应用程序本身会带来巨大的安全风险,原因有很多,包括通过代码存储库发现(请参见下图 1)。许多开发人员使用环境变量外部化此类密码,以便应用程序可以从不同的环境中加载它们。但是,这只是将风险从代码本身转移到执行环境。任何获得环境访问权限的人都可以窃取密码,这反过来又会增加您的数据泄露风险。
图 1 – 显示了带有嵌入式用户名和密码以连接到数据库的 Java 代码
我们的客户可能需要严格的安全要求才能连接到 Azure 服务,而无需将密码泄露给开发人员、运营人员或任何其他人。他们通常使用保管库来存储和加载密码到应用程序中,并且他们通过添加密码轮换要求和过程进一步降低了风险。这反过来又会增加操作复杂性,并可能导致应用程序连接中断。
无密码连接 – 零信任
现在,您可以在应用程序中使用无密码连接,以通过无需代码的配置连接到基于 Azure 的服务。您不再需要轮换密码。使用“永不信任,始终验证和无凭据”的原则,零信任通过在授予后端服务访问权限之前,仅在验证身份后才信任机器或用户,从而帮助保护所有通信。
VIDEO
“我们拥有的每个密码和每个 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 启动器连接到使用 Spring Data JPA 模块的 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 准备您的应用程序 …
领先一步 VMware 提供培训和认证,以加速您的进步。
了解更多 获取支持 Tanzu Spring 在一个简单的订阅中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。
了解更多 即将举行的活动 查看 Spring 社区中所有即将举行的活动。
查看全部