演示-行动比语言更响亮
在这个实践环节中,我们将带您通过使用JFrog和AWS服务来保护静态和传输中的工件和周围生态系统。
您将学习并看到我们在Amazon Elastic Kubernetes Service (EKS)上实现软件组合分析(SCA)、软件物料清单(SBOM)、AWS专用链接、映像安全、容器运行时安全、基础设施安全、网络安全等。
视频记录
你好。你好,早上好。晚上好。希望你们都平安。我是Anuj Sharma,是Amazon Web Services的高级容器专家解决方案架构师。我在AWS工作了五年半多,但在基础设施和应用程序开发方面拥有超过16年的行业经验。从我的职业生涯开始,我就担任过多种职务,包括软件开发人员、架构师、工程经理和产品经理,以及从金融服务到零售的各种行业。期待在今天的会议结束时与大家互动。
今天,我们将向你展示这三种不同的手的演示。第一个示例将演示如何在VPC和JFrog SaaS实例之间建立私有链接连接,以便在从JFrog SaaS提取工件时不会通过公共互联网。第二篇文章将介绍在EKS集群上使用审计日志创建检测到的控件。第三篇将演示容器运行时发射安全管理的各个方面。今天我们要给大家展示一个有趣的阵容。我们现在就开始吧。
我们这边也欢迎。我的名字是SvenRuppert。我是JFrog的开发者倡导者,专门研究DevSecOps这个主题。所以我的背景是在JVM领域做了近20年的咨询,所以与Java相关的项目,主要是遗留项目。如果你想了解更多关于我的历史,请查看我的LinkedIn个人资料,但如果你想知道我现在在做什么,那么我建议你查看我的YouTube频道。您将看到一堆围绕JVM和生态系统的户外风格的IT和安全相关视频。所以请随意查看。如果你想联系我,可以选择LinkedIn, Twitter, YouTube,任何社交媒体,随时联系我。现在我们要开始了。
好吧。例如,我们今天要讨论的是AWS上的JFrog DevSecOps平台,以及什么是JFrog平台。所以JFrog平台是整个DevSecOps环境的平台。这意味着我们有一个存储二进制文件的地方,Artifactory。我们有一个地方,我们正在扫描所有的漏洞。它叫做x射线。我们有管道作为持续集成环境。我们连接到不同的身份验证授权服务。我们有分布,这是把边界推到边缘的方法。这就是JFrog平台。 And we have a free version for this, for example, the free tier and in the free tier, you will find the things we are focusing today is Artifactory and Xray. So Artifactory is a binary manager and Xray is the vulnerability scanner. And what is exactly Artifactory?
好吧。Artifactory。Artifactory是二进制生命周期的核心,因为它是存储所有二进制文件的地方,你可以用不同的方式存放你自己的东西,你可以在这里推送东西,从外部收集东西,在不同部门之间共享东西等等。所以Artifactory是一个依赖管理的管理器,它不仅能够理解二进制文件本身,还能够理解围绕它的整个元数据。我们有不同类型的存储库,从本地存储库,移除和虚拟存储库,分布式存储库,等等。但我们将在几分钟内讨论这个问题。如果你更多地谈论Artifactory本身,但总的来说,Artifactory是一个存储和管理二进制文件的地方,它知道二进制文件周围的所有元数据[听不清00:04:07]。
今天我想强调的另一个组成部分是x射线。Xray是一个漏洞扫描器,它与Artifactory紧密耦合,因为如果我们有这个地方,所有的二进制文件都在这里,我们有所有的元数据,那么它就是一个开始扫描漏洞的完美地方。这是通过x射线完成的。Xray是整个DevSecOps平台的一部分,Xray也可以在免费层使用。因此,如果你想开始并检查它,注册免费层,然后你可以使用Artifactory和Xray,我会向你展示所有你需要在开始时进行第一次扫描的小步骤,如何连接到IDE,如何与存储库集成等等。
今天,我想使用Oracle的一个开源项目,它可以在GitHub上获得。这是Helidon项目。Helidon是一种实现rest服务的轻量级方式,它包含了我今天想要作为示例的所有内容,向您展示开发,安全,DevSecOps等所有不同角度。所以这意味着我们有一个核心Java的微服务,我们将提供一个小的rest服务。我们会用Docker等等来包装它。我们将扫描它的漏洞和许多其他东西,Helidon只是我们可以免费使用的源代码项目。所以如果你想了解更多关于Helidon的信息,请查看Helidon项目的URL,或者去GitHub,你会在那里找到一切。
现在,如果你是第一次编译[听不清00:05:45],我们正在创建二进制文件。我们需要这个地方来存储二进制文件,这是在Artifactory内部。我想给你们看的地方是本地仓库。本地存储库是Artifactory内部的一个地方,您将在其中部署内容。至于如何创建它,你将进入管理页面。然后你要创建,进入存储库页面,选择本地存储库并创建一个。选择要存储的类型(例如Maven或Docker或其他类型)之后,您必须为Artifactory实例赋予它唯一的名称。如果你想用x射线扫描所有东西,你必须提供信息,这是我们绝对想要做的,你必须选择复选框,这个存储库的内容将显示在里面。这是一个web UI,所以允许内容浏览。就是这样。 And then just click create.
如果你在编码,你不仅要自己创建所有东西,而且还要处理依赖关系,因为你想要已有的东西,开源库等等。为此,您需要远程存储库。远程存储库是连接到外部世界、本地集线器、Maven Central或任何远程存储库的虚拟代理。Artifactory内部对应的表示是本地远程存储库。那么如何创建远程存储库呢?这很简单。再次进入管理页面,进入存储库,选择创建远程存储库。选择要创建的远程存储库类型。你需要URL,可能需要身份验证或授权,比如用户密码,令牌等等。同样,不要忘记使用这两个复选框。 One is activate Xrays or that all content will be scanned. And the other one is that you want to have it shown inside the UI.
没有人想在一个项目中处理一堆不同的存储库。你想要一个仓库,你想把所有的东西都拿出来,你想把你的东西推进去。为此,我们有虚拟仓库。可以为本地、远程或虚拟存储库创建虚拟存储库。Artifactory的完美之处在于,您可以声明完整的部署存储库。如果要推送到虚拟存储库,内容将被重定向到指定的本地存储库。因此,您只需处理项目中的一个存储库。
但是如何创造呢?再次进入管理界面,进入存储库,选择菜单项,创建虚拟存储库。在这里,选择你想要创建的类型,给它一个名字,然后选择所有应该成为这个虚拟存储库一部分的存储库。很酷的是,我们有一个基于角色的访问控制功能。如果你在同一个虚拟存储库中使用不同的用户,每个用户都可以从本地和远程存储库中看到所有这些东西,他都可以访问,这非常方便。
因此,我们创建了所有存储库,但是如何从用户的角度查找、导航和维护这些存储库呢?对于这个,我们需要到应用程序页面。所以不是管理界面,而是常规的用户界面。在那里,我们可以进入Artifactory,在Artifactory中我们有这个工件页面,我们可以在所有存储库中导航。你会看到所有声明的仓库都有这个复选框[听不清00:09:25]UI激活,然后你可以浏览。所以我们现在创建的本地存储库是空的。但是,如果您单击虚拟存储库,或者单击远程存储库,那么您将看到内容。
在声明远程存储库时,您将在此UI中拥有两个不同的存储库。一个是远程存储库。这是对远程内容的视图。它不是储存在本地的。然后你有一个对应的相同名称,减去cache,储存库。在其中,您将找到通过Artifactory实例从这个远程存储库收集的所有二进制文件。虚拟存储库将为您提供两者的组合。所以这些存储库的内容,但视图是最大的。所以整个虚拟存储库内容以及所有本地和远程存储库。好吧。
到目前为止,我们已经知道了如何浏览这些存储库。我们有仓库。我们现在有了这个Helidon演示项目以及如何连接。为此,我们将进入web UI选择我们想要使用的虚拟存储库,就是我们现在创建的这个。然后你会看到这个URL。这个URL,复制并粘贴到你的依赖定义中。在我们的例子中,它是一个Maven项目。你使用的正是这个URL来声明到这个存储库的连接。
然后如果你开始构建这个,make clean, make verify,你会看到所有的依赖都不是来自一些公司的存储库或Maven Central。它将在你声明的虚拟存储库中收集,发生的事情是[听不清00:11:09]进入虚拟存储库,这将看到远程存储库的那一部分。它将转到远程存储库,例如Maven Central,获取二进制文件,将其本地存储在Artifactory上。我们将从扫描和所有这些东西开始,我们将在几分钟内讨论。我们会把它送到你,送到你建造它的环境中。它可以是CI环境。它可能是你的桌面。有了这个,我们现在正在构建一个项目,所有的二进制文件都要通过这个Artifactory实例,而一个Artifactory实例是一个完美的地方,可以扫描非漏洞。
谈到漏洞,我们希望尽可能早地拥有它[听不清00:11:47],并且在您的产品中最早的一个点就是在您的IDE中。为此,我们,[听不清00:11:55]使用IDE插件,我们可以连接到Xray。如何安装?这取决于IDE。我用IntelliJ来展示它。你将进入插件管理选项卡。您正在搜索JFrog,安装插件。安装插件后,您必须将您的凭据和Artifactory和Xray实例的URL添加到此插件中。这取决于你使用的IDE,但机制总是一样的。安装插件,连接到您的Artifactory和Xray实例,然后您就可以在IDE中直接获得信息。
现在你作为一个开发人员,你想要使用这些信息以及它是如何完成的。现在您有了您的IDE。在IDE中,你有Artifactory和Xray的连接,这意味着每次你在依赖树中添加或更改依赖时,例如Maven,这些信息将被用来询问Xray是否有一些关于依赖树中某些漏洞的信息,为此我们需要整个依赖树。你可以打开这个插件,然后你会看到你的依赖声明的主级别的主节点列表。然后你可以一步一步地浏览,浏览每个依赖项的最后一个子节点。
这是什么意思?你不仅可以看到直接依赖,还可以看到间接依赖,然后你可以看到每个依赖,如果是绿色的,黄色的或红色的,这意味着,如果不是绿色的,就有一些漏洞。如果你点击这个,然后你看到非漏洞的列表,cve有一些摘要信息,它是多么关键,它是基于CVSS分数和这个的多么关键的这个级别,我将在稍后的web UI中向你展示你可以看到关于CVSS值本身的所有详细信息,但是在IDE内部,你看到CVSS值,然后你可以开始排除和导航。
这是什么意思?如果您使用的是右键单击,那么您可以遍历声明,然后查看导致此漏洞的依赖项。你可以用右键选择排除,排除意味着你要排除这个依赖关系,然后你必须清除这个依赖关系。如果它是一个直接或间接的版本号,您选择的漏洞较少。这可以是一个更高的版本,也可以是一个更低的版本,这取决于情况。但这是IDE插件的一个功能,它会让你直接进入IDE,如果你添加了第一行依赖项,就有可能立即做出反应。
好了,我们现在创建了这个GEL文件,现在我们在Docker中对它进行剪切Helidon项目在这个hello world项目中会给你Docker文件所以你不必自己创建它。你会在不同的步骤中看到这个空间,所以你首先在Docker环境中构建所有的依赖项,你的东西,然后在生产Docker文件中共享和提供,这些文件将在你想要使用这个服务的环境中使用。这意味着我们有不同的步骤。我们有不同的依赖关系。有了这个Docker层,我们添加了一堆其他层,比如操作系统。在这里面,我们也有弱点。
好吧。在开始构建Docker映像之前,我们对Maven做了什么?我们创建了一堆存储库,现在我们正在为Docker做同样的事情。为此,我们将创建一个本地Docker存储库,我们希望在其中推进第三步。我们正在创建一个远程存储库,一个远程Docker存储库,我们想要连接到Docker Hub。在顶部,我们创建了一个虚拟存储库,然后我们聚合本地Docker存储库,远程Docker存储库,这是我们稍后在项目中提供的。
那么如何创造它呢?转到管理页面,然后转到我们的存储库。选择创建本地存储库,选择Docker,给它起一个名字,点击Xray,然后继续。远程存储库也是一样,到这个管理页面,说创建远程存储库,再次选择Docker,给出远程存储库的URL,也许是授权组合。好的方面是,如果你在Artifactory上做这个,你就没有这种pull限制,如果你是匿名的或使用其他工具,因为我们与Docker有一个特殊的协议。如果你也做过这个,创建一个虚拟存储库。再说一次,虚拟存储库,创建虚拟存储库,选择Docker,给它一个名字,把所有的存储库组合在一起,等等。你会看到在Artifactory中创建存储库非常非常容易。
我们已经创建了单个Docker存储库,这个虚拟的存储库,包括所有本地和远程存储库,现在我们想要连接。为此,我们将进入UI或常规用户界面,进入Artifactory页面以及artifacts页面,选择这里的存储库,即Docker存储库。你会在右边的屏幕上看到我们提供了这个URL。另外,我们有这个锁定机制,对于这个,我们可以去这个设置说明,如果你必须登录,我们可以看到什么连接,或者如何连接到这个。这意味着通常我们要到终端,登录到这个远程存储库,就是这样。如果我们想将它用于Docker镜像,我们只需要选择from语句然后我们就可以在Artifactory上重新构建DACA镜像并从Docker Hub和其他资源中收集所有这些东西,然后我们可以再次开始用x射线扫描,不仅是Maven,还有Docker。2022世界杯阿根廷预选赛赛程这对于所有依赖管理器都是一样的。
好吧。构建这个Docker映像需要一些时间。跳过这一部分,或者我把它剪掉,这意味着我们现在已经准备好了常规的图像。如何开始呢?你会在Helidon的hello world示例中找到一些说明。如何提升它,它是一个Docker运行命令,然后你可以连接到你的rest API。是的,这差不多就是全部了。但是现在我们已经创建了一个Docker镜像,它抓取了Artifactory实例的所有依赖项。现在是时候准备部署了。为部署做准备意味着我们必须首先将Docker映像部署到这个Artifactory实例,这样你就可以与其他实例、机制或生产环境共享它。 And this means we have to tag this Docker image and we have to push this Docker image. And this is just a regular command as always. And we are pushing now this Docker image into this virtual Docker repository. And inside the virtual repository, we declared this before deployment repository. So in the end, the Docker image is sent to the virtual repository and deployed into the local Docker repository.
现在我们要检查一下。Maven的东西和Docker的东西针对非漏洞,这是用Xray完成的。为此,我们必须制定有规则的政策。为此,转到管理页面,转到x射线菜单部分,然后我们可以创建策略。Policies是不同规则的逻辑持有人,您需要一个逻辑名称,然后可以决定要扫描的内容。专用操作位于规则内。因此,规则是基于CVSS值的无状态原子操作。
您可以声明专用的CVSS值,但是您可以使用预定义的范围或其他任何东西,然后必须决定要做什么。这是发送邮件,破坏构建,启动web hook等等。所以你有不同的选择或不同的互动可能性。对于每一步,你都在制定一个规则。一组规则聚合在称为策略的组合中,策略是一个逻辑名称。在这里,我们可以决定是否要扫描漏洞或许可证问题,这或多或少是相同的行为。如果你发现了什么,你必须声明该怎么做。如果你正在扫描Docker映像,Maven映像或其他什么,它没有任何作用。这是中性静脉,这是长期政策。
现在,我们要将声明的操作与要扫描的技术或存储库连接起来,这是通过watch完成的。手表现在将我们声明的动作与策略结合起来,然后说,我们想要扫描的数据量是多少,这是一个存储库。手表会再次进入管理页面,进入x射线,然后选择创建手表,给它一个名字,然后你可以或多或少地选择你想要激活的策略和你想要扫描的存储库的组合。如果我们的安全数据库有更新,如果我们的存储库有更新,或者如果你手动推送更新,那么什么总是更新的。然后你可以看到手表会给你提供关于整个测试堆栈漏洞的信息。
现在我们创建了表,现在我们可以扫描我们创建的Docker映像了。为什么我要扫描Docker映像?因为它将向您显示,在watch中,您将扫描技术边界上的整个依赖树。这意味着在Docker映像中,我们有jar,我们有操作系统部件等等。我们需要的是一个完整的影响路径,这样就有意义理解所有技术层的所有漏洞,从你推向生产的二进制文件中。为此,你需要理解整个二进制结构和整个元数据结构。这就是人工制品和x射线的结合如此强大的原因。因为我们可以访问二进制文件,我们可以访问整个元数据,以及整个依赖信息。这意味着我们不仅在扫描二进制文件本身,还在分析它的静态背景。这是在手表内部完成的。
怎么看手表或者怎么看所有的东西?回到用户界面,回到安全相关页面。这里,这个x射线部分,然后你有这些条目,其中一个是手表。如果您在那里,您将看到所有选定的手表。如果您单击此监视,您将获得具有CVSS值的完整漏洞列表,以及摘要,以及所提供的cve等等。你可以点击详细信息,然后你会看到详细页面。这里你会看到额外的信息。你可以阅读更多的参考资料,如果提供了CVE, CVSS值,谁找到了它,涉及到什么技术,包含这个二进制文件的存储库是什么,你会看到这个图像在哪个层找到它。例如,如果你在一个JAR中找到一些东西这个JAR然后在一个web存档中使用,这个web存档在Docker层中使用等等,你会看到它的确切位置以及它被包裹了多少层。这些是手表。
有时你只是想检查仓库里面有什么,有没有漏洞等等,你想导出这个。所以你需要这个[听不清00:23:51]的观点。这被称为漏洞报告,你会在主用户界面的安全部分找到它,这个菜单项,漏洞报告,然后它会得到所有现有报告的列表,所以它们被存储在那里。然后你有这个按钮,你可以说,我现在要创建它。这个漏洞报告,你必须给它一个合乎逻辑的名字。您正在选择是否要扫描漏洞或遵从性问题。这里我们选择漏洞。然后你想扫描什么,例如,你想扫描存储库或者构建信息,还有,还有。这里我们只是扫描存储库,然后选择存储库本身。我想扫描一下,然后需要一些时间才能扫描出来。
然后它会得到时间步长视图。现在是存储库的一部分这个存储库中现在的漏洞数量这个列表你会得到,你可以导出为PDF或CSV或其他格式,你可以分析这个表格中的一些信息。如果你点击一个专门的图标,你会看到一些详细的信息,比如CVE等等。如果你点击CVSS号码,那么你会得到一个覆盖窗口。在这里你将看到所有导致这个最终CVSS数字的详细的度量标准。
如果你不太熟悉这个,看看我的YouTube频道,我有一个关于CVSS本身的专门视频。有了不同的指标,它意味着什么等等。然后你可以试着分析CVSS值是否在影响你的系统,或者它有多重要。所以你可以开始用你的环境指标来工作,但这不是今天演讲的一部分。所以这里我们正在创建CVSS或这个漏洞报告,这是一个关于什么是状态的单一视图。
我向你们展示了整个过程,从创建第一个二进制文件到创建Docker映像,如何在存储库中排序,如何扫描web ui中的非漏洞,以及在IDE中。这是在非常非常短的时间内获得的大量信息。所以,如果你想了解如何亲自动手,那就看看我的研讨会和网络研讨会,然后你可以注册,比如,参加免费的研讨会。然后我们一步一步地做,这样你就可以检查所有的步骤,并可以做所有的第一个实际步骤。但是现在是时候对这个Docker映像做一些事情了。为此,我将交给Anuj,因为他将使用这个Docker映像,并向您展示在AWS环境中可以做什么来使用这个Docker映像,以及他将为所有这些添加什么样的保护。
谢谢斯文的精彩讲解。好吧,让我们从AWS PrivateLink开始。让我们快速回顾一下客户看到的一些业务挑战,以及适合在技术中私下实现的用例。我保证理论部分简短,这样我们就可以直接跳到演示了。对于首席信息官和首席信息安全官来说,安全是头等大事,他们正在整个组织中推动零信任计划,以降低业务风险和内部威胁。
零信任倡议有三个主要支柱:用户、工作量和网络。在这节课中,我们将重点讨论工作负载和网络方面。客户希望限制工作负载访问,而不是允许对整个虚拟私有云或子网进行更广泛的访问。它们需要bpc之间的私有连接。他们不相信第三方应用程序流量,希望有更好的可见性。其次,金融服务、医疗保健和政府部门的客户需要遵守监管措施并实现合规性,防止您的敏感数据(如客户记录)在互联网上传播,有助于您保持对法规的合规性,例如HIPPA、EU、US、Privacy Shield和PCI。第三,客户不希望在公共互联网上运行他们的云流量。他们不希望他们的网络资源和服务可以通过互联网访问,因为这是最2022世界杯阿根廷预选赛赛程大的威胁反向向量之一。最后但并非最不重要的是,解决方案需要具有成本效益。
现在让我们讨论一下帮助我们解决这些业务挑战的AWS私有链接用例。有三个关键的主要用例。首先,安全,仅限于专用网络之外的AWS服务。这些服务可以是AWS服务,如数据库、sql和Lambda。其次,对客户自己的内部应用程序或第三方SaaS应用程序(如JFrog SaaS解决方案)的安全、受限访问,这些应用程序位于您的专用网络之外。在今天的演示中,我们将首先关注如何使用AWS PrivateLink保护对JFrog SaaS的网络访问,以便工件通过Amazon骨干网从您的VPC和JFrog SaaS之间推送或拉出,而无需穿越公共互联网。
好了,首先是获取JFrog软件即服务实例。您可以从AWS市场注册免费试用JFrog SaaS。这里需要注意的是,AWS PrivateLink支持仅在企业级的JFrog中提供安全包。在今天的演示中,我已经注册了AWS市场来购买企业级的JFrog SaaS,有效期为30天。接受合同后,按照屏幕上的说明完成帐户设置。最后,一旦提供了JFrog SaaS实例,您将收到一封包含SaaS实例公共URL的电子邮件,您可以使用该URL登录。
然后,您需要创建一个端点,并将JFrog提供的PrivateLink与您帐户中的VPC链接起来。为此,导航到VPC下的端点,并选择按名称查找我的服务。您需要输入JFrog产品服务名称值。这些值是特定于AWS区域的。您可以从JFrog在线文档中查看服务的名称。您需要在AWS帐户中选择要与JFrog SaaS建立PrivateLink连接的VPC和安全组。如果需要连接多个VPC,则需要重复此过程。注意,由此创建的VPC端点ID。在完成下一步操作之前,您的VPC端点将处于待挂状态。
下一步,登录我的JFrog帐户。请记住,我的JFrog登录凭据与您登录到JFrog SaaS实例时使用的凭据不同,它仅适用于管理员。一旦你登录到我的JFrog,在actions下拉菜单下找到privatellinks创建一个新的PrivateLink。输入在上一步中收到的VPC端点ID,并将此ID与SaaS实例链接起来。几分钟后,当PrivateLink连接建立时,您应该会看到一封电子邮件确认。
此时,如果您回到AWS控制台中的端点,您将看到AWS PrivateLink的状态变为可用,然后您可以复制粘贴DNS名称。为了方便起见,您可以设置一个指向AWS PrivateLink提供的DNS名称的C名称。请记住,此DNS名称将仅从您的VPC内解析,受安全组的限制。为了完成设置,我需要设置一个私有DNS。为此,我转到路由53并创建一个名为PE.JFROG.IO的私有托管区域,并将其与我为与JFrog SaaS实例的PrivateLink连接创建的VPC相关联。这里需要注意的一点是,这个私有托管区域名称目前必须为P.JFROG.IO,然后创建一个指向VPC端点DNS名称的C名称。
现在,让我们通过PrivateLink在JFrog SaaS Artifactory中用AWS C运行一个示例容器。为了做到这一点,我在使用EKC创建PrivateLink的相同VPC中创建了一个EKS集群[听不清00:32:34]。我还确保节点组具有用于使用JFrog SaaS创建PrivateLink的安全组。为了确认我的PrivateLink连接是否工作正常,我只是对我创建的DNS名称执行ping操作。我使用AWS SSM保护到实例的SSH,然后执行ping以确认连接。一旦您建立了良好的连接,您就可以联系JFrog支持来阻止到公共internet端点的流量,以便所有流量都可以通过PrivateLink可靠地留在Amazon网络中。
下一步,我想将运行在EKS集群中的pod部署。我将一个示例项目推送到我的JFrog SaaS实例,这样我就可以将它通过PrivateLink拉过来。我可以修改[听不清00:33:41]你的[听不清00:33:42]清单文件中的[听不清00:33:42]部分,并将其指向PrivateLink DNS。完成后,使用多维数据集CTL命令进行部署并检查结果。你可以看到我改变了端点指向我的PrivateLink和这里。然后使用它来使用多维数据集CTL命令将示例应用程序部署到社区集群。如果一切正常,您将看到pod处于运行状态,映像从已设置的PrivateLink DNS中拉入。
好了,PrivateLink的演示就到这里。在下一个演示中,我们将介绍EKS集群中审计和登录的检测控制,然后了解如何使用CloudWatch Metrics Insights查询这些审计日志。
好了,现在进入第二部分,即使用Kubernetes审计日志进行集体控制检测。由于各种不同的原因,收集和分析审计日志非常有用。日志可以帮助进行根本原因分析和归因,即将更改归因于特定用户。收集到NF日志后,还可以使用它们来检测匿名行为。在EKS上,审计日志被发送到Amazon CloudWatch logs。
为了在EKS集群上启用审计日志记录,您可以导航到EKS集群,转到日志记录部分,管理日志记录,启用审计日志记录并保存更改。注意点。当您启用控制pin日志记录时,您将为在CloudWatch日志中摄取和存储日志而产生额外的成本。当审计日志更新成功后,您可以进入AWS CloudWatch Logs并查找特定于集群名称的日志组。如果分析一个特定的审计日志,您将看到它有两个主要注释。首先是决策,也就是授权K8 IO决策。第二个是授权K8 IO和原因。这两项解释了你想要做的工作,或者你想要采取的行动是允许的还是不允许的,如果需要的话,还会给出具体的理由。
如果您必须查询这些日志,您可以使用AWS CloudWatch logs Insights,您可以编写一个查询,类似于以下内容。比方说,如果您必须查询最近10分钟左右创建的部署,那么您可以使用objectRef和部署资源以及创建谓词来过滤日志。只要正确过滤日志,就会得到相同的输出。假设,如果您必须识别已删除的部署,例如,我删除了我们在上一个示例中创建的部署,我们将看到日志,类似于这样的内容,以及原因。正如我所说的,有两个主要的注释,即授权决策允许和原因,它将具有删除或创建或获取或列表等动词。
使用CloudWatch logs Insights分析日志的一些常见用例可能是列出AWS授权配置映射的更新。您可以使用这样的查询,它将为您提供AWS认证配置映射的所有更新(如果有的话)。这对于识别罪犯地图的更新或路径非常有用,出于安全目的。您可以使用这样的查询,它将列出对特定规则或角色绑定的创建、更新或删除操作(如果您希望将角色更改为角色绑定),这将为您提供有关角色绑定的信息。类似地,当集群角色或集群角色绑定时。
如果你要查看对特定秘密的未经授权的读访问,我没有例子,但是这个查询你可以用它来查看get列表并观察特别是如果响应代码是未经授权的,它会给你结果。类似地,如果必须获得失败的匿名访问列表,则可以运行这样的查询,该查询使用system anonymous的用户名和401或403的响应代码过滤日志。
好了,现在是今天的最后一个演示,容器映像运行时安全管理。这是一些需要考虑的事情。并不是所有的向量在Kubernetes中都有缓解措施。确保Docker API服务没有公开暴露。更好的是,完全禁用它的网络侦听器。图像本身可以成为攻击向量。图像可能包含恶意软件。CICD进程也可能是攻击载体。可能能够从中获取凭据并推送绕过扫描的未经验证的图像。
您可以实现由安全组绑定的AWS PrivateLink,这将限制在组织外部推送和拉取图像。其次,开放策略代理是一个开源的通用策略引擎,它统一了跨堆栈的策略实施。开放策略代理提供了一种高级声明性语言,允许您将策略指定为代码和简单的api,从而从软件中卸载策略决策。在今天的演示中,我们将了解如何在Amazon EKS集群上实现OPA,然后查看一个场景,以限制来自托管在JFrog SaaS实例上的已批准的容器注册中心的容器映像,我们已经通过使用OPA策略为该实例建立了PrivateLink连接。有了这个介绍,让我们开始演示如何将开放策略代理部署到EKS集群。
好吧。第一步是部署开放策略代理Gatekeeper。OPA Gatekeeper是一个专门的项目,提供了OPA和Kubernetes之间的一流集成。OPA Gatekeeper是使用OPA进行Kubernetes准入控制的首选项目。如果你想使用OPA的管理功能,如状态[听不清00:41:06],可以使用普通的OPA和Kube管理。我们可以在可信图像中部署OPA看门人,并等待部署完成。
好吧。部署完成后,下一步是部署约束模板,该模板包含用于执行允许在此集群中使用的存储库url的Rego代码。它有约束模板,它有必要的Rego代码,在警告上有一个模板,如果有任何违规,可以显示出来。我们使用kubectl apply约束模板并等待模板部署。它被成功地创造出来了。最后,让我们部署约束,其中包含存储库URL和策略实施的测试。在这个例子中,我使用了从PrivateLink端点提取的允许列表图像。因此,理想情况下,如果我的Kubernetes清单文件有指定的图像URL,部分应该启动。否则,我应该得到约束模板中定义的消息。因此,让我们使用kubectl apply -f constraint.yaml部署约束。 And it should complete right away.
好了,下一步是测试。我将首先部署相同的app.yaml,它具有允许列出的JFrog Artifactory私有端点URL,并使用kubectl apply -f app.yaml。这应该适用于整个应用程序。你可以看到它被创造出来了。我可以通过运行kubectl apply get all来运行状态检查,看看是否一切正常。是的。所以豆荚开始运行得非常好。这意味着它能够正确地提取图像。
下一步是使用一个没有这个允许列出的URL的图像。为此,我将使用GitHub上发布的BusyBox模板作为示例。这个BusyBox模板使用或BusyBox清单文件使用来自Docker public的BusyBox容器映像。如果我应用这个,我将得到一条消息"嘿,我只允许来自这个特定URL的图像存储库,它违反了这个策略"这就是为什么它甚至不让我启动文件。
好了,今天的演示就到这里了。非常感谢大家的收听,希望这些演示对大家都有用。如果有任何问题,请随时通过Twitter联系我。我的推特账号是@anujsharma5。再次感谢,并享受今天的精彩内容阵容。再次感谢你。
