为开源带来持续交付@持续交付峰会

2022年11月28日

< 1

为开源带来持续交付——Sudhindra Rao, JFrog

开源软件在现代软件开发的供应链中起着至关重要的作用。专有软件通常由75%或更多的开源依赖项组成。在开源软件中,我们依赖于软件过程和质量控制的特殊方法。

在过去几年中,其中一些特别的方法受到了很多关注——需要对源存储库进行MFA,需要对每个二进制文件进行签名,需要验证这些签名并在开源包中建立信任。

在这次演讲中,我们将介绍不同的工具,这些工具可以帮助您轻松实现这些方法,并帮助您决定哪些工具适合您的工作方式。我们将讨论最近对开源软件、SLSA框架、Sigstore、Notary和Pyrsia的攻击。我们还将强调,与专有软件相比,开源的持续交付通常没有得到同样的关注和严格性。我们将讨论如何应用这种严谨性,并享受与开源相同的好处。

欲了解更多持续交付基金会的内容,请查看我们的博客:https://cd.foundation/blog/

演讲者

Sudhindra饶

    Sudhindra饶

    开发经理

    Sudhindra Rao目前在JFrog担任开发经理,帮助建立社区和合作伙伴关系,为JFrog的液态软件使命提供可见性。他一直是关键业务应用程序的开发人员/架构师,使用多种语言进行开发,包括Go、Ruby和Java。在从事传统应用程序开发工作之后,Sudhindra成为Pivotal团队的一员,并构建了他们的Kubernetes(k8s)平台。Sudhindra的不同项目经验包括:为芝加哥最大的出版公司构建应用程序,大型数据中心自动化工作,大型拍卖系统以及美国全国选举的选民竞选应用程序。

    视频记录

    当你读到这个小问题的时候,有多少人打过羽毛球,请举手
    有人知道羽毛球最初的名字吗
    不,我来自发明羽毛球的小镇,羽毛球就是在那里开始的
    遗弃羽毛球最初的名字是普纳,我就是从那里来的,我提到的原因是,嗯,你在
    在这次演讲中,你们也会看到我分享一些我喜欢的城市的图片和图像
    希望能给我要讲的内容增加一些内容我在jfrog工作
    目前我是波斯的开发经理,那个项目,那个
    我们刚刚宣布作为CDF的一部分我写这个演讲的时候我们实际上
    研究拥有保障供应链和开放的理由
    来源,我们在我们在探索发生了什么在
    这是在开源世界中供应链是如何管理的这是其中的一些
    我突然有了想法所以我需要我需要你的帮助
    在这里,我不只是写一个议程,我认为我应该用一个
    这样你们就知道它更具有参与性,所以在这次演讲中,我将分享一些我的经验
    希望我能分享我是如何学习开源软件的
    建立和分发你也会学到一些社区的努力,但是
    我需要你的帮助,使它成为一个真正伟大的演讲,这可以是一个伟大的演讲
    如果你能参加如果你能把这个信息带回来明年下次再来
    为我将要谈到的这些项目贡献力量
    让我们让我们回顾一下我的经历,我来自一个
    我在做Ruby项目的时候,两分钟的构建时间是非常流行的
    我们曾经讨论过他们如何在测试中减少3秒和5秒的时间,最近我实际上是
    构建一个kubernetes平台,名字以KS结尾,任务是
    kubernetes平台能够在你选择的任何云上运行任何云,也可以在本地运行,让我们来看看
    通过我们的旅程,我们将最新版本的kubernetes打包,添加集成和
    它看起来是什么样子看起来是什么样子希望这能给你一个关于你所知道的东西的见解,或者这可能是相似的
    对于你在构建专有软件时使用的东西我们有一些源代码有一些组件
    在kubernetes平台上有一些集成,比如网络和可观察性
    这些都不是社区平台的一部分,所以所有这些都是建立起来的,它们需要你知道的X分钟
    单独建造,真正繁重的任务是在我们开始建造的时候
    这些是需要部署的各种配置
    我停在49的原因是,这是我们在这个基础上构建的构型的数量
    每个平台都要经过一些验收测试其中一些是手动的然后我们习惯
    发布一个可下载的二进制文件或可下载的软件,人们现在可以将其安装在他们选择的云上
    把一些东西放在上下文中每条管道都需要8个小时,加起来就是这样
    花了整整三天的时间来推出一个新版本,然后弄清楚是否出了问题等等
    这就是我们在开发专有软件时的严格要求
    是的,这是一个专门的团队,试图尝试建立每个人都认识的东西,或者至少
    他们可以追溯到他们正在做的事情,每次提交都可以追溯到它来自的系统
    组件构建在集成中失败了我们可以回到组件团队说,嘿,这就是这个
    pr是它向右移动而这个花了3个小时吗
    几个月的努力,这是持续交付的世界,但之后没有投入生产
    它是公开下载的我们的客户过去常常把它下载到他们的平台上,因为它是
    平台级的部署,然后会发现bug,我们过去会做一些整合工作
    往右转,人们过去都是手动通过
    弄清楚每一个东西的来源,这些东西成为了构建每一个开源软件的一部分
    每一个小的库都被用到右上方这是手动的,因为
    没有没有基础设施可以给你所有这些信息没有可靠的信息,其中一些是
    这是安全所必需的,比如识别CVS等等,其中一些是为了法律目的而需要确保的
    我们知道我们并没有侵犯版权,所有这些我们都完成了,我们仍然没有完成,因为有
    一些过程就像一些市场营销需要一些法律文件需要
    如果你在HIPAA或这样的环境中,那么一些签名必须发生,然后是一般可用性
    发生了,所以这是我们的严谨性我知道这是一个牵强的例子或者一个极端的例子,但是这是
    我们投入的严谨性带来了专有软件的持续交付
    现在让我们思考一下这意味着什么,或者我们应该做些什么来达到同样的目标
    开源的水平,我们是否已经达到了开源的水平
    这些是好的实践的原因是你知道你有一个专注的团队,他们都知道彼此
    一个内在的信任,我们今天如何在开源中做到这一点
    我们知道这些是这些是我从参考文献中找到的一些研究数据
    这是目前形成的是开放源码的意思是所有的代码
    这些代码中有78个代码是开放的,是开源的
    几乎所有的项目都依赖于某个地方的开源
    我们已经在各个层面上添加自动化来帮助它们和Linux的发布,我们已经走了很长的路
    项目本身就是一个很好的例子但是它是如何规模化的
    当我们决定使用开源时,我们只是想,哦,它适用于Linux,所以它适用
    肯定也适用于其他项目所以我们只是通过搜索找到顶部要么是下载,要么是
    GitHub星星之类的,然后选择那个或者最常用的是那个
    我们快速识别一个好项目的标准就是像这样的徽章
    如果它是绿色的,或者是萨尔萨舞的水平,或者是一些华丽的东西
    我们去找它,挑一个,或者我们看看GitHub上的星星,就像我
    或者如果有更多的福克斯那就意味着有更多的社区围绕着它但是这就足够了吗
    这是我想到开源的时候想到的开源就是基础设施这是这是一张孟买浦那的照片
    我喜欢在高速公路上骑行,在雨季的时候非常漂亮,因为要下雨了
    下面有云,这很神奇,当基础设施处于良好状态时,它会运行得很好
    就像这样,如果不是这样会发生什么
    但事实并非如此,这是浦那的另一张照片那里有著名的餐馆和很好的地方,它幸存了下来
    过去50年来一直下雨但上周也下了一些雨
    有一两个小时整个系统都窒息了整个系统都窒息了因为没有明显的
    雨水的排水系统这和我们所做的很相似
    看到了,在开源日志上看到4G被黑了,就是这样
    多年来一直为我们工作,现在却陷入了困境,而我们却没有办法保护它
    改善基础设施系统的权利,我的意思是一些解决方案
    很明显,你需要安装正确的正确的排水系统,这样
    这在未来不会发生,我们需要我们需要类似的东西在开源领域,如果我们以类似的方式看待,如果我们
    更深入地研究这个项目,这是我在log4j中看到的,我知道
    人们在做这个,所以这是一个构建工作流有点被禁用
    现在可能他们正在处理一些事情最后几个构建被读取所以这不是真的你知道这是
    这是我的软件所依赖的但这是这是我的信任级别
    我给你们看的那个流氓逮捕客户上周有人认出了他的名字,对吧
    我给你们看的第三件事是萨尔萨舞第三级项目
    这实际上不是一个项目,它是一个没有代码的Ping服务器,由Kelsey演示
    海托华在最近的一次演讲中提到了这一点,但这并不存在,因为他只是
    他是他在演示如何通过放上徽章就能达到萨尔萨舞的等级,就是这样,所以我们
    依赖于这种信任机制是非常脆弱的
    有些更像是强调开源是根深蒂固的
    如果你做了一个网络应用这就是开源软件的数量作为网络应用的一部分
    如果你看看非常有名的图书馆,每个人
    这里知道正确的熊猫人可能知道或使用过它,它显示有1400个评论,但实际工作
    是由四个人完成的你怎么能指望这四个人有情结呢
    嗯,一个成熟的CD系统你不能,他们需要支持
    有一种信任或内在的信任,哦,这是什么,这个人是什么
    做错了,如果我给他们访问权限这个人可以写一个脚本,可以窃取比特币
    最近的一个项目是一个非常受欢迎的原创的事件流库
    维护人员说,嘿,我正在寻求帮助,也许我应该相信他们,他们能做什么,他们能做错什么
    对,这就是如果你把信任放在
    这些人不应该遭受这样的灾难这是另一张洪水发生的照片
    班加罗尔,我是我,我不是我这不是在批评创造
    基础设施展示了两者的相似之处这是建在湖上的豪华住宅
    这是开垦的土地,这是在三天的降雨之后发生的事情,人们不得不通过救援
    船之类的东西这就是我们的软件正在发生的事情
    把城市的钥匙交给那些不知道如何管理基础设施的人然后我们就变成这样了
    这是我想这是在我们今天的演讲中最常用的幻灯片但是依赖性很小
    我们盲目使用的依赖如果你在NPM中运行一个hello world应用看起来是有的
    大约有一千多个依赖关系伴随着它而来我们没有注意到这些,这只是
    第一级依赖还有传递依赖前几天我在评估的时候
    为什么我的应用程序使用openssl,我发现openssl是必需的
    这是rust的异步库Tokyo所要求的
    我只选了东京,我从来没有注意过,哦,现在openssl是
    这是必需的,在这种情况下很重要,因为openssl在编译时也有困难
    不同的操作系统这是我们想要做的依赖关系是如此的隐藏,以至于我们
    真的真的不知道它们是从哪里来的我们也没有真正关注它们是如何被正确使用的这是
    我想这是一个众所周知的故事,宾夕法尼亚州的一座桥已经垮了,基础设施也垮了
    建筑法案是解决这些问题的动力,所以我们需要,我们需要
    强调改进开源的CD和礼仪
    一般来说,当我们谈论开源时,人们会谈论GitHub,但这里有一项研究进行了比较
    GitHub和其他地方都有开源软件
    每个项目的提交者数量或多或少保持不变
    在2点到10点之间也一样,这不是一个很大的团队,他们做得更多
    在慈善的基础上,他们做的是副业,这不是他们的全职工作,但他们仍在努力
    为了支持它,我们需要投入更多的人力和精力
    所以说到《末日与黑暗》我们能做些什么来修复CD
    我们的开源礼仪,肯定有一些我们可以做的事情,我想分享其中的一些
    在大流行之前甚至在大流行期间一直在进行的工作
    在jfrog,我们相信在未来我们会有流动软件
    液体软件,它是自动更新和持续的在那种方式下,我们需要一个
    供应链是尽可能自动化的100个自动化的
    可能会移除我经常展示的人体部分
    它需要值得信赖,不能依赖于徽章和星星之类的东西
    它需要可靠,我需要知道我使用的每个依赖项的每一个细节
    这个系统不能宕机,不能出现npm或Us East 1宕机,然后停止运行的情况
    它不仅仅是随着开发不断地开发,而是不断地发布
    在过去的几年里人们更加重视保护
    供应链,有一些工具可以让你编写软件材料清单还有政府
    强调监管如何提高网络安全礼仪和一些
    这是监管文献所要求的,这样实践才会开始流动,但这不会
    所有的监管都将在一个更高的层面上运作,它不会像我们希望的那样快速地进入实践
    所以我们这边需要采取一些行动,这是最
    谈到了围绕软件供应链的研究它做的第一件事就是规划好了土地
    来展示以色列软件的薄弱环节
    对,这给了我们一些东西来研究我们的工具是否有能力处理所有这些
    如果你把这个和我原来的CD流比较,这个要少得多
    很复杂,在现实生活中,你可能需要处理更多的攻击向量,但这是一个
    很好的参考,所以我们会用这个参考来理解这个领域发生了什么
    我们需要做一些工作来签署这些东西
    对你的Docker镜像进行签名,这些镜像进入到你的kubernetes部署公证处
    这个项目现在已经进入了第二阶段,这个项目叫做rotary V2,基本上就是这个想法
    是为了确保当你把任何图像投入生产时,它已经是
    签名,不能被篡改等等所以它允许你持续交付,因为a
    很多签名验证过程现在都是自动化的这就是我们要解决的问题
    在供应链的最后,包装在哪里,抱歉,是图片
    都被转移到你的kubernetes集群了,这很好,这是一个好的开始
    还有一个叫做six store的项目,它尝试做同样的事情,嗯,签名,但是种类更多
    生态系统现在你可以签署你的Pi Pi包现在你可以签署你的ruby宝石所以你可以签署你的Java包和
    在右边,你可以,你可以把它一直通过你的供应链,进入kubernetes
    所以如果你还没有看过这些项目,那就去看看,至少找出你可以如何使用它们
    这个六店和下面的项目做得更像我
    说他们签了字,你可以在供应链的末端和开始的时候验证所有这些
    开始消费它们,你可以验证,嘿,我想下载的东西现在已经签名了
    知道它来自某个开发者就足够了,在这之间有很多需要的东西
    通过tekton链解决的是另一个项目
    允许您将它用于kubernetes部署,而不是一直构建
    供应链同样的事情试图解决供应链的一端,我们
    需要,我们需要,我们需要知道我们的生产需要什么,嗯
    对,当我们观察地形时我们发现
    我们需要一些东西可以让你更好地建立这些依赖关系,这就是我们开始的时候
    我们把它叫做波斯波斯所做的就是让你从源头开始建造
    你可以选择任何开源项目,并从源代码中构建它
    知道它是如何构建的你可以验证它是按照你想要的方式构建的它也有多重功能
    哦,是的,波斯试图解决或帮助解决这种情况
    供应链需要帮助,从源头建立,验证和批准
    批准你将要在生产中使用的所有二进制文件
    波斯做的另一件事是它不相信世界统一的建筑体系它有一个
    内置机制,在多台机器上运行相同的构建,并在网络中随机选择
    点对点网络,所以这些版本刚刚发布
    发送到不同的随机节点,当他们建立,然后他们验证他们得到了相同的结果,只有那些
    构建实际上是提交给网络的,这样任何人都可以下载它们
    二进制,所以这是类似的东西,嗯,人们正在做,嗯,以确保
    没有像太阳风事件那样的单点攻击所以这是,这是
    一些他们正在投资的东西波斯也有突出的log
    你可以编写自动化程序来找出某个东西从哪里来它不仅仅是星星告诉你的
    这个二进制文件是由这个gitsha构建的这些是构建它的步骤
    最终的结果,然后它然后它被打上了漏洞的烙印
    甚至是当时已知的漏洞你可以问这些问题这允许你做什么
    把自动化写在上面,让我们真正做出发布决定,这样你就不用等了
    我知道必须有人去尽职调查你是否知道这个这个二进制是我可以使用的东西
    还有还有更多的项目我想谈谈,因为正如我所展示的,这还不够
    我们有这个这个简单的供应链覆盖了波斯
    工作顺利需要,需要建立,需要有可复制的账单,因为只有可复制的账单才能被验证
    互相竞争,所以有一个项目,我想是谷歌开源团队在做的
    可复制的构建这是一个繁重的任务,因为人们有很多不同的方式可以实现
    有时会得到相同的结果或者他们有非常复杂的方法来完成构建,在此期间会做很多事情
    其他的东西,谷歌团队想要弄清楚的是你可以推导出的一个脚本是什么
    我们忽略的另一件事是
    GitHub的星星和萨尔萨徽章它们不会告诉你你所在的库实时发生了什么
    比如说你下载了一个阿尔卑斯图像你面临的漏洞是什么
    这个漏洞在您的开发阶段或生产中存在吗?您将如何处理它
    有更多有更多的事情发生在将漏洞集成到CD中
    管道本身,珀西会做这个,这是另一个项目
    当你开始下载的时候,你可以在哪里找到漏洞,而go团队实际上是什么
    试图将其整合到一个平台上,go团队试图解决这个问题
    一个生态系统本身的问题团队试图为更多的生态系统解决问题
    不仅仅是golang,这是一个开始,所以这是我们需要强调的地方
    我们来回顾一下,我分享了一些项目,让我们
    解决这些攻击向量中的一些它们不会是东西它们不是一个完整的列表,还有更多
    需要在这里完成的事情是需要在此基础上建立的自动化这样你就可以有一个
    持续交付管道看起来更连续,而不是像现在这样破碎
    正如你所看到的仍然有一些差距我们如何如何确保
    来自源代码控制系统的源代码是安全的
    我们如何确保源代码控制系统不会受到损害,如果有一些未解决的问题
    这是其他团队正在研究的,我们需要更多的工具
    覆盖整个供应链,所以我想总结一下
    一个行动号召,你应该回去看看你是否有一个好的持续交付计划
    你用过我提到的工具吗,如果你没有,你用过吗
    找到任何机会来做这件事让我们让我们作为一个社区来做这件事
    从一开始我们就发现人们在做这些一次性的解决方案,有些对他们有用,有些对他们有用
    但这是开源的,我们需要共同投资,并确保我们正在尝试
    同样的事情,我们建立了同样的信任机制,而不是,而不是a银行试图
    B公司试图发明他们自己的权利和行动的时间现在是供应链
    软件对软件的供应链受到攻击,我们现在就得行动
    这也是一个祝愿大家排灯节快乐的机会
    我们在这周庆祝排灯节,今天正好是印度商人的日子,他们
    他们打开了新的书籍,开始了新的项目,所以如果你在等待合适的时机,今天是一个非常好的时机
    今天是开始为这些项目做贡献的吉日谢谢你的好问题实际上x射线非常
    善于浏览注册表或存储库并识别
    存在什么样的漏洞漏洞实际上做不到的是它
    它不会告诉你软件是如何构建的谁构建的它从哪里来的它是否建立在多个
    系统,不管它来不来
    在某种程度上,但是它非常关注脆弱性,是的,它非常
    是的,更多地关注脆弱性
    是的是的
    好问题,所以问题是为什么你不直接用x光而不是我们只是
    而不是波斯,所以答案是x射线也适用于你
    专有系统,它作为一个产品工作当你配置好它的所有东西
    从你专有的角度来看很重要我们要说的是我们需要x光的礼仪
    这里的每个人都可以使用我们不能让我们不能让那些购买了x射线的公司为他们
    开源,单独做,尝试一次性的解决方案,我们说的是我们需要的
    我们都可以信任的东西我们都可以以同样的方式信任
    Percy app提供了这个,因为你看到的是和我看到的一样的省日志
    做出同样的决定,因为来源日志也告诉我,我的日志4J具有可用性和新的
    版本没有这个漏洞,所以我发布它是可以的,你有相同的信息,这样我们就可以更好地控制我们如何处理
    有了开源的权利,为了开源,我们认为解决方案必须是开源的,它不能依赖于
    公司能够购买的工具有一些公司做一些关键的事情但是他们没有能力
    就像我说的投资,甚至是锁4G维护,他们没有x射线,而我们有
    试图通过各种方式来提供这些但他们没有专业知识
    在Jay的Elan中你会看到他们所有的
    传递依赖我们将有能力看到是,因为我们会
    构建log4j,然后我们将构建依赖项和依赖独立性
    是的,所以如果我们能像有效的手掌和我们是什么
    我们刚刚发布的是第一层,然后你会看到嵌套结构也出来了
    所以你可以问关于嵌套结构的问题我用的是openssl吗
    我们今天不能回答这个问题但是你可以你可以问波斯你就知道了
    还有问题吗?
    所有这些文件也都随开源库或
    应用程序,如果你使用策略
    对那些不太传统的人来说,但是你想说
    作为特权运行的边缘路由配置有50个会话
    是的,所以问题是我们是否在考虑构型和工件
    难道传统的二进制文件不对吗?在jfrog我们用二进制文件这个词
    为了涵盖所有的所有的任何类型的软件投入生产,所以我们
    将配置文件看作是需要在那里盖章和验证的二进制文件的等价物
    需要在多台机器上运行,以确保它也产生相同的结果
    是的是的
    所以我们从波斯开始,从Docker图像和Java开始
    构建,但我们正在扩展到其他生态系统,进入二进制文件,甚至实现这些类型
    我们的政策将会成为波斯的一部分
    而不是等到它已经出版,我认为我认为
    问题是,当我们试图构建而不是发布时,应该抓住这些问题,我同意
    完全同意你的观点,当我们开始摄入它的时候,大部分应该被发现,但是我们没有
    工具允许它允许深入分析和我们在这里所说的
    对的,对的,对的,是的,不完全是,那是那是
    我们看到其中一个生态系统确实有成熟的工具,比如Maven之类的
    你提到凯拉他们确实有一些工具可以让你更深入地了解
    没有一个好的单一平台可以让你回答这个问题
    好的,谢谢,谢谢