穀歌的依賴管理最佳實踐

解道jdon 2021-08-15 12:16:19 阅读数:697

本文一共[544]字,预计阅读时长:1分钟~
管理 最佳

本文介紹了一組用於管理應用程序依賴項的最佳實踐,包括漏洞監控、工件驗證以及减少依賴項足迹並使其可重現的步驟。

這些實踐中的每一個的具體情况可能會因您的語言生態系統和您使用的工具的具體情况而异,但一般原則適用。

 

版本鎖定

簡而言之,版本鎖定意味著將應用程序依賴項的版本限制為非常特定的版本——理想情况下是單個版本。

為您的依賴項固定版本具有及時凍結您的應用程序的副作用。雖然這是可重複性的良好實踐,但它的缺點是阻止您在依賴項發布新版本時接收更新,無論是用於安全修複、錯誤修複還是一般改進。

這可以通過將自動依賴管理工具應用於您的源代碼控制存儲庫來緩解。這些工具會監控您對新版本的依賴關系,並根據需要更新您的需求文件以將您昇級到這些新版本,通常包括更改日志信息或其他詳細信息。

 

簽名和哈希驗證

為了確保包的給定版本的給定工件實際上是您打算安裝的,有許多方法允許您以不同的安全級別驗證工件的真實性。

哈希驗證允許您將給定工件的哈希與工件存儲庫提供的已知哈希進行比較。啟用哈希驗證可確保您的依賴項不會被不同的文件偷偷替換,無論是通過中間人攻擊還是破壞工件存儲庫。這需要相信您在驗證時(或在第一次檢索時)從工件存儲庫收到的哈希值也不會受到損害。

簽名驗證為驗證過程增加了額外的安全性。工件可以由工件存儲庫、軟件維護者或兩者簽名。諸如sigstore 之類的新服務旨在使維護者能够輕松地簽署軟件工件,並使消費者能够輕松地驗證這些簽名。

 

鎖定文件和編譯的依賴項

鎖定文件是完全解析的需求文件,准確指定應為應用程序安裝哪個版本的依賴項。通常由安裝工具自動生成,鎖定文件將版本鎖定和簽名或哈希驗證與應用程序的完整依賴樹相結合。

完整的依賴樹是通過“編譯”或完全解析將為您的頂級依賴項安裝的所有依賴項生成的。完整的依賴樹意味著您的應用程序的所有依賴項,包括所有子依賴項、它們的依賴項以及向下堆棧,都包含在您的鎖定文件中。這也意味著只能安裝這些依賴項,因此可以認為構建在多次安裝之間更具可重複性和一致性。 

 

混合私有和公共依賴項

現代雲原生應用程序通常既依賴於開源的第三方代碼,也依賴於閉源的內部庫。如果您需要在多個應用程序之間共享您的業務邏輯,並且當您想要重用相同的工具來安裝外部和內部庫時,後者可能特別有用,使用像Artifact Registry這樣的私有存儲庫可以很容易。

但是,在混合私有和公共依賴項時,請注意“依賴項混淆”攻擊:通過將與內部項目同名的項目發布到開源存儲庫,攻擊者可能會利用錯誤配置的安裝程序偷偷安裝他們的內部包上的惡意庫。

為了避免“依賴混淆”攻擊,你可以采取一些步驟:

  • 通過將依賴項包含在鎖定文件中來驗證依賴項的簽名或哈希值
  • 將第三方依賴和內部依賴的安裝分為兩個不同的步驟
  • 手動或使用直通代理將您需要的第三方依賴項顯式鏡像到您的私有存儲庫中

 

删除未使用的依賴項

重構發生了:有時您一天需要的依賴項在第二天就不再需要了。在不再使用依賴項時繼續將它們與您的應用程序一起安裝會增加您的依賴項足迹以及您被這些依賴項中的漏洞危害的可能性。

通常的做法是讓您的應用程序在本地工作,將您在開發過程中安裝的每個依賴項複制到您的應用程序的需求文件中,然後部署它。它保證可以工作,但也可能會引入生產中不需要的依賴項。

通常,在向應用程序添加新依賴項時要小心:每個依賴項都有可能引入更多您無法完全控制的代碼。使用工具審核您的需求文件以確定您的依賴項是否正在實際使用或導入,允許您將其集成到您的常規 linting 和測試管道中。

 

漏洞掃描

如果在您的依賴項之一中發現漏洞,您將如何收到通知?很有可能,您沒有主動監控您所依賴的第三方軟件的所有漏洞數據庫,而且很可能您根本無法可靠地審核您所依賴的第三方軟件。

漏洞掃描允許您自動且一致地評估您的依賴項是否將漏洞引入您的應用程序。漏洞掃描工具使用鎖定文件來准確確定您所依賴的工件,並在新漏洞出現時通知您,有時甚至提供建議的昇級路徑。

Container Analysis 之類的工具可以為容器映像以及Java 包掃描等語言工件提供廣泛的漏洞掃描。啟用後,此功能可識別容器映像中的包漏洞。圖像在上傳到 Artifact Registry 時會被掃描,並在推送圖像後長達 30 天內持續監控數據以發現新漏洞。

 

版权声明:本文为[解道jdon]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210815121613072s.html