刪除密碼:適用於 Spring Boot 應用程式連線至 Azure 服務的無密碼連線

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

基於許多原因,使用使用者名稱/密碼憑證從一個應用程式存取另一個應用程式會帶來巨大的安全風險。今天,我們宣布 Java 應用程式連線至 Azure 資料庫和事件服務的無密碼連線預覽版,讓您終於可以擺脫使用密碼的困擾。

密碼帶來的安全性挑戰

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

將密碼嵌入應用程式本身會帶來巨大的安全風險,原因有很多,包括透過程式碼儲存庫發現(請參閱下圖 1)。許多開發人員使用環境變數來外部化這些密碼,以便應用程式可以從不同的環境載入它們。然而,這只是將風險從程式碼本身轉移到執行環境。任何可以存取環境的人都可以竊取密碼,進而增加您的資料外洩風險。

圖 1 – 顯示具有嵌入式使用者名稱和密碼以連線到資料庫的 Java 程式碼

我們的客戶可能有嚴格的安全要求,希望在不向開發人員、操作員或任何其他人公開密碼的情況下連線到 Azure 服務。他們通常使用保存庫來儲存密碼並將其載入到應用程式中,並且他們透過增加密碼輪換要求和程序來進一步降低風險。反過來,這增加了操作複雜性,並可能導致應用程式連線中斷。

無密碼連線 – 零信任

現在,您可以在應用程式中使用無密碼連線,透過免程式碼設定連線到基於 Azure 的服務。您不再需要輪換密碼。透過「永不信任,始終驗證和無憑證」的原則,零信任有助於保護所有通訊的安全,只有在驗證身份後才信任機器或使用者,然後才授予他們存取後端服務的權限。

「我們擁有的每個密碼和每個 Key Vault 都是潛在的責任,這會增加更多的管理費用和成本。我總是很高興看到更多身份驗證和授權為我們處理,並作為簡單的整合發佈到 Azure 上的 Java 和 Spring 生態系統中。當我刪除我們的 Key Vault 時,我不會流下任何眼淚,因為現在 PostgreSQL 支援無密碼連線。」
–Jonathan Jones,首席解決方案架構師,Swiss Re Management Ltd。(瑞士)

使用受控識別和 Azure RBAC(角色型存取控制)組合是從 Java 應用程式安全、無密碼連線到 Azure 服務的建議驗證選項。開發人員或操作員不需要手動追蹤和管理許多不同的受控識別密碼,因為這些任務由 Azure 在內部安全地處理。

您可以使用 Service Connector 設定到 Azure 服務的無密碼連線(請參閱下圖 2),或者您可以手動設定它們。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 社群中所有即將舉行的活動。

檢視全部