Jenkins的安全管理對於保障自動化流程至關重要。本文將詳細介紹Jenkins的各種安全設定,包括如何組態身份驗證和授權、使用內建使用者資料函式庫、整合LDAP、管理API Token、設定代理控制器安全,以及如何正確組態SSH伺服器。這些設定可以有效地控制使用者存取許可權,防止未經授權的操作,確保Jenkins系統的穩定執行和資料安全。此外,我們還會討論一些常見的安全模式和最佳實務,例如Legacy Mode、Logged in user can do anything、Allow anonymous read access等,以及如何設定TCP連線埠和啟用CSRF保護,以提升Jenkins的整體安全性。
管理Jenkins的安全設定
在前一章中,您學習瞭如何設定Maven和JDK,並將其整合到Jenkins中。本章將討論不同的安全相關設定,幫助您組態Jenkins的身份驗證和授權功能。
什麼是身份驗證和授權?
簡單來說,身份驗證是指確保只有有效使用者才能登入Jenkins系統,而無效使用者不能登入。授權則定義了不同型別的使用者可以存取的內容和功能,例如管理員和非管理員。
組態Jenkins的全域性安全設定
在本文中,您將學習如何組態Jenkins的全域性安全設定。登入Jenkins後,您將看到Jenkins的儀錶板。然後,按照以下步驟前往組態全域性安全設定頁面:
- 點選Jenkins儀錶板上的「安全」部分中的「組態全域性安全設定」連結,以開啟組態全域性安全設定頁面,如圖7-1所示。
- 圖7-1顯示了系統組態頁面。
- 圖7-2顯示了組態全域性安全設定頁面。
讓我們逐一檢視組態全域性安全設定頁面的每個設定:
- 停用記住我:此選項將被取消選擇。當您開啟登入頁面時,它將顯示「保持我登入」的選項。如果您保持此選項被選擇,Jenkins將不會在您離開而未登出時要求您再次登入。
- 委託給Servlet容器:Jenkins是一個執行在Java Servlet容器(如Jetty或Tomcat)中的自動化伺服器。如果您想讓Jenkins使用容器中組態的使用者,則選擇此選項。
- Jenkins自己的使用者資料函式庫:Jenkins允許您建立使用者並維護它們在自己的資料函式庫中。因此,如果您不想依賴第三方實體來提供允許使用Jenkins的使用者列表,您可以建立使用者並要求Jenkins使用它。
要建立新的使用者,請按照以下步驟:
- 前往儀錶板。
- 選擇「管理Jenkins」>「管理使用者」。
- 點選「建立使用者」連結。
- 在建立使用者頁面上輸入所有詳細資訊(如使用者名稱、密碼、確認密碼、全名和電子郵件地址),然後點選「建立使用者」按鈕。現在此使用者可以用於登入Jenkins。
flowchart TD
A[開始] --> B[登入Jenkins]
B --> C[前往組態全域性安全設定頁面]
C --> D[檢視組態全域性安全設定]
D --> E[建立新的使用者]
E --> F[完成]
圖表翻譯:
此圖表顯示了組態Jenkins全域性安全設定的流程。首先,登入Jenkins,然後前往組態全域性安全設定頁面。在這裡,您可以檢視和組態不同的安全設定,包括建立新的使用者。完成這些步驟後,您就可以成功組態Jenkins的全域性安全設定。
內容解密:
在本文中,我們學習瞭如何組態Jenkins的全域性安全設定,包括建立新的使用者和組態不同的安全選項。這些設定有助於確保只有授權的使用者才能存取和使用Jenkins。透過這些步驟,您可以提高Jenkins的安全性和可靠性。
管理Jenkins的安全性
使用Jenkins內建的使用者資料函式庫
Jenkins提供了一個內建的使用者資料函式庫,讓您可以管理使用者帳戶。要啟用此功能,請前往「Configure Global Security」頁面,並在「Jenkins Own User Database」部分勾選「Allow users to sign up」的選項。這將允許使用者在Jenkins歡迎頁面上建立帳戶。
然而,建議不要保持此選項的啟用,因為任何人都可以建立使用者帳戶並成為驗證使用者。
不使用任何驗證
如果您在「Configure Global Security」頁面上選擇「None」作為安全領域,Jenkins將不會要求驗證,所有使用者都將被視為匿名使用者。
但是,如果您設定此選項並嘗試存取Jenkins,您將在Jenkins伺服器日誌中看到以下錯誤:
anonymous is missing the Overall/Read permission
要允許匿名使用者存取,您需要修改 $Jenkins_Home\config.xml 檔案中的 <denyAnonymousReadAccess> 標籤的值從 true 改為 false。然後重新啟動伺服器並存取Jenkins URL,您將不會被要求驗證,並直接進入Jenkins儀錶板。但是,您的存取許可權將僅限於唯讀。
允許任何人執行任何操作
在「Configure Global Security」頁面上,您可以選擇「Anyone can do anything」作為授權選項。如果選擇此選項,包括匿名使用者在內的所有人都將獲得Jenkins的完全控制權。
您可以在公司內網環境中使用此設定,因為這是一個可信任的環境。這樣,使用者就不需要登入即可存取Jenkins。
內容解密:
以下程式碼示範如何修改Jenkins的安全設定:
import jenkins.model.Jenkins
// 取得Jenkins例項
Jenkins jenkins = Jenkins.getInstance()
// 修改安全設定
jenkins.setSecurityRealm(jenkins.getSecurityRealm())
// 儲存變更
jenkins.save()
圖表翻譯:
flowchart TD
A[啟用內建使用者資料函式庫] --> B[允許使用者註冊]
B --> C[修改安全設定]
C --> D[儲存變更]
D --> E[重新啟動伺服器]
E --> F[存取Jenkins]
圖表示範了啟用內建使用者資料函式庫、允許使用者註冊、修改安全設定、儲存變更、重新啟動伺服器和存取Jenkins的流程。
Jenkins 安全管理
Jenkins 的安全管理是一個非常重要的方面,需要妥善設定以確保系統的安全性。以下是 Jenkins 安全管理的相關設定和介紹。
安全模式
Jenkins 提供了幾種安全模式,包括:
- Legacy Mode:在此模式下,如果使用者具有 Admin 角色,則會被授予系統的完全控制權。其他使用者(不具有 Admin 角色),包括匿名使用者,將只有唯讀存取權。
- Logged in user can do anything:如果選擇此選項,則每個使用者必須登入 Jenkins。登入使用者將具有完全控制權,而匿名使用者將只有唯讀存取權。
- Allow anonymous read access:此選項位於「Logged In Users Can Do Anything」選項下。如果勾選此選項,則未登入的使用者(匿名使用者)將具有唯讀存取權。
TCP 連線埠設定
在「Configure Global Security」頁面中,有一個「TCP 連線埠設定」選項,用於設定 Jenkins 與代理機器之間的通訊連線埠。有兩種選項:
- Random:Jenkins 會隨機選擇一個未被使用的連線埠。
- Fixed:需要手動設定一個可用的連線埠。
通常,使用固定連線埠較為方便,因為可以在防火牆設定中加入此連線埠,以允許入站通訊請求。
CSRF 保護
CSRF(Cross-Site Request Forgery)保護是一種安全機制,用於防止惡意網站傳送假的請求至 Jenkins。Jenkins 會建立一個根據使用者資訊的 token,並將其傳送給使用者。如果任何表單提交或動作導致系統修改,則必須提供此 token。
此 token 包含使用者特定的資訊,例如:
- 使用者名稱
- Web 會話 ID
- 使用者機器的 IP 地址
- Jenkins 例項的 salt 值
一旦 token 建立完成,使用者就可以使用它來驗證身份。提交使用其他使用者的 token 將被拒絕。
內容解密:
上述內容介紹了 Jenkins 的安全管理設定,包括安全模式、TCP 連線埠設定和 CSRF 保護。這些設定非常重要,需要妥善設定以確保系統的安全性。
flowchart TD
A[開始] --> B[設定安全模式]
B --> C[設定 TCP 連線埠]
C --> D[啟用 CSRF 保護]
D --> E[驗證使用者身份]
圖表翻譯:
此圖表展示了 Jenkins 安全管理設定的流程。首先,需要設定安全模式;然後,需要設定 TCP 連線埠;接著,需要啟用 CSRF 保護;最後,需要驗證使用者身份。這個流程可以幫助確保 Jenkins 系統的安全性。
管理Jenkins的安全
在使用Jenkins時,安全性是一個非常重要的方面。Jenkins提供了多種方式來管理安全,包括API Token、代理控制器安全、SSH伺服器等。
API Token
API Token是用於組態Jenkins的存取許可權的。當您透過REST API、CLI命令或其他應用程式存取Jenkins時,API Token會被用於驗證使用者身份。Jenkins提供了兩種方式來建立API Token:一種是為每個新使用者建立一個Legacy API Token,另一種是允許使用者手動建立自己的Legacy API Token。但是,這兩種方式在Jenkins 2.129及以上版本中已經被棄用。現在,Jenkins建議使用者建立自己的新API Token。
代理控制器安全
代理控制器安全是Jenkins的一個重要方面。代理控制器負責管理Jenkins的代理節點,包括建立、刪除和管理代理節點等。代理控制器安全涉及到如何保護代理節點免受未經授權的存取和操作。在第17章中,我們將詳細討論代理控制器安全。
SSH伺服器
SSH伺服器是Jenkins的一個內建功能,允許使用者透過SSH客戶端存取Jenkins伺服器。SSH伺服器提供了一種安全的方式來存取Jenkins伺服器,包括建立批次檔案和Shell指令碼等。當您選擇Random選項時,Jenkins會隨機選擇一個可用的埠號碼來監聽來自SSH客戶端的連線請求。如果您選擇Fixed選項,您需要指定一個可用的埠號碼,Jenkins會使用該埠號碼來監聽來自SSH客戶端的連線請求。
內容解密:
# 建立一個新的API Token
curl -X POST \
http://localhost:8080/jenkins/api/json \
-H 'Content-Type: application/json' \
-d '{"username": "your_username", "password": "your_password"}'
# 建立一個新的代理節點
curl -X POST \
http://localhost:8080/jenkins/api/json \
-H 'Content-Type: application/json' \
-d '{"name": "your_node_name", "description": "your_node_description"}'
# 啟動SSH伺服器
ssh -p 8080 your_jenkins_server
圖表翻譯:
graph LR
A[使用者] -->|請求API Token|> B[Jenkins]
B -->|傳回API Token|> A
A -->|請求建立代理節點|> B
B -->|傳回代理節點資訊|> A
A -->|連線SSH伺服器|> B
B -->|傳回SSH伺服器資訊|> A
在上面的圖表中,我們展示了使用者如何請求API Token、建立代理節點和連線SSH伺服器。Jenkins會傳回相應的資訊給使用者。這個圖表幫助我們瞭解Jenkins的安全管理流程。
Jenkins 安全性管理:LDAP 整合
在 Jenkins 中,安全性管理是一個非常重要的議題。其中,LDAP(Lightweight Directory Access Protocol)整合是一個常見的做法,用於提供集中式的身份驗證和授權管理。以下,我們將探討如何在 Jenkins 中組態 LDAP 整合。
LDAP 的作用
LDAP 是一個軟體協定,允許使用者存取組織、個人和其他資源(如檔案)的資料。它常被用於提供集中式的身份驗證,儲存使用者名稱和密碼。透過 LDAP,我們可以將 Jenkins 與現有的身份驗證系統整合,實作單一登入(SSO)。
為什麼需要組態 LDAP 與 Jenkins
在大多陣列織中,讀寫存取目錄/檔案或存取特定伺服器的許可權只授予少數域使用者。例如,我們可以考慮一個實際場景:我是公司 ABC 的員工,我的公司域使用者名稱是 Pranodayd。這個使用者有權存取一個建置伺服器。但是,如果 Jenkins 安裝在一個名為 adminuser 的使用者的機器上,這個使用者並沒有存取建置伺服器的許可權。在這種情況下,如果我們想要佈署一個應用程式到建置伺服器上,Jenkins 工作(Jenkins 任務)就會失敗。
如何組態 LDAP 與 Jenkins
要組態 LDAP 與 Jenkins,我們需要先安裝 LDAP 外掛程式。以下是步驟:
- 安裝 LDAP 外掛程式:進入 Jenkins Dashboard,選擇「Manage Jenkins」>「Manage Plugins」。然後,切換到「Available」標籤,輸入「LDAP」在搜尋欄中。選擇 LDAP 外掛程式的核取方塊,然後點選「Install Without Restart」按鈕。
- 組態 LDAP:安裝完成後,傳回 Jenkins Dashboard。選擇「Manage Jenkins」>「Configure Global Security」。在「Security Realm」部分,你會看到 LDAP 選項。選擇 LDAP 電臺按鈕,如圖 7-7 所示。
- 完成 LDAP 設定:請聯絡你的 IT 部門,以完成 LDAP 設定。
從系統安全形度分析 Jenkins 的設定,本章節涵蓋了多種安全策略,從最基本的匿名使用者存取控制到整合 LDAP 等集中式身份驗證系統,展現了兼顧便利性與安全性的多層次防護策略。分析不同安全設定的適用場景,例如,在公司內網環境中,「任何人皆可存取」的設定能簡化操作流程;而對於安全性要求較高的環境,整合 LDAP 則能有效控管使用者許可權。然而,部分設定存在潛在風險,例如,允許使用者自行註冊可能導致未授權存取。此外,停用 CSRF 保護雖然能提升與舊版系統的相容性,但也可能增加系統遭受跨站請求偽造攻擊的風險。
展望未來,Jenkins 的安全機制將持續演進,例如,更精細的許可權控管、更強大的 API Token 管理,以及與更多身份驗證系統的整合。預計將出現更多根據角色的存取控制(RBAC)的應用,允許更靈活地定義和管理使用者許可權。此外,零信任安全模型的興起也將影響 Jenkins 的安全策略,更強調持續驗證和最小許可權原則。
對於重視安全性的企業,建議採用多層次防護策略,例如結合 LDAP 身份驗證、API Token 控管,以及啟用 CSRF 保護等措施。同時,持續關注 Jenkins 社群的最新安全建議和最佳實務,才能有效降低安全風險,確保 Jenkins 系統的穩定執行。玄貓認為,妥善組態 Jenkins 安全設定並非一蹴可幾,需要根據實際需求和安全風險評估,選擇最合適的策略,並定期檢視和更新設定,才能在便利性和安全性之間取得最佳平衡。