Jenkins安全之安全矩陣和項目矩陣
Jenkins默認安全權限:登錄用戶可以做任何事情
如圖:Dashboard"系統管理"------>"全局安全配置"
即默認是登錄用戶(所有用戶)可以做任何事,即默認擁有所有權限。
若不修改默認配置,就無法做到:控制用戶對某些項目授予只讀權限,有風險。
密碼復雜度一定要高。
Jenkins的安全矩陣設置
作用:可針對用戶配置只讀權限
缺點:只針對用戶,無法做到:控制某個項目只讀
設置安全矩陣:"系統管理"------>"全局安全配置",如圖,修改為安全矩陣,然后點擊"Add user or group",對Admin和gk用戶做不同的授權策略,Admin擁有所有權限,gk用戶只有read權限,和任務的read權限。設置后點擊保存。
此時查看用戶界面
Admin用戶的界面:
gk普通用戶的界面
同時,gk用戶只有只讀權限,不能構建。
但是該安全矩陣,點擊任務read的話,默認是所有項目都可read。這是一個缺點,由此引出項目矩陣授權。
Jenkins的項目矩陣授權策略
作用:安全權限可細化到每個項目
關於項目矩陣授權策略的描述:
這個授權模型擴展自"安全矩陣",允許把下面的ACL(訪問控制列表)矩陣附加到每個項目定義中(在Job配置頁面). 這允許你宣布類似這樣的聲明"約翰能夠訪問A,B和C,但是不能訪問D." 查看"安全矩陣"的幫助文檔來了解安全矩陣. ACL配置是追加的,就是說下面的訪問控制會追加到所有的項目配置中。
第一步:在"系統管理"------>"全局安全配置"中,選擇項目矩陣授權策略。
添加Admin用戶和gk用戶,給與Admin所有權限,給與gk用戶Read權限。然后保存。
此時的Admin用戶界面依舊如上,但是gk用戶的界面此刻已經看不到任何項目。
第二步,使用Admin用戶在項目中單獨配置;點擊項目,進入后選擇"配置",然后在"General欄"選擇"啟用項目安全":
添加gk用戶,並授予其所有權限。然后點擊保存,那么gk用戶就擁有該項目的所有權限,如圖:
然后切換用戶,使用gk用戶登錄后的界面:有個gk_testShell項目,
點擊該項目進入后,擁有該項目的所有權限,如圖
由上可知缺點:在管理方面,不好管理。
上面只是配置了一個項目,若有很多項目,那么就得每個項目去配置,太麻煩。不能針對某一類項目統一配置。即每搞一個項目就要配置一個,不能批量管理。
優化:Jenkins安全之基於角色的權限管理
Jenkins安全之基於角色的權限管理
基於角色的管理
①權限控制可以細化到項目
②而且能批量設置項目權限
管理角色前操作
一、基於角色的權限管理需要安裝插件:Role-based
安裝:Jenkins網頁的"系統管理"------》"插件管理"-----》"可選插件"
在下面尋找"Role-based Authorization Strategy"插件,如圖
然后點擊安裝。之后安裝界面如圖,然后點擊返回首頁
划"√"后,頁面會跳轉到重啟界面
過一會后,會進入重新登錄界面,然后輸入Admin用戶和密碼,進入。
二、啟動Jenkins的角色管理
"系統管理"----》"全局安全配置"
選擇該策略后,默認權限:admin擁有所有權限,其它用戶無權限。
"系統管理"------>安全"Manage and Assign Roles",如圖
在上圖授權中,Admin用戶默認是擁有所有權限的。
而在下圖中,開啟該插件功能后,在未進行任何配置的情況下,使用gk用戶登錄:如圖此時是沒有任何權限的。Admin還是默認擁有所有權限。
然后開始進行角色配置
關於Manage Roles和Manage Roles的簡單描述:
Manage Roles:管理角色----》類似群組設置,在里面創建管理的用戶群,和項目群,並對其設置權限。
Manage Roles:分配角色----》類似用戶、項目設置,即在里面添加用戶/項目,然后對用戶/項目選擇已創建的群組。都應用保存后,那么該用戶,就擁有個群組中的用戶群組權限,和項目群組中的對應的項目權限。
①基於角色的權限管理 "Manage Roles"(群組設置)
Global roles添加一個read組,即下圖中的Global roles 全局角色,可以理解為群組,即admin群組,read群組只給與read只讀權限。
項目角色添加:role:test,Pattern:gk.*
即設置Role角色可以包含的項目。
關於pattern:該模式用於匹配項目名稱(作業、節點、從屬項等)。這意味着您分配給此角色的權限將僅對名稱與此模式匹配的項有效。即會匹配到:
然后給項目授予權限:
此時,有兩個Item Roles,即test和GK_shell。
②給用戶分配全局角色、項目角色(角色/用戶設置)
進來如圖,其中的read即為Manage roles中的Global Roles設置的群組。
如圖,將User用戶gk,添加到read群組中,而read群組的權限為read。應用后刷新gk用戶登錄頁面,如圖,只有讀權限,顯示不了項目權限,然后再接着配置下面的Item roles。
配置Item Roles,如圖
然后點擊應用,再次刷新gk用戶界面,則可看到項目
然后點擊該gk_remote項目,進入后可看到擁有該項目的讀寫權限。
總結:
Manage Roles:管理角色----》類似群組設置,在里面創建管理的用戶群,和項目群,並對其設置權限。
Assign Roles:分配角色----》類似用戶、項目設置,即在里面添加用戶/項目,然后對用戶/項目選擇已創建的群組。都應用保存后,那么該用戶,就擁有個群組中的用戶群組權限,和項目群組中的對應的項目權限。
新版的role-base有點bug,每個分配完權限,Manage Roles得應用一下才能生效。
Jenkins權限分配很重要,對於開發人員,最好是提供一個接口,供其調用,后面會講到。