在Docker內部,咱們花了不少時間討論一個話題:如何將運行時安全和隔離做爲容器架構的一部分?然而這只是軟件流水線的一部分。docker
咱們須要的不是一次性的標籤或設置,而是須要將安全放到軟件生命週期的每一個階段。數據庫
因爲軟件供應鏈上的人、代碼和基礎設施一直在改變,交互也越來多,組織(公司)必須將安全歸入供應鏈的核心部分。安全
考慮一個實際存在的產品:如電話,僅僅考慮到最終產品的安全性是不夠的。除了決定使用什麼樣的防盜包裝,你可能也想知道材料的來源,以及他們是如何組裝,包裝,運輸。由於,重要的是咱們還要確保手機不被改造或運輸途中被盜。網絡
軟件供應鏈幾乎跟實際產品的供應鏈是相同的。你必須可以識別和信任原材料(代碼、依賴、打包),把它們組裝在一塊兒後,將它們從海上、陸上或空中(網絡)運輸到一個存儲地(存儲庫),以便將項目(應用)出售(部署)給終端用戶。架構
確保軟件供應鏈也十分類似。你須要:工具
● 肯定流水線中的全部東西,從人,代碼,依賴關係,到基礎設施測試
● 確保一個一致和優質的構建過程加密
● 在存儲和運輸中保護產品spa
● 對材料清單的交付保證並驗證最終產品
在這篇文章中,咱們將詮釋Docker的安全特性如何爲軟件供應鏈提供持續的安全。翻譯
整個流水線構建在身份驗證和訪問控制之上 。從根本上說,你須要知道誰能夠訪問什麼資產,可使用哪些操做。
Docker 架構中的身份認證理念很清晰,它隱藏在軟件供應鏈策略中:加密密鑰容許發佈者對鏡像進行簽名,以保證其來源的真實性。
肯定一致的構建容許你建立一個可重複的過程,並控制你的應用程序依賴和組件,以便使它更容易測試出缺陷和漏洞。當你對你的組件有一個清晰認識的時候,它變得更容易識別異常的組件。
要得到一致的構建,你必須確保你添加了優質的組件:
● 評價依賴的質量,確保它是最新/兼容的版本,並用你的軟件進行測試
● 驗證組件來自於你指望的來源,而且在傳輸過程當中沒有損壞或改變
● 肯定依賴後不要輕易改變,確保後續重建是一致的,所以若是一個缺陷是由代碼或依賴的變化引發的,很容易被發現
● 使用Docker Content Trust ,從可信的、有標識的基礎鏡像中構建你的鏡像
應用程序簽名是從構建進行有效「密封」的一步。經過鏡像簽名,能夠確保任何在接收端(docker pull)的簽名驗證與鏡像發佈者創建一個安全鏈。
這種關係保證了鏡像在傳輸過程當中不被改變、添加、或刪除。此外,簽名代表發佈者「贊同」你拉取的該鏡像是沒問題的 。
在構建機器和運行環境上啓用 Docker Content Trust後,一個策略就會生效:只有簽名鏡像才能夠被拉取並運行在那些 Docker 主機上。
在組織中,簽名的鏡像向其餘人傳遞一個信號:發佈者(構建者)聲明鏡像是沒問題的。
CI系統和開發者都須要確認一件事情:構建工具與依賴一塊兒工做,操做你的應用程序時,不管在成功仍是失敗,都有預期的行爲。
但他們審查過依賴的漏洞嗎?審查過子依賴或捆綁系統庫的依賴嗎?他們知道依賴的許可證嗎?這種審查很難經過常規的方式來完成,由於提供錯誤修正和功能上是一個巨大的開銷。
Docker 安全掃描有助於鏡像的自動化掃描。由於這是發生在鏡像被推送到registry以前,在容器被部署進生產環境以前的最後一次檢查。
該功能目前在Docker Cloud 中可用,而且很快延伸到Docker Datacenter。安全掃描建立了一個清單,清單中包括鏡像每一層的打包信息和版本信息。
這份材料清單被用於連續監測各類 CVE 數據庫。確保該掃描不止一次地發生,並在爆出新漏洞時,及時通知使用鏡像的系統管理員或應用程序開發者。
安全保證最強大的一點來自Docker Content Trust 簽名,它容許多個簽名者參與容器的簽名過程。要了解這一點,想象一個簡單的 CI 過程,經過如下步驟移動容器鏡像:
自動化CI
Docker 安全掃描
推送到 staging環境
推送到 production 環境
這裏有四個階段,每一個階段完成後,均可以添加一個簽名,從而CI/CD 過程的每個階段都有驗證。
一、鏡像經過CI 嗎?添加簽名!
二、Docker Security Scanning 肯定鏡像沒有漏洞?添加簽名!
三、staging階段中構建成功?添加簽名!
四、驗證全部3個簽名的鏡像並將其部署到生產中
如今構建被部署到生產集羣以前,它能夠加密驗證,CI / CD過程各階段已經簽定了一個鏡像。
在軟件生命週期的每一個環節,Docker 平臺都容許企業將安全歸入其中。從與用戶創建信任,到基礎設施和代碼,docker模型給了開發者以及 IT團隊足夠的自由和控制力。
從構建安全的基礎鏡像,到掃描每個鏡像驗證簽名,每一個特性都容許IT人員將信任植入到應用中。
當應用沿着正常的生命週期不斷前行,安全信息也可以動態維護和更新,並在部署到生產環境以前經過風控檢查。