為什麼 GitOps 對 DevSecOps 至關重要
已發表: 2022-02-24DevOps 在自動化、可追溯性,特別是事先孤立的小組和利益相關者之間的協作方面的收益被廣泛接受。 但是,由於 DevOps 團隊的主要任務是將操作轉移到容器化的 Kubernetes 環境中,因此經過長期嘗試和測試的 DevOps 策略可能會縮短。 安全問題和陷阱也體現在獨特的方法中。
奇妙的信息是 GitOps 可以填補 DevOps 中的一系列空白,以確保分佈式環境的穩定性。 這是因為 GitOps 流程非常有利於 DevSecOps,此處列出的定義為適用於整個軟件生命週期的安全最有效的策略。
在本文中,我們將了解 GitOps 如何為 DevSecOps 提供重要框架,通過 CI/CD 以及 Kubernetes 集群上應用程序管理的編寫部署階段增加安全檢查。
一個孤獨的、不變的現實資源
GitOps 可以描述為:
一種適用於 Kubernetes 和其他雲原生系統的功能設計,提供了一組最佳程序,可以統一 Git 部署、管理和監控容器化集群和用途。
一條通往開發人員實踐經驗方向的路徑,可以準確地處理程序,其中端到端 CI/CD 管道和 Git 工作流用於每個操作和開發。
Git 是真實的唯一資源,因為這裡聲明了所需的配置。 在 Kubernetes 中運行有一個 GitOps 代理,它定期將 Kubernetes 中的真實點與保存在 Git 中的受追捧點進行比較。 任何合併到 Git 中受監控部門的新變體都會立即應用於 Kubernetes。 相反,任何用於 Kubernetes 的手冊變體都會機械地再次恢復到 Git 中聲明的理想狀態。 消除了配置漂移。
Git 通常被恰當地描述為一種真實的資源,因為它適用於 GitOps,這要歸功於其不可變的組成。 除其他外,它將有助於維持一個邊界——而不是與防火牆相反——將 CI 和 CD 之間的關注點分開。 通過這種方式,作為 CI 一部分的應用程序推進涉及的方式範圍——拉取請求、篩選、提交等。 — 在 Git 上繼續保持獨立。
對於構建拉取請求的開發人員,拉取請求在審查和允許時被合併,並在即將到來的協調中常規用於集群——這通常需要 15 分鐘。
默認情況下,該過程是雙向的——這意味著當未來的協調循環運行時(通常每 15 分鐘一次),直接對 Kubernetes 進行的修改會在 Git 上進行交互。 即便如此,當 DevOps 工作人員或者更糟糕的是,負面行為者入侵者將立即對集群進行更改時,這種情況遠不如最佳狀態。 這些直接到集群的變體沒有通過合併請求和批准進行適當的審查,因此違反了 GitOps 理論,即 Git 在漂移發生時充當事情真相的不可變供應。
作為減輕漂移發生的替代方法,如果對集群進行了未在 Git 中使用的更改,GitOps 檢查資源可以發送警報。 當這種情況發生時,由於審計跟踪,Git 上的軟件代碼可以交換針對集群設計的錯誤修改,通過其部署點中的控制器在運行時自然環境中指出。
相反,當沒有達到不變性時,就會出現漂移。 這可能會在網絡攻擊方或 DevOps 工作人員無意中更改集群配置以使其與 Git 上的不同時實現。 當這種情況發生時,不協調就會被標記出來——通過使用正確的 GitOps 設備——因此象徵著 GitOps 流程呈現的典型 DevSecOps。
適當的應用程序自動執行持續檢查系統,以確保 Git 存儲庫上配置的所需點與 Kubernetes 集群中的真實狀態相匹配。 一旦部署有效地專用於存儲庫的聲明條件,它還用於協調和總體部署。
審計管理
GitOps 提供的審計功能對於 DevSecOps 幫助也至關重要。 通過保留在 Git 存儲庫中作為事實的唯一來源,所有應用程序、代碼和配置都進行了版本控制,並保留了完整的審計路徑,這是任何受保護的自然環境的主要必要條件。 此審計跟踪通常也同樣提供給開發人員和操作人員,以供他們注意集群中正在運行的內容(大多數用戶僅限於瀏覽訪問集群配置)。
開發人員可能並不總是像功能和 DevSecOps 員工客戶那樣需要依賴審計跟踪,但他們可以利用這種能力來理解發生了哪些變化,以及對確實發生的存儲庫進行調整的驅動力是什麼. 簡而言之,對於開發人員 - 以及所有 DevOps 員工 - 一切都只是一個 Git 日誌。
Git 上的審計跟踪也可用,並且非常容易讓構建者在必要時出現。 這是因為該過程的完成遺產被捕獲在報告的 Git 程序中,構建者可以理解。
隨著審計跟踪的可用性,快速回滾對觸發困難的應用程序的調整也是可行的。 這在集群受到損害或配置錯誤時特別有用。 在這種情況下,作為擁有從頭開始重建集群的替代方法,審計跟踪包括回購中的追捧點。 然後部署具有審計跟踪所需點的集群配置和程序,並且重建過程是自動的。
“王國鑰匙”的數量

