演示-多云安全软件供应链
谷歌和JFrog将演示如何在跨越本地和公共云的混合配置中安全地加速docker容器映像的部署。
在这个演示中,您将学习如何使用谷歌Cloud Build初始化构建,使用JFrog Artifactory管理二进制文件,并使用JFrog Xray扫描安全漏洞和许可证合规性。
然后使用谷歌Cloud Deploy通过测试、登台和生产来部署生成的容器。
视频记录
大家下午好。我叫Shankar Hariharan,是JFrog的高级产品经理。我是这里产品合作小组的负责人。今天我带了JFrog的Mitali和谷歌的Victor。米塔利和维克多,能自我介绍一下吗?
你好,每个人。我是Matali Bisht。我是JFrog的一名软件工程师,作为工程团队的合作伙伴,致力于不同的社区相关项目。谢谢你!
大家好。我叫维克多·萨尔维。我是出站产品经理。我在谷歌Cloud工作,特别是在我们的DevOps产品套件中。
谢谢你们,维克多和米塔利。首先,热烈欢迎各位参加DevOps云计算日的会议。我们很高兴你能来。今天我们将从JFrog和谷歌云平台开始讨论DevOps的软件安全。
我们还会做一个关于Artifactory和Xray的演示,这是我们在JFrog平台上的旗舰产品。hth华体会最新官方网站对于那些不了解这些产品的新手,Artifactory是我们的二进制存储库管理解决方案,Xray是我们的通用软件组hth华体会最新官方网站合分析解决方案。我们还将更详细地回顾它们。
简单介绍一下JFrog的背景,我们成立于2008年。目前在全球11个办事处拥有1000多名员工。我们是一家真正的混合型公司,拥有跨多个云的SaaS和自托管产品。
我们是一个值得信赖的解决方案,超过6000个客户在不同的垂直领域。正如你所看到的,JFrog为大多数财富100强公司提供了支持,包括Netflix、HBO、谷歌、Twitter、VMware等公司的软件更新,并以支持世界级服务的速度轻松管理和交付他们的软件。
我相信你们之前都见过DevOps的这个无限循环。在JFrog,我们称自己为一家流动软件公司。我们是一个端到端的DevSecOps平台,用于支持所有的软件更新。我们确实建立了一个平台,允许你从代码到云。
现在,让我们花点时间来看看JFrog平台是如何为DevOps提供自由选择的。如果你是一家软件公司,在你的组织中有许多团队,你的开发人员正在构建应用程序,使用不同的技术堆栈,比如Java、Node.js、Docker等等。
现在,您可以清楚地看到,在DevSecOps生命周期中,您需要对所有需求进行优化和标准化。现在,这些要求是什么?这实际上可以围绕……如何存储工件和依赖项。如何保护二进制文件?如何分发二进制文件、编排管道、自动化等等。
当你谈到所有这些不同的事情时,你需要在DevSecOps生命周期中保持一致性。除了一致性之外,您还需要一个统一的平台,为您提供横跨DevSecOps生命周期的单一视图窗格。这就是JFrog平台真正的亮点所在。正如你在这里看到的,JFrog平台是一个端到端的DevSecOps平台,可扩展,完全通用,并通过丰富的集成合作伙伴生态系统提供持续的安全性。
现在,在我们进入参考架构和演示之前,请允许我向您介绍JFrog Artifactory和JFrog Xray。现在JFrog Artifactory被认为是所有二进制文件和依赖项的唯一真实源。它是JFrog平台的核心,它真正采取了一种开放的方法,并为您提供了自由选择,以集成流行的CI/CD,以及您的生态系统中的监控工具。
此外,它还用于代理远程存储库。它将对抗市场上现有的所有CI工具,我们已经与几乎所有这些工具进行了集成。您可以使用Articafactory来真正管理跨公司、业务部门或全球组织的软件发布的构建构件。现在Artifactory是二进制存储库管理解决方案的领导者。
Artifactory是通用的。它集成了27个不同的包管理器。它提供了完整的记录系统,这意味着它为您提供了所有受支持的包格式的元数据。它还提供了一种基于校验和的存储,这本质上意味着,如果在不同的存储库中有相同的二进制文件,那么就真正优化了存储。它提供了一套丰富的自动化工具,主要使用REST api、cli和插件。正如我前面所说,它与用于CI/CD的自动化工具进行了丰富的集成。
一旦在Artifactory中有了这些工件,您还想了解与这些工件相关的安全性和遵从性风险,以及如何减轻它们?如你所知,现在编写的80%到90%的软件是真正的开源软件,它暴露出安全漏洞、许可证遵从性问题和性能问题。
这张幻灯片真让人大开眼界。正如你在去年看到的,供应链攻击的数量有所增加。去年增长了650%。我们知道,在我们想看看这是如何真正影响组织的安全之前,我们想真正定义什么是软件供应链攻击。这基本上是一种技术,黑客将恶意代码或组件插入受信任的软件或硬件中。
以下是所列事件的时间轴,但更重要的是,最近发生了更多事件,并导致了软件供应链攻击。最近的一些事件还包括2017年的Equifax事件,其中Java对apache的依赖导致大约1.4亿人的数据泄漏。
同样,在2008年,思科被自由软件基金会起诉,因为他们在一些产品中使用了GPL许可证。hth华体会最新官方网站他们因此遭受了很多损失。这导致我们的关键问题是,了解哪些软件感染了漏洞是很重要的。我在使用它们吗?如何在不影响开发速度的情况下修复它们?这正是x射线帮助你回答的问题。它是一个自动化的软件安全解决方案,适用于从代码创建到发布和生产的整个软件生命周期。
它与Artifactory进行了深度的本地集成,并提供了单一窗格的玻璃视图。它还有助于深入了解每个构建包的所有依赖项。如果你正在使用Docker,它将帮助你递归地深入扫描所有Docker映像以及层。它还提供全面的漏洞情报,以及不同来源的数据库,包括我们的x射线产品中使用的vulndb。在介绍了Artifactory和Xray之后,我认为现在是时候让Victor来介绍JFrog谷歌Cloud DevOps参考架构了,然后是Mitali的演示。维克多交给你了。
嘿,谢了,尚卡尔。正如Shankar所指出的,真正令人兴奋的事情之一是,当你在DevOps工具链中使用你喜欢的组件时,你可以在Artifactory和JFrog环境中使用,也可以在谷歌Cloud中使用。今天,我们将向您演示一个混合用例场景,其中我们使用谷歌云组件,但我们也在这个工作流中使用JFrog Artifactory和Xray。从左下角开始,你会注意到我们只是让开发人员开始做PR或提交。这个基于git的操作将触发一个名为Cloud build的产品中的构建。Cloud Build是一个灵活的DevOps自动化平台。它允许您在谨慎的容器中运行步骤。第一组步骤基本上会生成一个npm构建。该构建将被传送到JFrog Artifactory。
从那里,它还将被x光扫描。我们会在构建过程中看到一些漏洞的结果。下一个云构建将继续容器化我们实际构建的应用程序。Mitali将在一分钟内更详细地介绍应用程序,并向您展示我们正在构建的内容。它是本演示的示例应用程序。一旦我们被容器化,我们还将把它移回Artifactory存储在Docker存储库中。在这一点上,我们将进行二次扫描,以确保底层操作系统和容器本身没有引入的漏洞。我们会看到两种不同的扫描结果。接下来我们要做的就是触发释放。该发布一经触发将流入云部署,谷歌云部署是一个新产品。
你可能听说过Cloud Build, Cloud Deploy是一个新产品。基本上,它的目的是为谷歌Kubernetes Engine或GKE提供一个完全管理的持续交付平台。该产品允许您定义一个候选版本,并在发布到生产的过程中,通过任意数量的环境来推进该候选版本。您还可以在过程中的任何步骤插入批准步骤。例如,在这种情况下,我们将有三个不同的环境,我们将在上面看到,测试,阶段和刺激。我们将在生产的过程中通过这些环境。在最后一个步骤中,当我们接近生产时,我们将有机会看到它是如何使用审批门的,所以这个特定的步骤需要审批。我们在里面也会看到。我想现在我要把它交给Mitali,他将带领我们完成实际的演示,我们将先从一些信息开始。米塔利谢谢。
谢谢你,维克多。在这个演示中,我将展示一个云构建文件,它是云构建YAML,它被用来从那个映像进行JFrog构建,并将它推到Artifactory。在云构建YAML中,我们使用的是JFrog CLI。JFrog CLI是一个非常强大的工具,可以与Artifactory和Xray一起工作,因为它有所有的内置命令。我们将在这里使用的各种命令首先用于配置Artifactory服务器。然后我们将使用JFrog rt npm install来验证应用程序的依赖关系。然后我们将使用npm publish来打包和部署应用程序。最后是build publish,在那里我们将把build-info推送到Artifactory,这可以进一步用于各种CI服务器,如Jenkins和所有。最后,我们将对该应用程序进行Docker构建,以容器化并将Docker映像推到Artifactory。为此,我们需要在Artifactory中使用两个reppos,一个用于放置Docker reppos,另一个用于放置所有依赖项和应用本身的npm reppos。
此外,对于x射线,我们需要配置手表和策略。让我们回到JFrog平台。这是一个SaaS平台。这被称为JPD,意思是JFrog平台部署。在这里你可以看到所有的JFrog产品在一个地方,Artifachth华体会最新官方网站tory分销管道和x射线。对于演示视图,我已经为Docker和npm创建了repo。对于npm存储库,我们有三个存储库,分别是本地的、远程的和虚拟的。
如果我使用Cloud Days,我在这里有一个Cloud Days本地存储库,本地存储库实际上是你实例的本地存储库,所有应用程序实际上都部署在那里。Cloud Days Docker将用于将你的镜像,你的应用程序的Docker镜像放到Cloud Days Docker本地存储库中。就远程存储库而言,当您希望使用远程URL时,远程存储库非常有用。我已经建立了云天远程回购。最后,我们会有一个虚拟回购。虚拟回购,您可以将其称为组回购,用于对多个本地和远程存储库进行分组。如果我看到我的虚拟回购,我进入它,我可以看到我有Cloud Days本地和Cloud Days远程在里面。现在,当我设置了我的存储库时,我需要让Xray知道这些存储库需要监视漏洞。
因此,我们可以看到所有这些东西。我们可以为x光片索引它们。它们已经被索引了,所以如果你看到Docker, Cloud Days Docker, Cloud Days local和[听不清00:15:56]正在为x射线索引,以监视漏洞。为了定义您希望看到的漏洞是什么,是高、低还是中等,以及您希望采取什么行动,我们必须设置什么是策略。策略基本上是一组规则,您可以定义这些规则来显示您正在寻找的漏洞类型或严重级别。这里我说的是Cloud Days高策略,对于手表也是如此,所以策略是一个索引列表,直到它们应用到某个东西上。手表就是我们使用这些政策的地方。在云天手表,我说过,我使用的政策云天高。
另外,如果你看到这里的资源,我正在2022世界杯阿根廷预选赛赛程使用我的构建,也就是我的云构建然后构建扫描它。正如维克多提到的,我们正在进行两次扫描。一个是我们的构建被扫描了我们的存储库,也就是Docker回购也被扫描了。如果你想采取任何行动,假设如果你想,让构建失败,如果有任何严重情况或者如果你想停止下载,你都可以在你的手表中定义。现在回到应用程序,我们有一个非常简单的应用程序。
这是一个npm应用程序,一个单页应用程序,它显示了GCP和谷歌云和JFrog的标志。其中我有cloudbuild。Yaml和clouddeploy。Yaml,云构建。如图所示,我们有不同的步骤来配置Artifactory。这里我使用的是GCR image,也就是谷歌云注册表。我们已经在那里推送了npm JFrog CLI Docker镜像,对于每一步,它都会旋转自己的Docker容器并运行这些步骤。所以定义我们想要处理的目录是很重要的。所以这里我们使用JFrog CLI Docker镜像来配置Artifactory,并执行我在这里定义的所有步骤。这里还要注意的一点是,出于安全考虑,我们在谷歌Cloud中的秘密管理器中限制了所有这些秘密。为了访问Artifactory,我们需要访问令牌。该访问令牌在Secret Manager中定义,并在这里引用。 Once, if I trigger… If I make any changes in this file and do a get push, I have a trigger in Cloud Build.
我已经在Cloud Build中触发了这个触发器,它实际上运行并开始旋转所有这些步骤。如果我去看看我的仪表板,我最近运行了一次,最后一次运行显示了所有这些步骤,它在云构建中做了什么。一旦这个云构建完成,它会做什么,它会在我们的Artifactory中创建一个npm构建,也会创建这个应用的Docker映像。让我们回到我们的JFrog平台来查看构建的结果。首先浏览这些包,我们在寻找workshop app,也就是我们在这里构建的npm包。如果我输入。这是研讨会应用程序n包。我们在这里看到的第一个版本,已经部署了。我点击了这个版本。我可以看到README文件,它实际上是在这里从GitHub上拉出来的,然后我可以看到与此相关的构建。构建是两个,已经在这里定义了。
我们可以看到与之相关的存储库,所以我们创建了Cloud Days本地,它与这个构建相关联,我们可以看到与之相关的x射线数据。我们有一次违反了驾照。所以Xray显示了漏洞和许可证违规。我们可以在这里看到它的细节,以及可以做些什么来补救。如果你转到这里的子代,它会给你一个很好的依赖视图。现在让我们去看看Docker图像。我们把推送的Docker映像称为npm app。
这就是我们如何回到包和npm应用程序。所以这是今天与云构建一起推出的最新内容。如果你看到相关的存储库,它是我们创建的基于can的Docker。现在进一步深入Docker映像的版本。我们可以再次看到存储库,并回到他们的x射线数据。我们可以看到与这个特定映像相关的所有漏洞。现在我们在这里找到了13个漏洞,如果我选择其中任何一个,我都可以看到非常漂亮的数据视图,它说了什么。它显示了严重程度,它显示了CVSS分数。此外,它还向您展示了最重要的事情是修复版本。如果您真正更新组件,大多数漏洞都会得到修复。这里它说2.2 0.5-r4是安全版本。
现在它的耗电量比这个还少。此外,在摘要中,您可以看到此漏洞在谈论什么。还有,哪些版本是易受攻击的。尚卡尔谈到x射线可以扫描你的图像或扫描你的软件,它会进行深度递归扫描。它会扫描Docker映像的每一层。它扫描你的软件或任何其他东西的每一个JAR。这个影响路径实际上向您显示了这个漏洞的位置或它位于哪个特定的依赖项中。此外,它还为您提供了一些参考,以进一步了解该漏洞。我想在这里强调一个[绿色花00:22:55]的东西。任何这样标记的CV,都有关于严重程度的更丰富的信息。
在JFrog中,我们有自己的研究团队,他们每天都在分析每一个严重程度,并为此提供良好的补救措施,看看它们是否真的那么严重、中等、高。如果你看到外部数据库提供的严重程度是关键的,但是当JFrog团队手动分析它时,它发现它是中等的,所以我们可以优先考虑我们想要修复它的时候。此外,您可能想进入JFrog研究严重性原因,看看它解释了关于严重性及其路径的信息。
来源咨询,它也给你再次版本和描述和影响部分。现在,因为我们已经看到了这些漏洞,如果你修复了任何一个版本,并从action中推送一个新的Docker映像,你可以再次扫描违规,甚至可以从中分配自定义问题。此外,您可以从这里将所有这些漏洞的数据导出到Excel文件中。这为你提供了非常方便的工具。最后但并非最不重要的,我们想看到的是我们已经创建的npm build。如果我输入并构建了一个npm构建,那么我到这里……最近在这个云构建中,我创建了第二个构建,我已经拉出了它。我点击第二个版本,我可以看到,workshop/app, npm app驻留在这里。它给出了它所拥有的藏物的数量。它给出了它的依赖数。与此同时,它还向您展示了此构建的x射线数据,因为这也扫描了漏洞,并向您显示了所有安全和许可违规。
它会向您显示它发现的任何许可证和未知的许可证。最后它会给你buildinfo。JSON,我们可以用它来进行持续集成和交付。这就是Artifactory x射线显示的所有组件。一旦构建完成,它实际上要做的是在云部署中创建一个版本,对于云部署,我将把更多的内容交给Victor来解释。
好吧。米塔利谢谢,。正如我所提到的,云部署是GKE的一个新产品,主要专注于持续交付。我们要做的第一件事是了解如何配置云部署发布和管道。这是管道配置。在上面,你可以看到这是一种KRM风格的格式,所以这是一种接近持续交付的声明性方式。你可以在第7行到第10行看到。你可以看到我们定义的各个阶段。这些都对应于我们之前讲过的测试阶段和刺激环境。这里的目标在下面有进一步的定义。 For example, starting with line 13, you can see that the test target is being defined. You can give a description, but more critically on lines, 18 and 19 you can define the underlying Google Kubernetes Engine cluster for which that target corresponds.
您可以看到,项目定义了区域、位置、集群运行的位置,以及集群的名称。稍后我们将在GKE中看到这些集群,但这只是提供了一些映射。现在,再往下看,您将看到登台集群,这是有意义的登台目标,底部的最后一行定义了生产集群。现在请注意第36行,我们基本上可以以声明的方式定义批准需求。在这种情况下,通过将true标记添加到所需的审批中,我们基本上是在说对于特定的目标,在执行到该环境之前必须有一个手动审批门。好吧。让我们来看看云部署以及它是如何工作的。在这里的云部署中,您将看到这三个环境被标记在那里,测试,登台和管道风格的刺激。
你还会注意到,在staging和prod之间没有任何等待的选项。如果我们有该产品的等待批准,至少我们会看到它们在那里排队,但现在我们没有任何等待。如果我们想看一下发布细节,我们可以点击这个。云部署中的版本基本上是水合配置和对工件的引用的总和,即为该特定版本定义的映像。在这个特殊的例子中,您可以看到我们有一些注释。例如,与这个特定版本相关联的提交消息或提交SHA。我们可以单击进入artifacts选项卡。在这里,我们可以看到发布中发生的事情的内部情况。你可以看到这里的构建工件,这是Mitali推送到Docker repo的映像。
你还可以在渲染源部分看到,这包含了预渲染的Kubernetes配置,预渲染的清单。在下面最底部的部分是目标工件,它包含各种呈现的清单以及其他信息,如管道细节和所有东西,因此我们可以根据需要重新创建这些版本。您会注意到这里表示了test、staging和prod,这是因为在创建发布版本时,我们实际上同时快照并呈现了所有的环境清单。所以我们渲染所有的东西,快照并存储它。好的。让我们回到管道上看一看。
现在,当然我们有CLI和其他形式的API风格的方法,但在UI中,你可以促进。我们27分钟前才发布的。我们现在要推广它。当然,我们想知道我们在推广什么。什么是过去的,什么将被取代。我可以进入manifest diff,看一看,这里改变的主要是我的形象,如果我满意,我可以点击下面的提升。我们来做一下。
您可以看到,推出已经开始。一旦它完全启动,我们将在这里看到一个更新,表明它是成功的还是失败的。现在,如果我们单击视图最新的rollout,我想我们也能看到日志。渲染已经完成了。这是发行版创建的一部分,但我们也可以看看实际的推出框。现在我们要去看一下,看看它是否成功地完成了。你可以看到驱动是成功的,我们将返回并在主UI中确认。好的。所以驱动发生了。现在,下一步是将其推广到生产中。 We’re going to go through the same type of process. We’ll do a promotion. We can compare what was there, what’s going to come. We can also diff the manifest again to take a look at that. If we’re satisfied with everything and it all looks good, we can go ahead and click promote.
在这种情况下,有趣的是我们设置了一个审批门。这不会自动启动。我们首先需要手动批准这一点。在这个特殊的例子中,我是一个超级用户,但是你可以想象有一个运营团队,这个团队有特殊的权限来做这些审批。进入审批队列,我可以看到我有一个审批队列。您可以再次看到类似的信息。现在有什么。我要批准的。我也可以再区分一下舱单。基本上在底部,它让我有机会批准或拒绝推出。 I’m going to go ahead and improve it. Now, again, it’s letting me know that I’ve got nothing queued up within my approval queue, and I’m back at the main pipeline view, watching the actuation take place. That’s cloud deploy. Hopefully it gives you a sense for how we would do continuous delivery out to GKE in a safe and controlled fashion. Back to you, Shankar.
谢谢,维克多。希望你们对此感到兴奋。我们了解了如何将Artifactory用作所有购买和依赖关系的单一真相来源,以及Xray如何真正允许您快速查看软件安全问题。看看你如何划分优先级,以及如何有效地解决它们。这让安全团队更加安心,让开发人员能够更快地开发软件。如果你很兴奋,想要体验JFrog和谷歌Cloud的强大,你现在可以在谷歌Cloud上获得职业团队30天的免费试用。按照说明操作。去谷歌市场在给定的链接,选择JFrog云专业团队,并点击订阅。您应该已经准备好使用JFrog平台跑步了。希望你们都能体验到这种力量。 Thanks for attending this session. We will now open it up for Q and A. Thank you.