稳定可靠安全无忧,华为云发布代码托管服务CodeArts Repo

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了稳定可靠安全无忧,华为云发布代码托管服务CodeArts Repo相关的知识,希望对你有一定的参考价值。

2022年2月,黑客窃取某著名公司大量源码,包含硬件原理图、源代码、显卡驱动源码等信息,并对企业勒索巨额赎金;3月,全球最大的开源代码托管网站经历了多次长达数个多小时的宕机,数百万开发者无法提交代码,导致开发活动中断。

源代码是企业最宝贵的资产之一,一旦保存源代码的系统出现安全性或稳定性问题,将给企业商业及信誉带来不可估量的损失。随着软件规模的不断扩大,生成软件的源代码规模也在急剧上升,单个软件系统规模已达数亿行、开发人员达数千人——如何管理好庞大的源代码,并让企业员工持续稳定的开展软件开发活动将成为一个重大的挑战。

2月20日,华为云代码托管服务CodeArts Repo将于22:00正式上线,这是一款全栈自研、基于Git的云端代码托管服务,旨在保护企业核心代码资产安全,提升企业研发质量和效率。

代码管理工具是软件开发的基础
不断提升研发质量和效率,缩短TTM(Time to Market)是软件企业商业成功的关键。如今,一款软件通常由多人协作开发而成,代码管理工具不仅是研发资产的重要载体,同时也支撑了版本化配置管理、代码开发的工作流等活动,通过与CI/CD工具服务集成,能够有效提升团队协作效率和自动化交付效率。

稳定可靠安全无忧,华为云发布代码托管服务CodeArts


▲代码管理工具在开发活动中发挥着关键作用

为了让代码资产更加安全和稳定,一款现代化代码管理工具应当具备如下主要能力:
版本控制

包含代码存储功能,支持代码上传和下载,并能够简单、准确地记录和重现代码的任何一个历史版本。
协同开发

支持多人协同开发,如不同开发人员可同时在同一个软件模块上工作,同时对同一代码部分做不同的修改,即使是跨地域分布的开发团队也能互不干扰。
质量管控

提供在线阅读代码和代码检视功能,支持自动化持续集成与持续交付工具(CI/CD),对代码进行质量检查,确保符合质量的代码才能入库。
稳定可靠

支持多人并发在线作业,并发上传和下载代码,保持长期稳定,以保障企业研发活动不中断。
安全防护

能够保护企业的代码核心资产安全,抵御黑客盗取代码、对源代码投毒、恶意代码注入等。

华为云CodeArts Repo让代码核心资产安全无忧
为了支撑业务的高速发展,华为公司内部代码管理工具也在不断演进。从最开始满足基本配置管理需求,到支撑公司内源协同开发,再到支撑公司可信变革、达成CleanCode目标,华为的代码管理工具经历了“商用+开源”,到“边买边造”,再到“自给自足”的三个阶段。

自2019年来,通过历时3年的“云化改造、安全韧性构筑、全栈自研”三大战役,华为基于云原生打造了高安全、高韧性、全场景开发工作流覆盖的可信代码仓。

如今,华为云CodeArts Repo管理并保护着华为1100亿行代码,支撑15万人开发作业,日均1亿次下载量、1PB传输流量、3亿次API调用,一套系统支撑了华为嵌入式、云、终端、车等各类型产品代码管理和协同开发。

现在,华为云将内部多年积累的代码管理能力沉淀到CodeArts Repo工具,发布6大特性。

特性一:自研内核,确保代码安全,稳定高效开发

针对开源代码管理工具漏洞多、单体架构、存在连续性风险,和无法满足华为大规模、多场景开发作业流等问题,华为云CodeArts Repo通过自研内核,基于零信任思想进行设计和安全加固,从黑客视角建立

路径模型,落地6大类100+小类安全措施,从接入层、业务层,存储层到基础设施层全面构筑安全防护能力,确保代码不丢,系统不破,代码资产可恢复。

