YAML 錨點和別名的工作原理 CI/CD Pipelines
YAML錨點 別名是維護資料庫的強大工具。 CI/CD pipeline 定義遵循 DRY(不要重複自己)。錨點定義可重複使用的程式碼區塊(&錨),以及別名(*別名在所有引用它們的地方複製它們的內容。這適用於 GitHub Actions、GitLab CI 和 CircleCI 等常用平台。
這是一個簡單的例子:
⚠️ 此範例不安全,請勿在生產環境中使用
雖然像這樣的 YAML 模式錨點可以提高可維護性,但它們也可能抽象化重要的上下文。 CI/CD其中配置即程式碼,YAML 錨點和別名可能會悄無聲息地傳播不安全的預設值,而開發人員卻意識不到繼承了什麼。
錨點 YAML 結構中隱藏的安全風險
他們的問題在於 問題不在於文法,而是如何使用(或濫用)。諸如權限過寬、跳過驗證或硬編碼金鑰等安全設定可能會嵌入到錨點中,並在各處重複使用。
示例:
此錨點(不安全包含不安全 curl | bash 這種模式會被注入到多個作業中。即使只有一個作業本應採用不同的驗證或金鑰處理方式,現在也已被攻破。錨點的 YAML 結構 這樣在審核過程中就很容易忽略這個錯誤。
YAML錨點設定錯誤如何導致供應鏈風險
單一配置錯誤 YAML錨點 可以將不安全的邏輯級聯到多個層面 pipeline當別名的使用缺乏明確的文檔或可見性時,很容易在無意中繼承危險的行為。
考慮這個場景:
- A .ci-templates 倉庫定義了共享錨點 建立, 部署以及 test.
- 跨多個團隊的專案使用 <<: *建置階段 未經審查其內容。
- 後來有人修改了錨點,使其跳過依賴項的簽名驗證。
現在每一種消費 pipeline 繼承了這種不安全的邏輯。這是一個經典的例子。 軟體供應鏈風險:不安全的模板透過靜默複製 YAML 錨點與別名.
這類漏洞並非總是能在傳統的程式碼審查中被發現。 YAML 錨點濫用隱藏在別名背後,讓漏洞難以被發現。 CI/CD 邏輯不透明。
在 DevSecOps 中保護錨點 YAML Pipelines
安全使用最佳實踐 錨點和別名 包括:
- 盡量減少錨點避免將過多的職責塞進一個核心元件中。將邏輯拆分成多個單獨的、命名清晰的核心元件。
- 使用明確的職位定義 在安全邊界至關重要的領域,尤其是在開發階段和生產階段之間。
- 避免在不同環境中重複使用錨點 除非必要,否則請為開發環境、測試環境和生產環境分別定義錨點。
- 掃描模板和繼承鏈 在集中式 CI/CD 配置倉庫。
永遠不要嵌入秘密訊息 將其錨定。務必確保安全取回。
結語
YAML 錨點和別名是提升效率的強大工具,但如果管理不善,它們會直接構成供應鏈風險。它們可能會悄無聲息地傳播不安全的預設設置,削弱階段隔離,並模糊關鍵邏輯。 CI/CD pipelines.
以確保 pipeline基於 YAML 錨點結構構建,強制執行可見性,限制錨點重複使用,並進行處理 CI/CD 配置資訊應與應用程式程式碼一樣受到嚴格審查。濫用錨點不僅僅是樣式問題,它們也是一個攻擊面。 類似的工具 Xygeni 可以偵測誤用的錨點,阻止不安全的模式,並使團隊能夠全面了解繼承的錨點。 CI/CD 在不安全程式碼投入生產環境之前,先進行邏輯檢查。





