刪除密碼:Spring Boot 應用連線 Azure 服務時無需密碼

工程 | Josh Long | 2022 年 9 月 27 日 | ...

使用使用者名稱/密碼憑證從一個應用訪問另一個應用會帶來巨大的安全風險。今天,我們宣佈推出 Java 應用連線 Azure 資料庫和事件服務的無密碼連線預覽版,讓您最終擺脫使用密碼的方式。

密碼帶來的安全挑戰

密碼應謹慎使用,開發人員絕不能將密碼存放在不安全的位置。許多 Java 應用使用使用者名稱和密碼,或其他敏感憑證(如訪問令牌或連線字串)連線到後端資料、快取、訊息傳遞和事件服務。如果洩露,這些密碼可能被用於未經授權訪問敏感資訊,例如您為即將開展的活動構建的銷售目錄,或者必須保密的所有客戶資料。

將密碼嵌入應用程式本身會帶來巨大的安全風險,原因有很多,包括透過程式碼倉庫洩露(見圖 1)。許多開發人員透過環境變數將這些密碼外部化,以便應用程式可以從不同的環境中載入它們。然而,這只是將風險從程式碼本身轉移到執行環境。任何獲得環境訪問許可權的人都可以竊取密碼,這反過來又增加了資料洩露的風險。

圖 1 – 顯示了包含嵌入式使用者名稱和密碼連線資料庫的 Java 程式碼

我們的客戶可能對連線 Azure 服務有嚴格的安全要求,不允許將密碼暴露給開發人員、運維人員或其他人。他們通常使用金鑰保管庫來儲存密碼並載入到應用程式中,並透過新增密碼輪換要求和程式來進一步降低風險。但這反過來增加了操作複雜性,並可能導致應用程式連線中斷。

無密碼連線 – 零信任

現在您可以在應用程式中使用無密碼連線,透過無需編寫程式碼的配置連線到 Azure 服務。您不再需要輪換密碼。零信任秉持“永不信任,始終驗證,無憑證”的原則,透過在授權訪問後端服務之前驗證機器或使用者的身份來幫助保護所有通訊。

“我們擁有的每一個密碼和每一個金鑰保管庫都是潛在的風險,增加了更多的開銷和管理成本。我總是很高興看到更多的身份驗證和授權由平臺為我們處理,並作為簡單的整合提供給 Azure 上的 Java 和 Spring 生態系統。當我現在可以刪除金鑰保管庫,因為 PostgreSQL 支援無密碼連線時,我不會流一滴眼淚。”
-Jonathan Jones,首席解決方案架構師,瑞士再保險管理有限公司 (Swiss Re Management Ltd)(瑞士)

使用託管標識和 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&amp;bc=%2Fazure%2Fdeveloper%2Fintro%2Fbreadcrumb%2Ftoc.json&amp;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=passwordless&amp;toc=%2Fazure%2Fdeveloper%2Fintro%2Ftoc.json&amp;bc=%2Fazure%2Fdeveloper%2Fintro%2Fbreadcrumb%2Ftoc.json">Spring
            Data JDBC</a></div>
        <div>
            <a href="https://learn.microsoft.com/en-us/azure/developer/java/spring-framework/configure-spring-data-jpa-with-azure-mysql?tabs=passwordless&amp;toc=%2Fazure%2Fdeveloper%2Fintro%2Ftoc.json&amp;bc=%2Fazure%2Fdeveloper%2Fintro%2Fbreadcrumb%2Ftoc.json">Spring
                Data JPA</a></div>
    </td>
    <td>
        <div><a href="https://learn.microsoft.com/en-us/azure/developer/java/spring-framework/migrate-mysql-to-passwordless-connection?toc=%2Fazure%2Fdeveloper%2Fintro%2Ftoc.json&amp;bc=%2Fazure%2Fdeveloper%2Fintro%2Fbreadcrumb%2Ftoc.json&amp;tabs=sign-in-azure-cli%2Cjava%2Capp-service%2Capp-service-identity">Delete
            passwords</a></div>
    </td>
</tr>


<tr>
    <td>
        <div>Azure Database for PostgreSQL</div>
    </td>
    <td>
       <a
                href="https://learn.microsoft.com/en-us/azure/postgresql/single-server/connect-java?toc=%2Fazure%2Fdeveloper%2Fintro%2Ftoc.json&amp;bc=%2Fazure%2Fdeveloper%2Fintro%2Fbreadcrumb%2Ftoc.json&amp;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-postgresql?tabs=passwordless&amp;toc=%2Fazure%2Fdeveloper%2Fintro%2Ftoc.json&amp;bc=%2Fazure%2Fdeveloper%2Fintro%2Fbreadcrumb%2Ftoc.json">Spring
            Data JDBC</a></div>
        <div>
            <a href="https://learn.microsoft.com/en-us/azure/developer/java/spring-framework/configure-spring-data-jpa-with-azure-postgresql?tabs=passwordless&amp;toc=%2Fazure%2Fdeveloper%2Fintro%2Ftoc.json&amp;bc=%2Fazure%2Fdeveloper%2Fintro%2Fbreadcrumb%2Ftoc.json">Spring
                Data JPA</a></div>
    </td>
    <td>
        <div><a
                href="https://learn.microsoft.com/en-us/azure/developer/java/spring-framework/migrate-postgresql-to-passwordless-connection?toc=%2Fazure%2Fdeveloper%2Fintro%2Ftoc.json&amp;bc=%2Fazure%2Fdeveloper%2Fintro%2Fbreadcrumb%2Ftoc.json&amp;tabs=sign-in-azure-cli%2Cjava%2Cservice-connector%2Cservice-connector-identity%2Cassign-role-service-connector">Delete
            passwords</a></div>
    </td>