稳定可靠安全无忧,华为云发布代码托管服务CodeArts


此外,华为成立了“蓝军”部门,每年例行专门针对代码托管工具进行模拟测试,以攻促防,不断提升CodeArts Repo的安全能力。

为应对公司巨量业务增长,CodeArts Repo在架构上充分利用云原生技术优势,基于云化基础设施,实现容灾、备份、流控、服务降等,保障了业务不中断和数据不丢失,多维度提升可靠性。

CodeArts Repo在技术上突破底层硬件IO带宽限制、修改Git内核提升文件下载寻址效率、应用多级缓存等手段提升代码下载效率,经测试,相比开源同类产品具有超过10倍的写入、超过50倍的读取能力提升,可支撑万级并发下载,10万级并发在线作业。

特性二:覆盖基于Git的主要工作流,满足多种开发场景
华为云CodeArts Repo支持Git Flow、Gitlab Flow、Github Flow等所有工作流。华为将以前使用Gitlab、Github、Gerrit部署的100多套系统归一到CodeArts Repo一套系统,期间经历了超过10000条来自华为各产品线的需求锤炼,不断完善和优化,既能满足强流程规范的大规模产品协同开发,也适用于采用DevOps模式、快速上线的产品开发。

稳定可靠安全无忧,华为云发布代码托管服务CodeArts


特性三:多形式代码检视活动,提升代码质量,传递开发经验
《代码大全》的研究结果显示,各种研发活动中,代码检视的代码检测率高达60%,可以有效提前发现显而易见的错误随代码上库,提升代码质量,并且实现高级开发人员的知识传递,增强团队质量意识。

华为云CodeArts Repo提供分散式和集中式的代码检视能力,支持团队随时开展代码检视活动。

以合并请求为例,开发人员发起代码合并请求后,系统可自动分配给不同检视人员,检视人员利用碎片化时间检视代码,配合门禁系统保证检视意见关闭才能合入该合并请求。团队成员也可以集中到一起,直接在浏览器中打开代码仓文件,进行在线检视,提出检视意见后使跟踪流程闭环检视意见。

稳定可靠安全无忧,华为云发布代码托管服务CodeArts


另外,CodeArts Repo提供灵活的检视意见分类功能,既集成华为优秀的实践,使用此功能可以有效规范团队检视活动,同时沉淀团队经验和知识,将知识在公司、产品、项目等不同范围内传递。

特性四:质量门禁,确保每一行入库代码Clean

在软件生命周期中,缺陷发现越早、修复越早,缺陷的影响和修复代价就越小,数据显示,产品发布后每个缺陷的平均修复成本是验证阶段的6倍以上。因此为了避免有缺陷的代码合入主干,灵活有效的门禁控制必不可少。

稳定可靠安全无忧,华为云发布代码托管服务CodeArts


华为云CodeArts Repo提供“人工审核+CICD自动化检查”双重看护代码质量机制。通过保护分支功能,针对不同的角色控制代码的推送和合并权限,确保代码在推送入库的时候就符合质量要求。

配合CI/CD自动化检查工具链,提供代码静态检查、安全检查、测试结果验证、代码检视人员角色和数量检查、检视意见闭环率等几十种细粒度门禁控制策略,用户可灵活配置以满足不同的企业规范。

特性五:记录代码来龙去脉,双向可追溯

软件的可追溯性是软件工程的基础属性,具备可追溯性是良好的软件工程能力的客观呈现。可追溯性要求软件生产过程中从需求分析到编码、构建、验证、发布过程中产生的需求、设计、代码、用例、缺陷、发布等业务对象以及其关系的准确记录。

稳定可靠安全无忧,华为云发布代码托管服务CodeArts


华为云CodeArts Repo支持建立工作项和合并请求或者代码提交commit的双向关联关系,实现软件开发过程可追溯,通过可信的开发过程,保障结果可信。

