參考文檔:https://docs.sonarqube.org/latest/instance-administration/security/
概述
SonarQube具有許多全局安全功能:
- 認證和授權機制
- 強制身份認證
- 委派認證
除此之外,還可在group/user級別配置:
- 查看一個已存在的項目
- 訪問項目的源代碼
- 管理一個項目(設置排除模式,調整該項目的插件配置等)
- 管理質量配置,質量閾,實例…
安全性的另一個方面是對密碼等設置進行加密。SonarQube提供了一種內置的機制來加密設置。
認證
https://docs.sonarsource.com/sonarqube/latest/instance-administration/security/#authentication
匿名用戶是否可以瀏覽SonarQube實例?當然不行!那就需要強制用戶認證。
強制用戶身份驗證可防止匿名用戶通過Web API訪問Sonar Qube UI或項目數據。一些特定的只讀Web API,包括提示身份驗證所需的API,仍然可以匿名使用。
禁用此設置可能會使實例面臨安全風險。
認證機制
可通過多種方式來管理認證機制:
Sonar用戶
當你在SonarQube數據庫中創建用戶時,他將被視爲本地用戶,並且針對SonarQube自己的user/group數據庫進行身份認證,而不是通過任何外部工具。
默認情況下,admin是本地賬戶。
同樣,所有非本地(non-local)賬戶將僅針對外部工具進行身份認證。
管理員可以管理所有用戶的Tokens——創建和刪除。一旦創建,Token就是運行分析所需的唯一憑證,作爲sonar.login屬性的值來傳遞。
默認管理員憑據
當安裝SonarQube時,會自動創建具有管理系統權限的默認用戶: user: admin/passwd: admin
恢復管理員訪問權限
如果你修改了管理員密碼,但又忘記了:
USE sonar;
update users set crypted_password ='$2a$12$uCkkXmhW5ThVK8mpBvnXOOJRLd64LJeHTeCkSuB3lfaR2N0AYBaSi',
salt=null,
hash_method='BCRYPT'
where login ='admin'
如果您刪除了管理員並隨後鎖定了具有全局管理權限的其他用戶:
insert into user_roles(uuid, user_uuid, role)
values ('random-uuid', (select uuid from users where login='mylogin'), 'admin');
授權
在SonarQube中實現授權的方式是非常標準的。可以根據需要創建任意數量的用戶和用戶組。然後,可以將用戶附加到(或不附加)到(多個)組。然後向組和/或用戶授予(多個)權限。這些權限授予對項目、服務和功能的訪問權限。
對不同組、不同用於僅限權限分配,以訪問不同的資源。
- User
- Group
- Global Permissions
- Administer System
- Administer Quality Profiles
- Administer Quality Gates
- Execute Analysis
- Create Projects
- Create Applications
- Create Portfolios
- Project Permissions
- Public and Private
- Administer Issues
- Administer Security Hotspots
- Administer
- Execute Analysis
- Private
- Browse
- See Source Code
- Public and Private
相關配置
強制要求必須登錄SonarQube
用管理員賬號登錄SonarQube,打開Administration > Configuration > General Settings > Security,開啓Force user authentication,點擊Save保存生效。
開啓該選項後,不允許匿名運行mvn sonar:sonar代碼掃描,必須提供SonarQube Token。
修改默認的項目可見性爲private
用管理員賬號登錄SonarQube,打開Administration > Projects > Management,修改Default visibility of new projects爲private。
這樣新建項目後,只有該項目的授權用戶才能看到該項目的代碼。
對已有的項目,打開項目級別的Adminstration > Permissions,手工修改項目可見性。
去掉Anyone組的權限
用管理員賬號登錄SonarQube,打開Administration > Security > Global Permissions,去掉Anyone組的所有權限。
最新版本(v10.2.1.78527)AnyOne組已廢棄
去掉Project Creator的權限
用管理員賬號登錄SonarQube,打開Administration > Security > Permission Templates,打開Default template,去掉Project Creator的所有權限。
生成用戶Token
用該用戶登錄SonarQube,打開MyAccount > Security,來生成一個Token。
在按項目作多租戶隔離的場景,需要爲每個項目在SonarQube上創建一個用戶,並使用該用戶的Token來作代碼掃描。
設置項目賬號權限
用管理員賬號登錄SonarQube,打開項目級別的Adminstration > Permissions,選擇Users,輸入用戶名稱查詢,然後設置該用戶權限。
在按項目作多租戶隔離的場景,需要爲每個項目在SonarQube上創建一個用戶,並設置只有該用戶纔有相應權限。
默認權限的權限模板
SonarQube附帶默認權限模板,該模板在創建項目,項目組合或應用程序自動授予特定組的特定權限。管理員可以編輯此模板。
使用sonar掃描新項目後,如果要做角色管理,可以在sonarqube控制檯爲項目指定權限模板以分配角色權限,但是每次掃描新項目都通過手動添加,特別是項目多的情況下,顯然是不方便的。
sonarqube在創建新權限模板的時候,提供了Project Key Pattern(項目標識模式)功能,可以通過其正則表達式將權限模板自動授予到project_key符合的項目
- 選擇“配置-權限-權限模板”創建新模板
- 設置名稱、描述、項目標識模式(使用sonarqube的正則表達式)
.* 表示匹配0到多個字符(ps:這裏與常見的正則表達式的模糊匹配(*)方式不同,[a,b] 匹配域內任意字符,
如:
.*test.* 可以匹配project key爲:citestpipe,ci-test-pipe等形式的項目
.*[-,_]test.* 可以匹配project key爲:ci-test-pipe,ci_test等形式的項目
use the "Create" button on Administration > Security > Permission Templates. It is possible to provide a Project key pattern.
特別注意:
- 先要配置好permission template, 設置哪些組可以有哪些權限,比如設置組 ABC可以訪問所有ABC 爲前綴的項目。
- 然後進行代碼掃描,生成的項目名稱必須匹配 ABC 前綴
- 最後,組ABC 的成員才能訪問 ABC 前綴的掃描項目,因爲提前已經建立了權限綁定關係。
如果之前沒有進行這樣的設置,過去創建的掃描項目不會默認繼承這樣的關係,必須重新手動進行授權。
官方解釋:
雖然模板可以在項目創建後應用,但將包含 Creators 權限的模板應用於現有項目/項目組合/應用程序不會向項目的原始創建者授予相關權限,因爲該關聯未存儲。**
請注意,項目和權限模板之間沒有關係,這意味着:
- 將權限模板應用於項目後,可以修改項目的權限。
- 修改權限模板時,不會更改任何項目權限。
3. 爲模板設置用戶/用戶組的角色權限
- 設置完成,看到權限模板裏已經有了新模板
權限模板設置完成後,新掃描的項目,只要project key匹配正則規則的,就會自動分配角色權限了,不需要再手動通過“配置-項目-項目管理”設置了