</tr>
<tr>
    <td> Azure SQL Database</td>
    <td> JDBC – coming soon</td>
    <td>
        <div><a
                href="https://learn.microsoft.com/en-us/azure/developer/java/spring-framework/deploy-passwordless-spring-database-app?tabs=sqlserver&amp;toc=%2Fazure%2Fdeveloper%2Fintro%2Ftoc.json&amp;bc=%2Fazure%2Fdeveloper%2Fintro%2Fbreadcrumb%2Ftoc.json">Spring
            Data JDBC</a></div>
        <div>
            <a href="https://learn.microsoft.com/en-us/azure/developer/java/spring-framework/deploy-passwordless-spring-database-app?tabs=sqlserver&amp;toc=%2Fazure%2Fdeveloper%2Fintro%2Ftoc.json&amp;bc=%2Fazure%2Fdeveloper%2Fintro%2Fbreadcrumb%2Ftoc.json">Spring
                Data JPA</a></div>
    </td>
    <td>
        <div><a
                href="https://learn.microsoft.com/en-us/azure/developer/java/spring-framework/migrate-sql-database-to-passwordless-connection?tabs=java%2Cservice-connector%2Cservice-connector-identity%2Cassign-role-service-connector">Delete
            passwords</a></div>
    </td>
</tr>
<tr>
    <td> Event Hubs – Kafka </td>
    <td> <a
            href="https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-quickstart-kafka-enabled-event-hubs?tabs=passwordless">Apache
        Kafka</a> </td>
    <td> <a
            href="https://learn.microsoft.com/en-us/azure/developer/java/spring-framework/configure-spring-cloud-stream-binder-java-app-kafka-azure-event-hub?tabs=passwordless&amp;toc=%2Fazure%2Fdeveloper%2Fintro%2Ftoc.json&amp;bc=%2Fazure%2Fdeveloper%2Fintro%2Fbreadcrumb%2Ftoc.json">Spring
        Cloud Stream Binder for Kafka</a> </td>
    <td> <a
            href="https://learn.microsoft.com/en-us/azure/developer/java/spring-framework/migrate-kafka-to-passwordless-connection?toc=%2Fazure%2Fdeveloper%2Fintro%2Ftoc.json&amp;bc=%2Fazure%2Fdeveloper%2Fintro%2Fbreadcrumb%2Ftoc.json&amp;tabs=azure-portal%2Csign-in-azure-cli%2Cjava-kafka%2Cservice-connector%2Cservice-connector-identity%2Cassign-role-service-connector">Delete
        passwords</a> </td>
</tr>
<tr>
    <td colspan=4>

        <a
            href="https://learn.microsoft.com/en-us/azure/storage/common/multiple-identity-scenarios?toc=%2Fazure%2Fdeveloper%2Fintro%2Ftoc.json&amp;bc=%2Fazure%2Fdeveloper%2Fintro%2Fbreadcrumb%2Ftoc.json&amp;tabs=java">Developer
        guide</a>

    </td>
</tr>

您可以使用 Service Connector 配置從 Azure“計算”服務(如 Azure Spring Apps、App Service、Azure Container Apps、Azure Kubernetes Service 和虛擬機器)到後端服務的無密碼連線

Service Connector Azure Spring Apps App Service Azure Container Apps

檢視這個可直接部署的 Spring Boot 示例程式碼

想了解更多關於 Azure Spring Apps 以及如何在 Microsoft Azure 上利用 Spring 的資訊? SpringOne 2022 即將到來!我感覺這就像是某種重要節日前的焦慮又興奮的時刻,那時你會收到禮物!伴隨而來的是 Spring Boot 3 和 Spring Framework 6。當然,我們會在 Spring 部落格上宣佈一切,但如果您想獲得從源頭學習的機會,那麼我希望您能在 2022 年 12 月 6-8 日來到舊金山,這是我的家鄉,也是我最喜歡的美國西海岸城市。(悄悄告訴你:如果您現在註冊,使用程式碼 S1VM22_Advocate_200 可享受 200 美元的門票折扣。)

訂閱 Spring 新聞通訊

訂閱 Spring 新聞通訊,保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助您加速進步。

瞭解更多

獲得支援

Tanzu Spring 在一個簡單的訂閱中提供對 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案。

瞭解更多

即將舉行的活動

檢視 Spring 社群所有即將舉行的活動。

檢視全部