以华为内部为例,团队通过在代码托管工具设置规则,确保了每次的代码入库都有对应的工作项,通过对关联关系数据进行识别、监控和预警,及时发现不合规的代码,提高产品质量。企业也可以在处理现网问题时根据关联关系找到对应的代码版本,快速修复。

特性六:内置多种模板,确保开发规范有序
软件开发是一项创造性的活动,也是一项复杂的多人协同活动。在软件开发过程中,企业需要选择适合的开发工作流,并建立规范的开发协作流程来保障产品能够持续高质量交付。

稳定可靠安全无忧,华为云发布代码托管服务CodeArts


华为云CodeArts Repo凝聚了华为公司内部各类研发场景的规范,可以帮助企业进行组织级开发规则制定和落地,促进产品质量和开发效率提升。

典型如代码提交规则、分支/tag命名规则,代码上库审核规则、代码质量门禁规则等,也提供了灵活的模板配置能力,如仓库模板、代码检视模板、合并请求模板。企业可以通过这些规范确保团队开发行为一致,产生的研发数据格式一致,并基于研发数据做效能分析,持续改进研发能力。

得益于以上特性,华为云CodeArts Repo如今已广泛应用于国内外财政、社保、物流、能源等领域,加速企业数字化转型。

如上海某知名大型物流企业拥有超过100个系统平台,1000多个仓库,其业务涉及快递、物流、跨境、仓储与供应链等多项业务和解决方案。该企业使用CodeArts Repo管理代码和协助规范企业开发活动,有效提升研发团队协作效率,降低代码质量问题70%

源于华为,服务世界,华为云CodeArts Repo着力将华为公司30余年的源代码管理经验外溢,服务千百行业。面向未来,华为云将对CodeArts Repo持续创新升级,探索边缘下载加速、多仓协同,提供更丰富的安全检查特性,携手国内外客户、伙伴以及开发者,共同提升软件开发质量和效率。


代码安全无忧—云效Codeup代码加密技术发展之路

简介:从代码服务及代码安全角度出发,看看云效代码加密技术如何解决这一问题

代码数据存在云端,如何保障它的安全?

部分企业管理者对于云端代码托管存在一丝担心:我的代码存在云端服务器,会不会被泄露?

接下来,我们将从代码服务及代码安全角度出发,看看云效代码加密技术如何解决这一问题。

一、前言

1. 代码托管服务

什么是代码托管服务?

代码托管服务是运行在公共环境,提供软件版本控制管理的服务。

代码托管服务核心要解决的两个问题:

  • 存档:需要具备存档的能力,也就是,把我们当前工作产出的某个副本保存下来,用于复制、追溯等等。
  • 协作:可以让不同的人,基于同一个对象内容进行工作,他们的成果可以一起体现在这个内容之上。

Git 自诞生以来,就和“开源”、“共享”这些词紧紧地联系在一起,它之所以能快速推广,并成为主流的软件版本控制工具,正是得益于它改变了传统软件版本控制工具的协作方式,让软件贡献与协作变得更加高效与便捷。

2. 代码托管服务的两种形态

代码托管服务通常有两种形态:

  • 使用开源产品或购买私有部署产品,架设在用户完全可控的部署环境上来提供服务。
  • 使用云托管服务产品,只拥有对服务的使用权,而不必关注服务的运维。

2.1 自建代码托管服务

代码资产作为企业资产的重要组成部分,一直备受重视。许多企业、机构都会有自运维的代码托管服务。无论是从完全控制还是数据安全的心理上来说,私网服务似乎更加可信与无懈可击,但随之而来的稳定性、可靠性的问题,却往往让中小企业焦头烂额。

企业发展之初,也许只需要一个服务器资源,搭建一个可用的代码托管服务,即可满足一定的日常研发需求;但随着企业规模不断扩大,遇到的问题逐步增多,开始需要投入专人来管理这个服务;而企业研发人员发展到千人以上的规模,甚至需要投入一个小的团队,来负责代码托管服务的运维及定制化开发工作。这无疑是一笔不小的成本开销。

