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
- 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匹配正则规则的,就会自动分配角色权限了,不需要再手动通过“配置-项目-项目管理”设置了
SonarQube系列-认证&授权的配置的更多相关文章
- 基于.NetCore3.1系列 —— 认证授权方案之授权揭秘 (下篇)
一.前言 回顾:基于.NetCore3.1系列 -- 认证授权方案之授权揭秘 (上篇) 在上一篇中,主要讲解了授权在配置方面的源码,从添加授权配置开始,我们引入了需要的授权配置选项,而不同的授权要求构 ...
- 基于.NetCore3.1系列 ——认证授权方案之Swagger加锁
一.前言 在之前的使用Swagger做Api文档中,我们已经使用Swagger进行开发接口文档,以及更加方便的使用.这一转换,让更多的接口可以以通俗易懂的方式展现给开发人员.而在后续的内容中,为了对a ...
- 【NET CORE微服务一条龙应用】第三章 认证授权与动态权限配置
介绍 系列目录:[NET CORE微服务一条龙应用]开始篇与目录 在微服务的应用中,统一的认证授权是必不可少的组件,本文将介绍微服务中网关和子服务如何使用统一的权限认证 主要介绍内容为: 1.子服务如 ...
- 微服务系列之授权认证(二) identity server 4
1.简介 IdentityServer4 是为ASP.NET Core系列量身打造的一款基于 OpenID Connect 和 OAuth 2.0 认证授权框架. 官方文档:https://ident ...
- Spring Cloud Security OAuth2.0 认证授权系列(一) 基础概念
世界上最快的捷径,就是脚踏实地,本文已收录[架构技术专栏]关注这个喜欢分享的地方. 前序 最近想搞下基于Spring Cloud的认证授权平台,总体想法是可以对服务间授权,想做一个基于Agent 的无 ...
- 微服务系列之授权认证(一) OAuth 2.0 和 OpenID Connect
1.传统架构的授权认证 传统应用架构,用户使用账号密码登录后,可以使用前端cookie存储登录状态,也可以使用后端session方式存储登录状态,小应用这么做其实很高效实用,当应用需要横向扩展时,就需 ...
- 微服务系列之授权认证(三) JWT
1.JWT简介 官方定义:JWT是JSON Web Token的缩写,JSON Web Token是一个开放标准(RFC 7519),它定义了一种紧凑的.自包含的方式,可以将各方之间的信息作为JSON ...
- SonarQube系列一、Linux安装与部署
[前言] 随着项目团队规模日益壮大,项目代码量也越来越多.且不说团队成员编码水平层次不齐,即便是老手,也难免因为代码量的增加和任务的繁重而忽略代码的质量,最终的问题便是bug的增多和代码债务的堆积.因 ...
- Spring Cloud Alibaba 实战(十一) - Spring Cloud认证授权
欢迎关注全是干货的技术公众号:JavaEdge 本文主要内容: 如何实现用户认证与授权? 实现的三种方案,全部是通过画图的方式讲解.以及三种方案的对比 最后根据方案改造Gateway和扩展Feign ...
- [Spring Cloud实战 | 第六篇:Spring Cloud Gateway+Spring Security OAuth2+JWT实现微服务统一认证授权
一. 前言 本篇实战案例基于 youlai-mall 项目.项目使用的是当前主流和最新版本的技术和解决方案,自己不会太多华丽的言辞去描述,只希望能勾起大家对编程的一点喜欢.所以有兴趣的朋友可以进入 g ...
随机推荐
- 解决element-ui下拉框数据过多,导致页面卡顿问题与本地分页功能实现
效果 前情提要: 最近使用element-ui开发的一个页面,在打开的时候占用cpu非常高,有时候都能达到90%↑.在调试时发现其中一个下拉框的接口返回2k↑的数据.本着有问题问百度的精神,看到主要的 ...
- LeetCode 双周赛 106(2023/06/10)两道思维题
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 加入知识星球提问. 往期回顾:LeetCode 单周赛第 348 场 · 数位 DP 模版学会了吗? 双周赛 106 ...
- S32DS学习日志:debug文件和烧录的.hex文件
工程导入之后先clean一下,重新编译生成的文件默认在Production文件下面,得重新设置 折腾半天用jlink烧录没反应,原来是这里错了. production下的文件是用来用来集成bootlo ...
- List 接口及其常用方法
List 接口基本介绍 List接口是Collection接口的子接口,其主要特点如下: List中元素有序,是按照元素的插入顺序进行排序的.每个元素都有一个与之关联的整数型索引(索引从 0 开始), ...
- java.lang.Error: Unresolved compilation problems
一般有两种常见的情况: 1.当一个 jar 文件的 MANIFEST.MF 中已经标记了 Sealed: true 时,这个 jar 内所有的 java package 中的类必须来自这个 jar 包 ...
- SpringBoot 多环境切换
日常开发中一般都会有三个不同的环境,分别是开发环境(dev),测试环境(test)和生产环境(prod),不同的环境各种配置都不相同,比如数据库配置,服务器端口等等. Spring Boot 多环境配 ...
- Go 并发模型—Goroutines
前言 Goroutines 是 Go 语言主要的并发原语.它看起来非常像线程,但是相比于线程它的创建和管理成本很低.Go 在运行时将 goroutine 有效地调度到真实的线程上,以避免浪费资源,因此 ...
- Win10激活步骤、密钥key
统安装完毕后,首先以Win+R打开CMD命令行窗口,按下Win+X,选择命令提示符(管理员). Win10企业版 用户举例请依次输入: slmgr /ipk NPPR9-FWDCX-D2C8J-H87 ...
- 使用Stable Diffusion制作AI数字人视频的简明教程
基本方法 搞一张照片,搞一段语音,合成照片和语音,同时让照片中的人物动起来,特别是头.眼睛和嘴. 语音合成 语音合成的方法很多,也比较成熟了,大家可以选择自己方便的,直接录音也可以,只要能生成一个语音 ...
- 虚拟化学习:vps和云计算的区别
1 vps 可以由虚拟机实现,但并不是虚拟机; 虚拟机是云计算的核心,但虚拟机也不等于云主机. 2 vps是面向单台服务器的虚拟化技术,服务器挂了,其上的vps也跟着挂了. 3 云计算是面向服务器集群 ...