SonarQube系列-全面了解認(rèn)證&授權(quán)的配置,基于權(quán)限模塊快速授權(quán)用戶-群組-項(xiàng)目

參考文檔:https://docs.sonarqube.org/latest/instance-administration/security/

概述

SonarQube具有許多全局安全功能:

  • 認(rèn)證和授權(quán)機(jī)制
  • 強(qiáng)制身份認(rèn)證
  • 委派認(rèn)證

除此之外,還可在group/user級(jí)別配置:

  • 查看一個(gè)已存在的項(xiàng)目
  • 訪問項(xiàng)目的源代碼
  • 管理一個(gè)項(xiàng)目(設(shè)置排除模式,調(diào)整該項(xiàng)目的插件配置等)
  • 管理質(zhì)量配置,質(zhì)量閾,實(shí)例…

安全性的另一個(gè)方面是對(duì)密碼等設(shè)置進(jìn)行加密。SonarQube提供了一種內(nèi)置的機(jī)制來加密設(shè)置。

認(rèn)證

https://docs.sonarsource.com/sonarqube/latest/instance-administration/security/#authentication
匿名用戶是否可以瀏覽SonarQube實(shí)例?當(dāng)然不行!那就需要強(qiáng)制用戶認(rèn)證。

強(qiáng)制用戶身份驗(yàn)證可防止匿名用戶通過Web API訪問Sonar Qube UI或項(xiàng)目數(shù)據(jù)。一些特定的只讀Web API,包括提示身份驗(yàn)證所需的API,仍然可以匿名使用。禁用此設(shè)置可能會(huì)使實(shí)例面臨安全風(fēng)險(xiǎn)。

認(rèn)證機(jī)制

可通過多種方式來管理認(rèn)證機(jī)制:

  • 通過SonarQube內(nèi)建的user/group數(shù)據(jù)庫
  • 通過外部程序(如LDAP)
  • 通過HTTP headers

Sonar用戶

當(dāng)你在SonarQube數(shù)據(jù)庫中創(chuàng)建用戶時(shí),他將被視為本地用戶,并且針對(duì)SonarQube自己的user/group數(shù)據(jù)庫進(jìn)行身份認(rèn)證,而不是通過任何外部工具。

默認(rèn)情況下,admin是本地賬戶。

同樣,所有非本地(non-local)賬戶將僅針對(duì)外部工具進(jìn)行身份認(rèn)證。

管理員可以管理所有用戶的「Tokens」——?jiǎng)?chuàng)建和刪除。一旦創(chuàng)建,Token就是運(yùn)行分析所需的唯一憑證,作為sonar.login屬性的值來傳遞。

默認(rèn)管理員憑據(jù)

當(dāng)安裝SonarQube時(shí),會(huì)自動(dòng)創(chuàng)建具有管理系統(tǒng)權(quán)限的默認(rèn)用戶: user: admin/passwd: admin

「恢復(fù)管理員訪問權(quán)限」

如果你修改了管理員密碼,但又忘記了:

USE?sonar;

update?users?set?crypted_password?='$2a$12$uCkkXmhW5ThVK8mpBvnXOOJRLd64LJeHTeCkSuB3lfaR2N0AYBaSi',
salt=null,?
hash_method='BCRYPT'
where?login?='admin'

如果您刪除了管理員并隨后鎖定了具有全局管理權(quán)限的其他用戶:

insert?into?user_roles(uuid,?user_uuid,?role)
values?('random-uuid',?(select?uuid?from?users?where?login='mylogin'),?'admin');

授權(quán)

在SonarQube中實(shí)現(xiàn)授權(quán)的方式是非常標(biāo)準(zhǔn)的。可以根據(jù)需要?jiǎng)?chuàng)建任意數(shù)量的用戶和用戶組。然后,可以將用戶附加到(或不附加)到(多個(gè))組。然后向組和/或用戶授予(多個(gè))權(quán)限。這些權(quán)限授予對(duì)項(xiàng)目、服務(wù)和功能的訪問權(quán)限。

對(duì)不同組、不同用于僅限權(quán)限分配,以訪問不同的資源。

  • 「User」
  • 「Group」
  • 「Global Permissions」
    • Administer System
    • Administer Quality Profiles
    • Administer Quality Gates
    • Execute Analysis
    • Create Projects
    • Create Applications
    • Create Portfolios
  • 「Project Permissions」
    • Browse
    • See Source Code
    • Administer Issues
    • Administer Security Hotspots
    • Administer
    • Execute Analysis
    • Public and Private
    • Private

相關(guān)配置

強(qiáng)制要求必須登錄SonarQube

用管理員賬號(hào)登錄SonarQube,打開Administration > Configuration > General Settings > Security,開啟Force user authentication,點(diǎn)擊Save保存生效。

開啟該選項(xiàng)后,不允許匿名運(yùn)行mvn sonar:sonar代碼掃描,必須提供SonarQube Token。

修改默認(rèn)的項(xiàng)目可見性為private

用管理員賬號(hào)登錄SonarQube,打開Administration > Projects > Management,修改Default visibility of new projects為private。
這樣新建項(xiàng)目后,只有該項(xiàng)目的授權(quán)用戶才能看到該項(xiàng)目的代碼。

對(duì)已有的項(xiàng)目,打開項(xiàng)目級(jí)別的Adminstration > Permissions,手工修改項(xiàng)目可見性。