此外,由于自建服务配套不完善,很容易产生局部运维权限过大而引发安全风险,删库跑路等恶性事件,部分IT从业者可以仅凭一己之力蒸发公司上亿的市值,无时无刻在为我们敲响警钟。

2.2 云代码托管服务

而云代码托管服务,以云共享的方式,提供更大范围的服务能力;同时,由于其背后往往都拥有一支经验深厚的运维管理及产品团队,其可靠性远胜于企业自建的托管服务。

但相比较而言,由于云代码托管服务对用户而言只有使用权,无法登录存储服务器,无法感知其背后的存储和复制机制,又由于代码本身的敏感性,对云代码托管服务的信任问题(如认为代码数据对服务提供方运维人员可见)始终是一些中大型企业的症结。

3. 代码托管服务的演进方向

随着云计算不断演进,通过云原生技术理念的应用可以最大化享受云计算的技术红利,包括弹性伸缩、按量付费、无厂商绑定、高SLA等。

而在实践云原生理念时,势必需要:

  • 采取DevOps领域的最佳实践来管理研发和运维流程。
  • 通过CICD工具链做到应用的快速迭代和持续交付。

GitOps、Iac(Infrastructure as code)现在越来越多地被众多企业所采纳,代码托管服务也逐渐成为了一种具备软件版本控制能力与协作能力的存储基础设施,其在可靠性及跨地域访问方面的能力,也逐渐成为各大云代码托管服务的核心衡量指标。而这方面的能力,也正是自建代码托管服务所不能满足的地方。

那么,如何打造云代码托管安全体系,来提升用户的信任感呢?

4. 云代码托管安全体系

为了更好地支撑代码托管服务的存档能力,云代码托管体系通常会按照以下四个方面来建设:

访问安全:

访问安全包括但不限于认证、权限控制、数据传输等等,它主要解决用户的身份识别,最小限度地赋予指定用户所需的合理权限,在事前最大程度保证代码资产的安全性,同时通过对传输过程数据加密(如常见的https、openssl加密)等手段,避免中间人截取或篡改用户的数据。

数据可信:

在访问安全的基础上,还需要通过一些额外的手段,确保代码提交及代码归属的可信度(如仅接受特定属主的代码,或要求必须对提交记录进行GPG签名),从而进一步降低因为账号泄露等导致的风险。

存储安全:

作为云代码托管服务最核心的能力,存储安全不但要保证服务的可靠性,数据资产不丢失,更可以通过存储快照及备份等手段,降低用户使用过程中的风险。同时,如何保障存储于物理设备的数据,不产生数据泄露风险,也是用户最为关心的问题。

审计风控:

在事前及事中安全能力之外,在事后通过智能化风险识别、主动防御等手段,进一步加固整个安全防护体系。

在访问安全、数据可信、审计风控等方便,目前各云代码托管服务或多或少的都具备了一些这样的能力,但我认为,存储安全才是最核心的竞争力。在这其中,代码数据加密技术的探索,也是最具有挑战的。

5. 数据加密技术

通过对数据内容进行加密,并将打开这把锁的钥匙,交到用户手中,是当下众多云服务用于解决用户信任问题的银弹。为此,具备云盘加密、云端加密能力的对象存储服务更容易被用户接受,众数据库服务厂商(如MySQL、Oracle、PostgreSQL等),也纷纷在自家产品上推出了TDE(Transparent Data Encryption)的能力。

那么,同样具备存储属性的代码托管服务,是否也可以引入数据加密的能力呢?

在提供用户对代码资产的备份、删除能力之外,通过数据加密,让用户的数据资产仅对用户自己可见,从而达到对代码存储的近完全可控的目的。

二、业界代码加密方案