構建者通常依靠自動化服務器 Jenkins 來開發、檢查和幫助 CI/CD 用於 Kubernetes 環境的製造管道。 如果沒有 GitOps,開發人員在任何其他情況下都可以在直接部署代碼時立即訪問 Kubernetes 集群。 換句話說,建設者——無論他們是組織的組成部分還是遠程操作的承包商——都可以立即訪問輸出環境,並擁有“王國的鑰匙”,以便進行交談。 這很少是理想的安全環境。
在前面提到的情況下,它所選擇的只是讓不適當的用戶(或者更糟糕的是,入侵者)讓 KubeConfig 或 Kubectl 命令可訪問製造中的集群,以便他們可以從筆記本上運行。 如果攻擊者破壞了 CI 流程並建立了憑證,例如,他們也可以訪問 CI 系統可以訪問的任何集群。
GitOps 幫助避免用戶或攻擊者修改集群配置而不留下任何痕跡這一簡單事實對運營和安全團隊至關重要——此外還支持最大限度地減少開發人員的精神負擔。 例如,通過獲取管理,開發人員通常不需要直接訪問 Kubernetes 節點和/或 kubectl 命令行。 GitOps 幾乎可以協調構建者在 Git 中概述的任何內容,但不允許手動訪問 Kubernetes 集群或製造環境,除非構建者俱有獨特的訪問控制權限。
GitOps 的 DevSecOps 功能是一種阻止 CD 攻擊向量情況的方法,從而保護“王國的鑰匙”。 當 GitOps 操作員(例如開源 Flux 等)在 Kubernetes 內部運行並因此可以訪問集群時,獲取控制繼續在 Kubernetes 安全框架內。 消費者可訪問性是通過將特權分配給不同組和組成員的名稱空間來建立的。
作為 DevSecOps 和 GitOps 如何對不同的人非常有幫助的一個例子,美國國防部 (DoD),美國空軍的主要計算機軟件官員 Nicolas Chaillan,不久前描述了 DevSecOps 和 GitOps — 與 Flux 一起 — 在其支持美國安全部隊的整個範圍內的軟件程序進步中發揮著重要作用。
“安全和安保是不可協商的,但我們也希望開發商自己的公司能夠提高效率和速度,”Chaillan 說。
舉個例子,GitOps 是“我們在整個 DoD 中建立和推出 Platform Just one 的關鍵,”DoD 聲稱。 根據 DoD 的說法,System Just one 是“一系列允許的、強化的、符合雲原生計算基金會 (CNCF) 的 Kubernetes 發行版、作為代碼劇本的基礎設施和強化的容器”,並帶有內置的安全管道。
制衡
DevSecOps 程序與 GitOps 供應制衡相結合。 通過這種方式,它提供的可訪問性命令有助於防止開發人員(或入侵者)訪問供應代碼存儲庫,以便在 CI 期間引入後門、零日漏洞或另一種形式的漏洞。程序。 這僅僅是因為所有的拉取請求都經過了同行評審。
借助 DevSecOps 支持 CI 系統,代碼之前使用的製衡機制專用於 Git 並部署在集群中。 開發人員通常會將修改作為拉取請求發布,這是經過同行評審的。 經過審查和授權後,將代碼合併到 Git 上,然後相應地更改所需狀態的 YAML 文件。
期望的條件將立即應用於 Kubernetes 集群。 如前所述,具有 DevSecOps 功能的正確 GitOps 設備會不斷跟踪目標過程中的精確條件,以確保它與 Git 上聲明的內容相一致。 如果有任何差異,則會發出警報,因此可以採取糾正措施。
DevSecOps 固執己見
大量 GitOps 工具協助 DevSecOps。 例如,開源 Flux 有助於維持 Git 存儲庫作為真實事實的一個不可變來源。 Flux 的能力還擴展到可訪問性規範,以在 CI/CD 期間對專用和部署的代碼進行檢查和平衡。
對於更加自以為是的 Flux 體驗,開源 Weave GitOps Main 簡化了在許多集群中啟用自動化 CI/CD 的第一種方法。 使用 Weave GitOps Main 放置 GitOps 和 DevSecOps 方法的系統涉及控制台上的幾個簡單命令。
Weave GitOps 公司已成為最初的 GitOps 平台,可自動執行穩定的應用程序交付和 Kubernetes 的自動操作管理 在混合雲、多雲和邊緣架構中的任何規模。
所有一些工具都有助於自動化監控,以確保集群配置通常與 Git 上的配置相匹配,從而幫助避免漂移。 完整且可用的審計跟踪允許在必要的基礎上生成應用程序和集群配置回滾,而無需從頭開始重建集群。
總之,GitOps 標誌著 DevOps 在分散的 Kubernetes 環境中的發展,儘管 DevSecOps 已經成為在應用程序生命週期中保持 GitOps 的 CI/CD 穩定性的重要方式。
Steve Waterworth 是Weaveworks的技術營銷主管。