去掉Anyone組的權(quán)限

用管理員賬號(hào)登錄SonarQube,打開Administration > Security > Global Permissions,去掉Anyone組的所有權(quán)限。
「最新版本(v10.2.1.78527)AnyOne組已廢棄」

去掉Project Creator的權(quán)限

用管理員賬號(hào)登錄SonarQube,打開Administration > Security > Permission Templates,打開Default template,去掉Project Creator的所有權(quán)限。

生成用戶Token

用該用戶登錄SonarQube,打開MyAccount > Security,來生成一個(gè)Token。
在按項(xiàng)目作多租戶隔離的場景,需要為每個(gè)項(xiàng)目在SonarQube上創(chuàng)建一個(gè)用戶,并使用該用戶的Token來作代碼掃描。

設(shè)置項(xiàng)目賬號(hào)權(quán)限

用管理員賬號(hào)登錄SonarQube,打開項(xiàng)目級(jí)別的Adminstration > Permissions,選擇Users,輸入用戶名稱查詢,然后設(shè)置該用戶權(quán)限。

在按項(xiàng)目作多租戶隔離的場景,需要為每個(gè)項(xiàng)目在SonarQube上創(chuàng)建一個(gè)用戶,并設(shè)置只有該用戶才有相應(yīng)權(quán)限。

默認(rèn)權(quán)限的權(quán)限模板

https://docs.sonarsource.com/sonarqube/latest/instance-administration/security/#permission-templates-for-default-permissions
SonarQube附帶默認(rèn)權(quán)限模板,該模板在創(chuàng)建項(xiàng)目,項(xiàng)目組合或應(yīng)用程序自動(dòng)授予特定組的特定權(quán)限。管理員可以編輯此模板。

使用sonar掃描新項(xiàng)目后,如果要做角色管理,可以在sonarqube控制臺(tái)為項(xiàng)目指定權(quán)限模板以分配角色權(quán)限,但是每次掃描新項(xiàng)目都通過手動(dòng)添加,特別是項(xiàng)目多的情況下,顯然是不方便的。

sonarqube在創(chuàng)建新權(quán)限模板的時(shí)候,提供了Project Key Pattern(項(xiàng)目標(biāo)識(shí)模式)功能,可以通過其正則表達(dá)式將權(quán)限模板自動(dòng)授予到project_key符合的項(xiàng)目

  1. 「選擇“配置-權(quán)限-權(quán)限模板”創(chuàng)建新模板」
image.png
  1. 「設(shè)置名稱、描述、項(xiàng)目標(biāo)識(shí)模式(使用sonarqube的正則表達(dá)式)」

.* 表示匹配0到多個(gè)字符(ps:這里與常見的正則表達(dá)式的模糊匹配(*)方式不同,[a,b] 匹配域內(nèi)任意字符,如:

.*test.*?可以匹配project?key為:citestpipe,ci-test-pipe等形式的項(xiàng)目
.*[-,_]test.*?可以匹配project?key為:ci-test-pipe,ci_test等形式的項(xiàng)目

use the "Create" button on 「Administration」 > 「Security」 > Permission Templates. It is possible to provide a 「Project key pattern」.


「特別注意:」

  1. 先要配置好permission template, 設(shè)置哪些組可以有哪些權(quán)限,比如設(shè)置組 ABC可以訪問所有ABC 為前綴的項(xiàng)目。
  2. 然后進(jìn)行代碼掃描,生成的項(xiàng)目名稱必須匹配 ABC 前綴
  3. 最后,組ABC 的成員才能訪問 ?ABC 前綴的掃描項(xiàng)目,因?yàn)樘崆耙呀?jīng)建立了權(quán)限綁定關(guān)系。

如果之前沒有進(jìn)行這樣的設(shè)置,過去創(chuàng)建的掃描項(xiàng)目不會(huì)默認(rèn)繼承這樣的關(guān)系,必須重新手動(dòng)進(jìn)行授權(quán)。

「官方解釋:」
「雖然模板可以在項(xiàng)目創(chuàng)建后應(yīng)用,但將包含 Creators 權(quán)限的模板應(yīng)用于現(xiàn)有項(xiàng)目/項(xiàng)目組合/應(yīng)用程序不會(huì)向項(xiàng)目的原始創(chuàng)建者授予相關(guān)權(quán)限,因?yàn)樵撽P(guān)聯(lián)未存儲(chǔ)?!?/strong>

請(qǐng)注意,項(xiàng)目和權(quán)限模板之間沒有關(guān)系,這意味著:

  • 將權(quán)限模板應(yīng)用于項(xiàng)目后,可以修改項(xiàng)目的權(quán)限。
  • 修改權(quán)限模板時(shí),不會(huì)更改任何項(xiàng)目權(quán)限。

「3. 為模板設(shè)置用戶/用戶組的角色權(quán)限」

  1. 「設(shè)置完成,看到權(quán)限模板里已經(jīng)有了新模板」
image.png

權(quán)限模板設(shè)置完成后,新掃描的項(xiàng)目,只要project key匹配正則規(guī)則的,就會(huì)自動(dòng)分配角色權(quán)限了,不需要再手動(dòng)通過“「配置-項(xiàng)目-項(xiàng)目管理」”設(shè)置了

本文使用 文章同步助手 同步

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容