1. 客户端加密

以开源软件 git-crypt 为代表的客户端加密方法,是针对敏感信息存储的不错选择。用户生成一个数据密钥,用于对目标文件加密,将加密后的内容,提交到git仓库当中。

在这种模式下,加密的内容,仅提交人可见,而当你需要与他人共享时,可以通过获取他人的 PGP 公钥,对用于加密的数据密钥加密后,提交到代码仓库。对方在获取到数据密钥密文后,使用自己的PGP私钥解密,得到数据密钥,就可以解密数据了。

但这种方式的弊端也很明显,数据密钥获取一次,就可以反复使用,无法解除授权;原有的文本文件加密后变成了二进制文件,也导致git无法对增量修改创建delta,大量使用及频繁变更就会导致仓库体积迅速膨胀。

2. 磁盘加密

磁盘加密技术已经非常成熟,似乎也是一个很好的选择方案。但磁盘加密仅解决物理设备层面的数据安全问题,在vm(虚拟机)层面,仍然是明文访问数据的。

3. 服务端闲时加密

对于使用不频繁的代码仓库,闲时加密也不失为一种好的解决方案。在一个Git仓库不被访问时,对其进行加密,而当其重新需要被访问时,就需要等待解密完成,再开放访问。

这种方案的通用性很高,也可以有很多种加密的方案可以选择,实现的成本也不高,但缺点也很明显:仓库访问需要一个预热的过程,仓库越大,预热时间也相应越长;高频访问的仓库,几乎总是以非加密的形态存储在磁盘上,而这些热点仓库,也往往是用户最为关注,也最不期望被泄露的。

4. 基于JGit、S3的云存储加密

AWS的代码托管产品CodeCommit,提供了代码加密的能力,它基于JGit实现的代码托管服务,复用了原有JGit的存储模型,利用S3的存储加密能力。

JGit的社区活跃度大大低于Git的社区活跃度,并且在性能对比上,Git也是远胜于JGit,这也是各大主流代码托管服务均使用Git的原因。

三、云端代码托管的透明加密

云代码托管服的透明加密,是一种服务端加密技术(Server-Side Encryption):它使用用户授权的密钥来完成对用户代码数据的加密;在用户访问时,使用用户的密钥来对数据进行解密。整个加解密的过程对用户完全透明,用户可以使用常规的Git客户端来进行代码库访问,或是浏览代码服务提供的页面服务;但用户保留对数据的完全掌控,可以在必要时,通过取消密钥授权,达到冻结代码数据的目的。

1. 云端透明加密的优势

Git TDE(Transparent Data Encryption)的优势:

  • 不依赖文件系统。
  • 文件系统访问的数据都是密文。
  • 可选择仅加密一些敏感仓库来降低对性能的影响。

Git TDE 保护突破了文件系统访问控制的安全威胁:

  • 偷取存储设备,并且直接访问代码库文件的恶意用户。
  • 通过磁盘备份恢复数据的恶意用户。
  • 保护静态数据(持久化的数据),对平台运维人员不可见。

2. 加密方式

采用信封加密[2] 方式进行加解密:

  • 由密钥管理服务KMS产生数据密钥,并将数据密钥密文及加密后结果进行存储。
  • 在需要解密时,由KMS解密数据密钥密文,从而解密加密后的内容。

KMS的加解密,通常用于处理少量的数据;而Git数据量较大,无法直接使用KMS的加解密服务,选择信封加密来加密数据密钥便是一个很好的选择。

3. 密钥粒度

每个代码库一个数据密钥:一库一密可以有效避免数据的泄露。

4. 哪些文件需要被加密

Git仓库中的数据,包括引用数据(HEAD、分支branch、标签tag等),索引数据(.idx, .bitmap),松散对象,打包数据(.pack)。

