TechSummary 2025-08-06
· 閱讀時間約 22 分鐘
加速 Docker 強化映像的 FedRAMP 合規性 🚀
Source: https://www.docker.com/blog/fedramp-compliance-with-hardened-images/
- FedRAMP 合規挑戰: 聯邦風險與授權管理計畫 (FedRAMP) 合規成本高昂(45 萬至 200 萬美元以上),且需耗時 12 至 18 個月,這期間競爭對手可能已搶佔政府合約。企業需面對 NIST SP 800-53 中超過 400 項嚴格的安全控制要求。
- Docker 強化映像 (DHI) 解決方案: Docker 硬化映像提供自動化、可稽核的安全解決方案,旨在加速 FedRAMP 合規流程並降低維護成本。DHI 是一系列精簡的映像,持續更新以確保幾乎沒有已知的 CVE。
- FIPS 140 合規性: DHI 支援 FIPS 140 驗證的密碼學模組,預配置並經過測試,可確保正確功能。每個 FIPS 合規映像都附有簽名的證明,列出使用的 FIPS 驗證軟體及其 CMVP 認證和測試結果連結,支援 OpenSSL、Bouncy Castle 和 Go 等主要開源密碼學模組。
- STIG 強化映像: Docker 根據國防信息系統局 (DISA) 發布的通用作業系統 (GPOS) SRG,創建了客製化的容器 STIG。STIG 強化映像在安全建構過程中會使用 OpenSCAP 進行掃描,結果會作為簽名證明提供,其中包含易於查看的 STIG 合規分數,並支援輸出為 HTML 和 XCCDF 格式,便於稽核。
- 持續合規性:
- 漏洞減少: DHI 起始攻擊面減少高達 95%(按包數量計算),持續更新以確保幾乎沒有已知 CVE,並掃描病毒和機密。
- 漏洞檢測與修復: Docker 持續監控 CVE 來源,DHI 對嚴重/高風險漏洞的修復 SLA 為 7 天,中/低風險為 30 天,幫助滿足 FedRAMP 修復時限。提供 VEX (Vulnerability Exploitability eXchange) 證明來過濾不適用漏洞。
- 供應鏈透明度: DHI 使用 SLSA Build Level 3 安全建構管道,確保建構可驗證性與防篡改。提供簽名證明和多種 SBOM 格式。
- 稽核證據: DHI 證明符合 in-toto 證明標準,作為 provenance、資產管理、漏洞掃描及 FIPS 合規性的安全證據。
Docker 強化映像的下一步演進:客製化、FedRAMP 就緒、AI 遷移代理與深度整合 💡
Source: https://www.docker.com/blog/the-next-evolution-of-docker-hardened-images/
- DHI 的快速採用: Docker 硬化映像 (DHI) 在推出後兩個半月內快速普及,成為生產工作負載的可靠基礎,具有近乎零的 CVEs、縮小的攻擊面和強化的軟體供應鏈。
- 擴展映像目錄: DHI 目錄現已擴展,包含 RabbitMQ、Redis、Tomcat、NGINX、PostgreSQL、Prometheus、Azure Functions、Grafana、Loki、Netdata、Kubeflow 等,涵蓋消息佇列、Web 伺服器、資料庫、監控、AI/ML 基礎設施等生產就緒映像,所有映像均符合 SLSA 標準、已簽名並持續維護。
- AI 遷移代理: Docker 的 AI 助理能自動分析現有容器,並推薦或應用等效的強化映像,簡化從社群或內部映像遷移的過程。
- DHI 客製化: 提供新的自助 UI,允許用戶輕鬆注入內部憑證、安裝信任套件、調整運行時設定、定義用戶策略,而無需分支基礎映像。客製化內容打包為 OCI artifacts,保持與基礎映像分離,Docker 自動處理最終映像的建構、簽名並確保持續更新。
- FedRAMP 就緒變體: DHI 現提供 FedRAMP 就緒變體,內建 FIPS 啟用和 STIG 硬化,並提供簽名 SBOMs 和證明,以符合美國聯邦安全要求。FIPS 啟用映像利用經驗證的密碼學模組,STIG 就緒映像通過 OpenSCAP 掃描,並提供合規分數和完整的掃描輸出,並清晰地映射到 NIST 800-53 控制項。
- 與 Wiz 深度整合: DHI 與 Wiz 整合,為安全團隊提供更深入、更具上下文的風險可見性,尤其是在生產環境、網際網路暴露和敏感數據互動方面。通過 OpenVEX 文件和 OSV 建議,提供豐富的漏洞上下文。
- 獨立安全評估 (SRLabs): SRLabs 的獨立評估證實了 DHI 的安全態勢,驗證所有採樣的 DHI 映像均經過加密簽名、預設為無根 (rootless),並附帶 SBOM 和 VEX 元數據。評估未發現根權限逃逸或高嚴重性突破,並驗證攻擊面減少高達 95%,且 7 天的補丁 SLA 是優勢。
- 未來展望: DHI 致力於成為建構和運行安全應用程式的可靠基礎,通過廣泛的目錄、簡易客製化、FedRAMP 就緒變體以及與 Wiz 等工具的整合,簡化合規性並降低成本。
配置漂移:本地機器開發的陷阱 ⚙️
Source: https://blog.jetbrains.com/codecanvas/2025/08/configuration-drift-the-pitfall-of-local-machines/
- 什麼是配置漂移: 當開發人員的實際環境(包括套件、版本、系統工具、環境變數等)與專案預期配置逐漸偏離時,就會發生「配置漂移」,導致「在我的機器上可以運行」的問題。
- 漂移發生的原因: 通常不是故意的,而是因為不同團隊成員更新了不同的工具版本,全域安裝了 CLI 工具,或修改了配置檔卻忘記分享,導致
.env.local
或被忽略的設定腳本不同步。 - 配置漂移帶來的問題:
- 配置差異: 導致無法重現錯誤,團隊浪費時間尋找本地設定中的隱藏差異。
- 測試結果不一致: 不同的依賴版本或缺失的環境變數導致測試結果不一致。
- CI/CD 管道中斷: 本地運行正常的程式碼在部署時中斷,因為 CI 環境通常更嚴格和一致。
- 浪費時間調試設定: 新開發人員入職時需花費大量時間解決各種設定問題,降低生產力。
- 常見的處理方法及其不足:
- 固定工具版本和環境變數: 使用
nvm
、pyenv
等工具或.env
文件來固定版本,但無法強制執行,容易因手動更改而失效。 - 使用腳本自動化設定: 例如 Makefiles、Bash 腳本,提供可重現的設定說明,但腳本不是冪等的,無法在開發人員手動修改後修復漂移,也無法阻止其發生。
- 使用開發容器或聲明式環境: Dockerfiles、devcontainer.json、Nix 等工具允許在系統層級標準化開發環境,每次都可以重建相同的環境。但這些方法可能導致笨重的工作流程、性能問題、調試困難,且學習曲線陡峭,仍運行在不同的宿主機上。
- 固定工具版本和環境變數: 使用
- 更好的解決方案:雲端開發環境 (CDEs): 讓開發環境運行在遠端伺服器上,但通過優化協定提供類似本機 IDE 的流暢體驗。CDEs 確保工作區快速、響應且一致,每次打開 IDE 都像獲得了全新的、乾淨的筆記型電腦。GitHub Codespaces、Gitpod 和 Coder 等工具提供了 CDE 的協調層。
- JetBrains CodeCanvas: JetBrains 自家的 CDE 協調器,提供集中式範本、設定腳本和安全策略,並對 JetBrains IDEs 提供一流支持,同時也支援 VS Code 或 Cursor。可直接在 AWS 帳戶中安裝使用。
Java 月度註釋 — 2025 年 8 月 ☕
Source: https://blog.jetbrains.com/idea/2025/08/java-annotated-monthly-august-2025/
- 專題內容:Java 與 AI 整合成為焦點
- 由 Java Champion A N M Bazlur Rahman 撰寫,強調 Java 生態系統正進入 AI 整合的生產就緒階段。
- JDK 25 的 AI 優勢: JEP 519 (Compact Object Headers) 減少堆記憶體使用和提高執行速度;JEP 505 (Structured Concurrency,第五次預覽) 簡化並行編程,適合協調多個 AI 模型調用。Project Leyden 和 Vector API 也強化了 Java 在 AI 工作負載中的地位。
- 框架趨勢: Spring AI 1.0 全面可用,支援 20+ 模型和內建 RAG 功能。LangChain4j 1.1.0 引入全面的 Guardrail 支援,並與 Microsoft 策略合作,使其企業就緒。Rod Johnson 的 Embabel agent framework 被譽為「Spring Framework 以來最重要的專案」,通過目標導向的行動規劃創建確定性、可解釋的 AI 代理。LangChain4j 與 MicroProfile 和 Jakarta 規範的整合也正在形成。
- 實踐與資源: llm-jakarta GitHub 專案提供 Jakarta EE 和 LLM 整合的 10 個實踐步驟學習路徑。GPULlama3.java 展示了 Java 如何利用 GPU 加速 LLM 推理。
- 雲端支援: Oracle、Google 和 Microsoft 等雲端提供商全面支持 Java 的 AI 未來,推出與 LangChain4j 整合的生成式 AI、Java Agent Development Kit 和 Azure 原生整合。
- Java 新聞: 包括四篇 Java News Roundup、關於 Java 25 非 LTS 版本的 Inside Java Newscast #94、Java GPGPU 啟用狀態、以及 Java JSON API 的 Inside Java Newscast #95。
- JEPs 目標 JDK 25: JEP 515 (Ahead-of-Time Method Profiling)、JEP 518 (JFR Cooperative Sampling)、JEP 520 (JFR Method Timing & Tracing)。
- Java 教學與技巧: 涵蓋各種主題,例如 Java Champion Dr. Heinz Kabutz 的 A Bootiful Podcast、Java Regex 動態替換、Java 虛擬執行緒、Module Import Declarations 等。
- Kotlin 專區: 介紹 Kotlin 相關更新,如類型類別、在 ING 中的採用、Kakao Pay 選擇 Kotlin 進行後端開發的案例研究等。
- AI 新聞與洞察: 涵蓋 JetBrains 的 Kineto、Google Gemini CLI、AI Agents、Hugging Face 的 Reachy Mini Robots、數據重塑、LLMs 新前沿、構建以產品為先的工程文化、使用 ADK for Java 掌握代理工作流程等。
- 語言、框架、函式庫與技術: Spring、Wiremock、Spring Debugger、MongoDB 資料建模、Advanced RAG、從 C 到 Rust 的遷移、結對編程、LangChain4j 製作 RAG 應用、Git 預設選項、Spring Cloud Stream 等。
- 會議與活動: JVM Language Summit (8/4-6)、JCrete (8/4-8)、SpringOne (8/25-28)、IntelliJ IDEA Conf 2025 回顧。
- 文化與社群: 技術會議策展指南、信任優先的領導力與團隊建設、從初級工程師到資深工程師的經驗分享、生產環境與開發環境鏡像的重要性、迎接下一代程式設計師、引導工程師走向 AI 輔助的未來。
- IntelliJ IDEA 團隊更新: Spring Debugger 支援動態資料庫連接、IntelliJ IDEA 遷移到統一分發版、2025.2 Beta 版更新方法。
IntelliJ IDEA 2025.2 錯誤修正一覽 🛠️
Source: https://blog.jetbrains.com/idea/2025/08/whats-fixed-intellij-idea-2025-2/
- 獨立的錯誤修正概覽: IntelliJ IDEA 2025.2 首次發布獨立的「錯誤修正」概述,旨在清晰呈現穩定性和品質改進,與「新功能」內容分開。
- 主要改進 領域:
- Spring 支援: 強化 Kotlin 在 Spring 專案中的支援,包括新的 Live templates、更智慧的 Bean 支援、清晰的配置(例如
@ConfigurationProperties
到 YAML/屬性)和改進的 Spring MVC/Spring Data 支援。 - Spring Framework 支援: 解決 Spring Security 中自定義登入/登出 URL 和複雜角色分配的解析問題,並增強 Spring Web 庫的 URL 引用識別與自動完成。
- 遠端開發: 顯著改進遠端開發體驗,編輯器響應速度與本地設置相當,搜尋、查找和 Git 分支彈出視窗同樣流暢。調試器後端與前端分離,實現原生調試。插件和設置在客戶端和主機之間正確同步。Toolbox 應用程式現在直接提供遠端連接,速度提升至少 1.5 倍。
- WSL 支援: 重新設計 WSL 整合,引入新的 API 大幅減少 IDE 與 WSL 之間的通訊開銷,使 WSL 專案能夠像本地專案一樣原生工作。改進 Maven 和 Gradle 專案的構建和測試可靠性,並統一應用程式伺服器體驗。
- Kotlin K2 模式: K2 模式持續演進,支援 Kotlin 2.2 特性,改進程式碼自動完成性能,增加類型智能完成支援,並引入新的檢查、協程相關快速修復和重構。
- Kotlin Notebook 品質升級: 專注於穩定性和編輯體驗。AI 助手單元格允許選擇模型、查看提示歷史記錄和自動建議。修復了不正確的語法高亮顯示,改進了依賴管理,並增加了 Kotlin 意圖和檢查。
- Maven 執行: IntelliJ IDEA 2025.2 起,Maven 目標的環境配置(例如
.m2/settings
、.mavenrc
、環境變數)將完全被尊重,解決了 IDE 與 CLI 執行差異的問題。支援使用 Maven Daemon 加速目標執行並減少資源使用。 - 雲端工具:
- Terraform: 更好地支援 provider-defined functions(語法高亮、快速導航、自動完成),並支援 Keycloak provider 和 Google Cloud Beta 資源,以及
for_each
導入區塊。 - Kubernetes: 改進 Port-forwarding,支持埠自動建議和即時可用性檢查。處理大型日誌文件時性能更好,提供更多 Pod 資訊,並自動標記活躍叢集。
- GitLab CI: 智慧支援 CI 語言變數表達式、豐富的程式碼自動完成、懸停文檔,並支持直接注入 shell 程式碼到管道中。
- Terraform: 更好地支援 provider-defined functions(語法高亮、快速導航、自動完成),並支援 Keycloak provider 和 Google Cloud Beta 資源,以及
- 調試器: 支援在執行期間的任何應用程式暫停點(不限於斷點)評估程式碼。Analyze Stack Trace 或 Thread Dump 動作現在可以分析來自
jstack
和jcmd
工具的輸出(包括新的 JSON 格式),並支援 Eclipse OpenJ9 JVM。 - GraalVM 調試器: 改善原生映像調試器,提供更豐富的變數渲染和增強的表達式評估。
- 分析器: 解決與 Java 24 和即將推出的 Java 25 相關的分析器問題,並支援新的語言功能。
- 性能: 全面啟用了重新設計的終端,顯著改進了渲染和整體終端性能。處理大型資料庫時,PostgreSQL 和 Microsoft SQL Server 現在按層級進行內省,減少了模式加載開銷。
- 開發者體驗: 優化了 UX,尤其是在閱讀程式碼方面,例如重新設計了 Parameter Info 彈出視窗,使其更清晰、更易讀。
- Spring 支援: 強化 Kotlin 在 Spring 專案中的支援,包括新的 Live templates、更智慧的 Bean 支援、清晰的配置(例如
Kotlin Notebook 結合 IntelliJ Platform:推進 IDE 插件開發 ✍️
- 插件開發的價值與挑戰: JetBrains IDEs 通過插件提供強大的擴展性,但傳統的插件開發入門門檻較高,需要處理文檔、專案範本、依賴和 Gradle 配置等。
- 引入 Kotlin Notebook: Kotlin Notebook 是一個互動式平台,用於使用 Kotlin 進行資料分析、視覺化和原型設計。它類似 Jupyter Notebook,結合 Kotlin 的功能和筆記本的互動性,支援迭代工作流程,提高生產力。
- 與 IntelliJ Platform 的整合: Kotlin Notebook 現已能直接在活動的 IDE 運行時環境中執行 IntelliJ Platform 程式碼。這使得開發人員可以更快地構思、建構和測試插件功能,並輕鬆地將完成的程式碼整合到插件中。此功能已在 2025.2 版本中推出。
- 核心功能:
- 啟動設定: 在 Kotlin notebook 中,使用
%use intellij-platform
(Windows 建議配合%useLatestDescriptors
直到 2025.2.1 發布)來載入必要的 IntelliJ Platform 函式庫。 - 簡化的 UI 渲染:
runInEdt {}
輔助函數確保 UI 程式碼在 Event Dispatch Thread (EDT) 上運行,並立即渲染 UI 元素(如 Kotlin UI DSL 或標準 Swing 組件),所有渲染的組件都保持完全互動。 - 資源管理: 通過
Disposer
機制管理筆記本元素(如擴展、監聽器、動作或 UI 組件)的生命週期,確保在關閉專案或重新啟動筆記本時 進行清理。
// Register something that needs cleanup
Disposer.register(notebookDisposable, myDisposable)
Disposer.register(notebookDisposable) {
// Cleanup components directly
}- 載入插件: 使用
loadPlugins(vararg pluginIds: String)
輔助函數來載入 IDE 中已安裝的其他插件。
// Load specific plugins
loadPlugins("Git4Idea", "com.intellij.java")- 擴展註冊: 可以在筆記本中動態註冊擴展,而無需
plugin.xml
檔案。例如,註冊自定義 ChatMessageHandler 和 ChatAgent。
loadPlugins("com.intellij.ml.llm")
class MyChatMessageHandler : ChatMessageHandler {
override fun isApplicable(project: Project, kind: ChatKind, userMessage: UserMessage) = true
override fun createAnswerMessage(
project: Project,
chat: ChatSession,
userMessage: UserMessage,
kind: ChatKind,
) = SimpleCompletableMessage(chat)
override suspend fun serveAnswerMessage(
project: Project,
chat: ChatSession,
answerMessage: ChatMessage,
smartChatEndpoints: List<SmartChatEndpoint>,
) {
ChatAgent.EP_NAME.extensionList
.find { it.id == "groot" }
?.serveAnswerMessage(project, chat, answerMessage)
}
}
registerExtension(ChatMessageHandler.EP, MyChatMessageHandler())
class MyChatAgent : ChatAgent {
override val id = "groot"
override val name = "I am Groot"
override fun createAnswerMessage(
project: Project,
chat: ChatSession,
userMessage: UserMessage,
kind: ChatKind,
) = SimpleCompletableMessage(chat)
override suspend fun serveAnswerMessage(
project: Project,
chat: ChatSession,
answerMessage: ChatMessage,
) {
answerMessage as SimpleCompletableMessage
answerMessage.appendText("*I am Groot*".privacyConst)
}
}
registerExtension(ChatAgent.EP_NAME, MyChatAgent())- 探索 IDE 環境: 提供訪問當前運行 IDE 內部細節的方法,例如產品資訊、建構細節和檔案系統位置,並通過 Plugin Manager 和 Plugin Repository 與 JetBrains Marketplace 中的插件互動。
// Access IDE information
productInfo.name // "IntelliJ IDEA"
productInfo.version // "2025.3"
productInfo.buildNumber // "253.xxxx"
idePath // “/Users/hsz/Applications/IntelliJ IDEA Ultimate 2025.3 Nightly.app/Contents”
ide // com.jetbrains.plugin.structure.ide.Ide instance
// Work with the plugin manager
pluginManager.findEnabledPlugin(PluginId.getId("com.intellij.java"))
// Request JetBrains Marketplace
pluginRepository.pluginManager.searchCompatibleUpdates(
build = "${productInfo.productCode}-${productInfo.buildNumber}",
xmlIds = listOf("org.jetbrains.junie"),
channel = "default",
) - 啟動設定: 在 Kotlin notebook 中,使用
- 機會與改進: 這項整合極大地簡化了自定義插件開發,有望實現 IDE 功能和插件的快速原型設計、平台 API 和行為的快速測試、互動式 IntelliJ Platform 開發文檔和教程,並計畫未來支援 Compose/Jewel 組件渲染。
雲端蔓延是必然;雲端複雜性則不然 ☁️
Source: https://dzone.com/articles/cloud-sprawl-vs-cloud-complexity
- 雲端蔓延趨勢: 不到十年前,大多數團隊在單一雲端帳戶中運行開發、測試和生產環境。如今,雲端旅程通常始於至少 10 個 AWS 帳戶,每個環境(網路、日誌、安全等)都分配一個獨立帳戶。如果有多個業務單位或產品,帳戶數量還會成倍增長,導致「雲端蔓延」成為常態。
- 核心觀點: 文章指出,雖然雲端蔓延是不可避免的現象,但雲端環境的複雜性卻不一定是必然。這暗示了存在解決方案或策略,可以有效管理這些多帳戶、多環境所帶來的複雜性,使其變得可控。
使用客製化 CI/CD 伺服器自動化 Node.js 部署 🚀
Source: https://dzone.com/articles/automating-nodejs-deployments-with-a-custom-cicd-server
- Node.js 部署挑戰: 隨著 Node.js 專案的成長,管理和部署應用程 式可能成為瓶頸,導致更新頻繁、依賴管理複雜以及手動重啟流程的困擾。
- CI/CD 解決方案: 建構一個設計良好的持續整合和持續部署 (CI/CD) 管道,可以有效減輕這些負擔。
- 客製化 CI/CD 伺服器: 本教學將展示如何建立一個客製化的 CI/CD 伺服器,該伺服器會監聽 GitHub webhook 事件,並利用 GitHub Actions、PM2 和 shell 腳本來執行自動化部署。
- 實現目標: 通過此方法,可以減少手動更新的負擔,簡化依賴管理,並消除對手動重啟流程的需求,從而避免部署瓶頸。
jBPM 作為 AI 編排平台 🤖
Source: https://dzone.com/articles/jbpm-as-ai-orchestration-platform
- jBPM 定位: 本文將 jBPM 定義為一個用於編排外部 AI 核心環境的平台,這些環境通常用於設計和運行 AI 解決方案,例如 Python。
- AI 編排功能概述: 文章將概述 jBPM 中最相關的功能,這些功能使其能夠有效執行 AI 編排任務。
- 實踐範例: 文中將通過一個實際範例來演示 jBPM 作為 AI 編排平台的有效性,展現其如何連接、協調和管理 AI 解決方案的工作流程。
在 GCP 上使用狀態機建立可擴展、彈性的工作流程 🌳
Source: https://dzone.com/articles/designing-retry-resilient-fare-pipelines-with-idem
- 分散式系統中的工作流程挑戰: 現代後端架構通常由多個微服務和無伺服器函數組成,在這種分散式系統中可靠地協調複雜流程具有挑戰性。
- 狀態機的作用: 狀態機通過將流程建模為一系列定義的狀態和轉換,提供可預測的序列、循環、分支和錯誤處理,從而實現穩健的工作流程。它們對於需要可擴展、彈性任務協調的後端系統至關重要。
- GCP 上的狀態機解決方案: Google Cloud Platform (GCP) 提供了 Workflows 服務,這是一個完全託管的編排引擎,可按順序執行步驟(狀態),調用各種服務和 API。它類似於 AWS Step Functions,遵循類似的狀態機模型來連接服務以實現持久、有狀態的執行。
- 結合 GCP 服務: Workflows 與 Eventarc(事件驅動服務)、Pub/Sub(消息傳遞)以及 Cloud Functions 和 Cloud Run(計算平台)等服務結合使用,提供了強大的工具來實現狀態機模式,從而創建用於訂單處理、數據管道和長期運行流程(帶有人工或外部觸發器)的可擴展、容錯工作流程。