SonarQube系列-全面了解认证&授权的配置,基于权限模块快速授权用户-群组-项目

参考文档: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,仍然可以匿名使用。禁用此设置可能会使实例面临安全风险。

认证机制

可通过多种方式来管理认证机制:

  • 通过SonarQube內建的user/group数据库
  • 通过外部程序(如LDAP)
  • 通过HTTP headers

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」
    • Browse
    • See Source Code
    • Administer Issues
    • Administer Security Hotspots
    • Administer
    • Execute Analysis
    • Public and Private
    • 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上创建一个用户,并设置只有该用户才有相应权限。

默认权限的权限模板

https://docs.sonarsource.com/sonarqube/latest/instance-administration/security/#permission-templates-for-default-permissions
SonarQube附带默认权限模板,该模板在创建项目,项目组合或应用程序自动授予特定组的特定权限。管理员可以编辑此模板。

使用sonar扫描新项目后,如果要做角色管理,可以在sonarqube控制台为项目指定权限模板以分配角色权限,但是每次扫描新项目都通过手动添加,特别是项目多的情况下,显然是不方便的。

sonarqube在创建新权限模板的时候,提供了Project Key Pattern(项目标识模式)功能,可以通过其正则表达式将权限模板自动授予到project_key符合的项目

  1. 「选择“配置-权限-权限模板”创建新模板」
image.png
  1. 「设置名称、描述、项目标识模式(使用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」.


「特别注意:」

  1. 先要配置好permission template, 设置哪些组可以有哪些权限,比如设置组 ABC可以访问所有ABC 为前缀的项目。
  2. 然后进行代码扫描,生成的项目名称必须匹配 ABC 前缀
  3. 最后,组ABC 的成员才能访问  ABC 前缀的扫描项目,因为提前已经建立了权限绑定关系。

如果之前没有进行这样的设置,过去创建的扫描项目不会默认继承这样的关系,必须重新手动进行授权。

「官方解释:」
「虽然模板可以在项目创建后应用,但将包含 Creators 权限的模板应用于现有项目/项目组合/应用程序不会向项目的原始创建者授予相关权限,因为该关联未存储。」

请注意,项目和权限模板之间没有关系,这意味着:

  • 将权限模板应用于项目后,可以修改项目的权限。
  • 修改权限模板时,不会更改任何项目权限。

「3. 为模板设置用户/用户组的角色权限」

  1. 「设置完成,看到权限模板里已经有了新模板」
image.png

权限模板设置完成后,新扫描的项目,只要project key匹配正则规则的,就会自动分配角色权限了,不需要再手动通过“「配置-项目-项目管理」”设置了

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容