在Devops时代安全和合规尤为重要,为了保持持续高质量的软件开发和交付,通过在Devops的各个环节自动进行安全审计和检查是Devops工程能否顺利开展的关键,今天虫虫给大家介绍一个免费开源的代码审计安全工具SonarQube,介绍其功能、优点,原理和架构,以及怎么简单使用以及在K8S中安全的过程。
概述SonarQube是一种代码质量保证工具,可收集和分析源代码,并提供项目代码质量报告。SonarQube由SonarSource开发并开源并免费提供(收费的企业版),可以用于持续检查代码质量,通过静态代码分析执行自动审查,以检测20多种编程语言(包括 C、C++、Java、Javascript、PHP、GO、Python等)的错误、代码异常和安全漏洞。SonarQube结合了静态和动态分析工具,并能够随着时间的推移持续扫描项目的代码质量。从细微的样式选择到设计错误,都可以通过 SonarQube来进行检查和评估。
SonarQube可以和用户的开发工作流程集成,以实现跨项目分支和拉取请求的持续代码检查。SonarQube提供应用程序运行状况的详细报告并突出显示新引入的问题,为用户提供了丰富的可搜索代码历史记录,以分析代码出现问题的位置,并确定是否存在样式问题、代码失败、代码重复、缺乏测试覆盖率或代码过于复杂。能从不同方面分析源代码,并逐层钻取代码,将模块级别下移到类级别,每个级别都会生成指标值和统计数据,以揭示源代码中需要改进的问题区域。
Sonarqube还确保代码可靠性、应用程序安全性,并通过使代码库干净且可维护来减少技术债务。SonarQube还提供CI/CD集成,并在代码审查期间通过分支分析和拉取请求实时提供反馈。
主要功能Sonarqube使用两种方法进行代码安全审计升级:静态代码分析或动态代码分析。
动态代码分析
动态代码分析依赖于研究代码在执行过程中的行为方式。目的是在程序运行时发现程序中的错误,而不是通过离线反复检查代码。动态代码分析支持进行以下各项分析:
代码覆盖率:计算测试套件对一段代码进行了多少测试。
内存错误检测:检查是否发生内存泄漏或错误。
故障定位:将有bug的代码定位到具体位置。
不变推理:观察程序计算的值,然后报告在观察到的执行中为true的属性,并且这可能在所有执行中为true。
安全分析:检测安全问题。
并发错误:动态使用运行时错误检测来暴露缺陷,例如竞争条件、异常、资源和内存泄漏以及安全攻击漏洞
程序切片:包括将程序减少到仍能产生所选行为的最小形式。
性能分析:在运行时动态跟踪软件应用程序并捕获可用于分析和识别性能不佳原因的数据。
静态代码分析
静态代码分析是在不执行任何代码的情况下完成的。它通过白盒分析的方法扫描程序源代码以来搜索可能的错误用法和不良编码实践的算法和技术的集合。这是通过编译器错误和运行时调试技术来完成的。静态代码分析也被认为是自动化代码审查过程的一种方法。静态代码分析涉及的任务可以分为:
检测程序中的错误。
关于使用格式化程序格式化代码的建议。
指标计算,它可以给出关于代码的好坏的评级。
静态代码分析的同类流行工具有Checkstyle、PMD和FindBugs。
SonarQube优点创建SonarQube的动机源于维护代码质量的需要,这对于开发可靠、可维护和安全的软件至关重要。在SonarQube等工具出现之前,检查代码是否存在潜在错误、漏洞以及维护编码标准通常是手动过程,容易出现人为错误并且非常耗时。
随着软件项目规模和复杂性的增长,跟踪和管理代码质量变得越来越困难。SonarQube通过自动化的思想来持续监控代码的技术债务以及影响代码可维护性、性能和安全性的问题。通过自动化代码审查过程,SonarQube帮助开发人员:
尽早发现并修复问题:在开发周期的早期发现错误和漏洞可以节省时间和资源,并防止问题影响到生产。
执行编码标准:它确保团队遵守一套编码标准和实践,从而产生更具可读性和可维护性的代码。
跟踪技术债务:它提供了对技术债务的洞察,并帮助团队确定重构工作的优先级。
提高代码安全性:有助于识别安全热点和漏洞,从而减少安全漏洞的机会。
教育开发人员:它还可以作为开发人员的教育工具,提供有关最佳实践的反馈并指导他们如何编写更好、更简洁的代码。
入门SonarQube有几个级别,这取决希望软件执行的功能以及您希望使用该软件进行的开发级别。
社区版:在CI/CD中采用代码质量的起点
开发人员版:最大的应用程序安全性以及SonarQube跨分支机构和 RS的价值
企业版:管理应用程序组合,在企业级别实现代码质量和安全性
数据中心版:全球部署的高可用性
要在本地安装SonarQube来分析项目,有两种不同的方法:使用zip安装包,或使用docker镜像
使用Zip压缩包SonarQube
从此处下载SonarQube下载社区版zip文件。
将其解压到需要安装的目录,比如d:/sonarqube 或/opt/sonarqube
启动SonarQube服务器:
在Windows版本:D:\sonarqube\bin\windows-x86-64\StartSonar.bat
在其他操作系统上:/opt/sonarqube/bin/[OS]/sonar.sh console
使用Docker安装
在Docker Hub上找到您想要使用的SonarQube社区版本
然后,可以通过运行一键命令启动服务器:
docker run -d --name sonarqube -p 9000:9000 <镜像名称>然后就可以通过浏览器localhost:9000访问(用户和密码均为admin)
使用SonarQube分析项目登录sonarqube后,要分析项目,可通过以下步骤操作:
单击创建新项目按钮
当询问希望如何创建项目时,请选择手动。
为的项目提供项目密钥和显示名称,然后单击“设置”按钮。
下在“提供令牌”,选择“生成令牌”。为令牌命名,单击“生成” 按钮,然后单击 继续”。
下选择项目的主要语言在对项目运行分析,然后按照说明分析项目。在这里,将下载并在代码上执行扫描程序(如果使用的是Maven或Gradle,则会自动下载扫描程序)。
成功分析代码后,将在 SonarQube看到分析结果:
工作原理和架构SonarQube通过详细、系统地审查源代码来发挥作用。它集成在软件开发工作流程中,通常在新代码提交到版本控制系统时在持续集成过程中激活。
核心操作从SonarQube扫描器开始,只通过扫描代码而不执行它(静态分析)。 根据预定义的规则和模式审查代码以识别问题。这些规则的范围可以从潜在的错误和安全漏洞到代码异常,这些代码中的模式可能并不是真正的漏洞,但可能会在未来引起问题。
扫描完成后,SonarQube会将结果编译成综合报告。该报告提供了一个仪表板,开发人员可以使用它来清晰地了解代码质量,突出显示重复代码、违反编码标准以及可以简化的复杂代码结构等问题。
该平台还提供代码质量的历史视图,使开发人员能够跟踪他们在一段时间内改进代码的进度。 这种历史视角不仅是为了发现问题所在,也是为了验证维护或提高代码质量的持续努力的有效性。
此外,SonarQube可以配置为在不满足某些条件时使构建失败,从而确保新代码在合并和部署之前满足项目的质量标准。这创建了一种新变更必须通过的“质量门”,从而将代码质量检查直接集成到软件开发过程中。
SonarQube架构SonarQube的架构为一个完善的集群架构模式,主要由服务器、扫描以及数据库构成。
服务器端SonarQube服务器端提要提供Web用户交互界面和后台信息处理计算引擎(Computer Engine),包括:
Web服务器:提供SonarQube用户交互界面和Web的API交互接口。
搜索服务器:为Elasticsearch搜索引擎,它对分析结果进行索引,以便在UI内进行快速搜索和检索。
计算引擎:处理代码分析报告并将其结果保存在SonarQube数据库中。
扫描器扫描器是一个客户端命令行工具,可以在构建服务器或本地计算机上运行它来分析项目的源代码。不同的构建系统和环境有不同的扫描仪。扫描代码后,扫描仪会将报告发送到SonarQube服务器进行处理。
数据库SonarQube使用数据库来存储当前配置、每个项目分析的质量快照以及用户信息。SonarQube数据库可以选择多种数据后台,比如PostgreSQL、Microsoft SQL Server 或Oracle等实例。
其他辅助系统插件系统
SonarQube支持扩展其功能的插件,例如语言分析器、持续集成服务器的集成插件和源代码控制系统。这些插件可以安装在服务器上以增强服务器的功能。
质量概况和质量门
质量概况本质上是在分析过程中应检查项目的一组规则,而质量门是确定项目质量的条件或阈值。
持续集成(CI)服务器
SonarQube可与GitLab、Jenkins、TeamCity或 Azure DevOps等CI服务器集成。这些系统可以触发SonarQube扫描作为CI管道的一部分。这样的架构让SonarQube能够适应各种开发环境,同时提供一致且集中的方式来管理代码质量。它足够灵活,可供开发人员在本地计算机上使用,也可以完全集成到大规模CI/CD管道中以进行持续分析和反馈。
DevOps和SonarQube集成在DevOps周期中,强调开发(Dev)和运营(Ops)的统一,以提高敏捷性并减少从开发到部署的时间, SonarQube主要提现在“Dev”方面发挥作用,特别是在持续集成(CI)方面)和持续交付(CD)实践。
持续集成(CI)当开发人员将代码提交到版本控制存储库时,CI服务器会自动运行一系列步骤来构建和测试代码。SonarQube集成到这些步骤中以执行静态代码分析,确保新代码在合并到主分支之前符合质量标准。
持续交付(CD)CI之后,SonarQube角色将继续执行质量门。如果代码通过了这些关卡,则视为已准备好部署到生产环境。SonarQube确保在部署之前评估代码质量,从而降低将缺陷或问题推向生产的可能性。
反馈和监控 在DevOps中,反馈至关重要。SonarQube直接向开发人员提供有关代码质量的详细反馈(可以集成邮件或者slack等通讯工具告警)。此反馈循环允许快速修复,这是在DevOps环境中保持高速的关键。
协作与沟通 DevOps强调开发人员、QA 和运营之间需要更好的沟通和协作。在这其中SonarQube充当一个通用平台,所有利益相关者都可以在其中查看代码质量指标并了解软件的运行状况,从而培养透明度和共同承担质量责任的文化。
持续提高 提供的指标和历史趋势SonarQube使团队能够衡量随着时间的推移在提高代码质量方面的进展,这与持续改进的DevOps原则保持一致。
通过将SonarQube集成到DevOps周期中,企业可以确保代码质量是共同的责任,并且持续监控和改进,这是DevOps理念的核心。
在K8S集群中安装SonarQubeSonarQube 可以使用Helm 图表模板直接安装在K8S,另外SonarQube需要PostgreSQL。
下载Helm Chart模板(可自行修改)
git clone git@github:8grams/microk8s-helm-chart.git然后,创建一个文件values.yaml覆盖默认的Helm值
安装它
helm install sonarqube ./charts/general -n sonarqube -f values.yaml --create-namespace检查安装
kubectl -n sonarqube get deploymentOK,一切正常,现在你的K8S集群上安装了一个强大的开源代码分析工具。可以通过访问SonarQube Web Admin使用。
总结SonarQube是一款高质量的开源代码安全审计工具,可以在单机情况下载使用检查我们的项目代码。也可以方便的集成到企业的DevOps中去实现自动化代码安全审计和持续安全迭代。