2017-09-15 67 views
1

我得到了一個設置,開發人員將代碼推送到一個存儲庫,然後觸發一個構建在我們的CI服務器上。部署目前也由CI服務器完成。爲了部署到生產環境,jenkins需要在prod服務器上以root用戶身份登錄。如何在buildserver上保護憑據?

這意味着我必須將憑證(例如用戶名/密碼或密鑰)放到CI系統上。這導致了每個有權訪問存儲庫的開發人員都能夠通過將代碼注入構建過程來讀取這些祕密憑據的問題。

如何確保對回購的訪問不會給予我的CI服務器上的憑據潛在訪問權限?

+0

'jenkins需要以root用戶身份登錄到prod-servers'爲什麼不將您的prod服務器作爲Jenkins奴隸? – Tuan

+0

據我所見,這不會改變一件事。構建代碼(和Buildplan)可能不安全,並且能夠收集祕密信息。 – gorootde

回答

0

您可以使用Jenkins「Credentials」對象(「Credentials」插件),僅此。從Jenkins側面菜單導航到「Credentials」並創建一個新的Credentials項目。這些項目保存在Jenkins中,而不是保存在SCM存儲庫中。

然後,您可以使用Jenkins管線或自由式作業中的憑證。 安裝Jenkins權限,以便開發人員無權訪問證書。 Jenkins通過用星號(***)替換它們來防止這些憑據泄漏到控制檯輸出。

如果你使用的是jenkins文件,你實際上完全控制了開發者 - 這是一個不好的安全實踐!爲了分離開發人員和DevOps角色,我將創建一個單獨的Jenkins作業,僅將工件部署到生產環境中。不要將部署管道存儲在jenkinsfile中(或將其存儲在具有不同權限的新「DevOps」存儲庫中)。配置構建作業以在成功時觸發部署作業。使用作用域/權限保護對憑證和部署作業的訪問

+0

該解決方案不會妨礙開發人員獲取憑證,因爲Jenkinsfile位於SCM中。開發者可以例如將憑據轉儲到文件中並將其作爲工件下載(這不會被星號所覆蓋) – gorootde

+0

如果您使用的是jenkins文件,則實際上是對開發人員給予完全控制權,這是一種糟糕的安全措施。爲了分離開發人員和DevOps角色,我將創建一個單獨的Jenkins作業,僅將工件部署到生產環境中。不要將部署管道存儲在jenkinsfile中(或將其存儲在具有不同權限的新「DevOps」存儲庫中)。配置構建作業以在成功時觸發部署作業。使用作用域/權限保護對憑據和部署作業的訪問。 –