通常情况下,我们通过 git push 提交的少量代码修改,都会以松散对象的方式存储,一个松散对象文件对应一个用户侧文件实体。在进行垃圾回收 git gc 之后,会对松散对象进行清理,同时将他们打包整一个单独的打包数据(即 packfile)。

那么,在这种情况下,哪些文件需要被加密呢?

我们认为,分支等引用信息中,不包含敏感的用户信息,所以无需加密。同时,索引文件仅用于打包数据的查找,也不是用户信息,无需加密。通常情况下,我们的敏感信息都存储在较小的文本文件中(如代码文本),结合性能考量,我们决定:

  • 仅加密<10MB的松散对象(相当于500万字中文小说)。
大小压缩加密松散对象Packfile
< 10MB 
10MB ~ 512MB   
> 512MB  
* 对于提交的单文件packfile,不进行加密。(默认情况下,当我们向git服务提交单个大于500MB的文件时,服务端会将其存储为单文件packfile,而不是松散对象,而单个大于500MB的文件,我们可以认为其为二进制资源或者程序,没有加密的必要) * 除上述单文件packfile外,其他pack文件均进行加密。 ## 5. 何时加密 当用户进行代码提交时,用户提交数据会先通过SSL/TLS加密,传输到代码托管云服务,同时获取数据密钥,对提交的数据进行加密,而后持久化到磁盘。 ## 6. 如何加密 使用AES(Advanced Encryption Standard)作为我们的首选算法,预计在后续也会增加SM4的支持。 加密模式 使用CTR模式对数据内容进行加密。 密钥长度 使用256位数据密钥,由KMS生成,平台只保存数据密钥的密文。 ## 7. 加密后效果 打包文件packfile效果: 松散对象效果: ## 8. 加密对性能影响 加密会对仓库性能产生小幅度影响: 以Git工程的源代码下载为例,加密后打包阶段性能下降约10~20%;但由于下载过程中,网络传输占据绝大多数的时间(通常占比90%以上),由加密引起的性能下降在整体使用过程中可忽略不计。 # 四、我们的代码托管产品 ## Codeup代码加密 云端加密代码库是云效团队的自研产品,是目前国内首个支持代码加密的托管服务,也是目前世界范围内首个使用实时加密方案的代码托管服务。 通过在云端对托管在云效Codeup 的代码库进行落盘加密,可以有效避免数据拥有者之外的人接触到用户的明文数据,避免数据在云端发送泄露。同时,代码加密过程对用户完全透明,用户可以使用任意官方Git端(包括但不限于Git、JGit、libgit2等)来访问Codeup上的代码仓库。 ### 开启仓库加密 具有管理员权限的用户,进入期望加密的具体仓库的设置页面可以看到「仓库加密」开关,点击打开:   ### 新建仓库时开启加密 新建仓库时支持勾选启用仓库加密: ### 开启/关闭仓库加密 具有管理员权限的用户,进入期望加密的具体仓库的设置页面可以看到「仓库加密」开关,点击打开/关闭: 关闭加密时,会触发仓库的解密操作。 ### KMS密钥管理服务 前往阿里云KMS服务,可以查看到Codeup自动创建的服务密钥,该密钥不可删除和禁用,但可以通过修改KMS服务密钥的标签,临时禁用Codeup对KMS的调用: 点击④——密钥详情,可以看到「标签」部分有一个Codeup创建的标签键 acs:rdc:git-encryption: 通过临时修改或者删除该标签值,即可限制Codeup对密钥的访问,达到临时冻结仓库的目的。 > 版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

以上是关于稳定可靠安全无忧,华为云发布代码托管服务CodeArts Repo的主要内容,如果未能解决你的问题,请参考以下文章

代码安全无忧—云效Codeup代码加密技术发展之路

代码安全无忧—云效Codeup代码加密技术发展之路

代码安全无忧—云效Codeup代码加密技术发展之路

华为云云数据库 MySQL

华为云文档数据库服务DDS监控告警全新优化

云数据库 MongoDB版