简单介绍一下我,我是亚马逊网络服务的专业解决方案架构师,在应用程序和基础设施开发方面有超过15年的实践经验。我非常热衷于为开发人员和企业客户构建大型、可扩展的解决方案。
我曾在从金融服务到零售的各个行业中获得多个奖项,包括软件开发人员、架构师、工程师经理和产品经理。在不为客户和合作伙伴构建解决方案的时候,只要西雅图的天气允许,我就喜欢花时间在室内和室外跟在我三岁的女儿后面跑步。
让我们快速浏览一下今天要讨论的话题。我们将首先讨论什么是共享服务平台,以及为什么应该在组织内部构建一个共享服务平台。然后,我们将详细介绍并理解AWS上的管理共享服务平台架构拓扑,然后了解如何使用AWS云开发工具包(通常称为cDk)在Amazon EKS上创建共享服务平台。然后,我们将深入了解如何在AWS和EKS上实现JFrog平台的DevSecOps实践,然后通过如何使用我们创建的应用程序平台将代码交付到应用程序EKS集群。在一个交叉帐户运行,并实现EKS实践一直使用X射线。
我们还将介绍在JFrog平台和[听不清]上实施DevSecOps实践的不同组成部分。
最后,我们将以一个快速的演示结束,接下来的步骤,然后开始问答环节。
在接下来的25分钟里我们有很多内容要讲。让我们开始吧。
为了确定我们今天要讨论的内容并充分利用它,让我们首先了解什么是共享服务平台或通常称为SSP,以及为什么组织应该投资实际构建一个共享服务平台?
共享服务平台是一个组织的内部平台,供内部多个团队使用。由于平台由多个团队使用,因此默认情况下应该是安全的。
共享服务平台允许在软件交付中分离关注点,非常类似于AWS的共享责任模型,从而减轻了软件交付的负担客户从运营负担中解脱出来,因为AWS操作、管理和控制来自主机操作系统虚拟化的组件,然后客户承担客户操作系统的责任和管理。
共享服务模型提供组织内的团队来管理共享服务的一部分。让它成为持续集成和部署或标识和访问管理的工具。这允许应用程序团队构建能够向客户交付业务价值的软件,利用来自共享服务的服务。
典型的共享服务架构是使用AWS控制塔和AWS组织进行供应,允许为每种目的大规模供应不同的AWS帐户。
在一个组织中,通常有大约四个独立的AWS帐户,至少可能有更多,这取决于组织的规模、性质和用例。
第一类AWS帐户被用作托管CI\CD平台或工具的示例由多个应用程序团队利用。在这次演讲中,我们会讲到,在今天的课程中也会讲到在一个完全独立的AWS账户中使用和配置JFrog平台。第二类通常用于身份和访问管理或网络管理。第三个是主支付账户,用于计费。而第四个,通常是用来确保你的安全的理想状态。
这是一个帐户,其中来自多个来源和多个帐户(如云跟踪、云观察、警卫值班)的所有安全日志被聚合在一起,以执行分析、取证和补救。
管理和优化软件生命周期通常是一项不相关的工作和不相关的过程,开发人员和IT运维团队在孤岛中工作。缺乏协调会导致一致性、错误和漏洞。持续集成和持续部署有助于避免这些挑战。
根据CNCS最近的一份调查报告,随着企业意识到需要转向类似云的开发和部署模型,越来越多的企业使用容器进行CI\CD。
容器上的共享服务平台通过CI\CD方法的实用性,帮助公司实现敏捷性、可移植性、安全性和速度的好处,以及架构平台提供了工作流和解决方案的自动化集成,以及开发人员根据需求快速扩展的功能。此外,作为第一天,它应该在架构上设计为不可变性,以限制潜在的网络攻击。
稍微转移一下话题,现在让我们深入探讨如何使用Artifactory和Xray构建共享服务CI\CD平台。但让我们首先了解不同的组成部分和生态系统,因为周围有不同的移动部件,我保证会尽可能容易理解。
由于前面提到的原因,Shift服务平台通常是在单独的AWS帐户中提供的。
为了获得高可用性,VPC至少可以扩展到两个不同的私有子网,没有涉及到面向公共的子网,因为平台实际访问的负载均衡器不需要被公开访问。所以没有必要创建一个私有子网,所有内容都在组织内部访问。
然后创建Amazon EKS集群,扩展到这些节点,最好使用托管节点加入到EKS控制计划中。简要介绍什么是托管节点。
使用EKS管理节点组,您不需要分别提供或注册EC两个实例来提供计算能力以运行Kubernetes应用程序,在我们的例子中,这是整个j frog平台。您可以通过一个操作为集群创建、更新或终止节点。
节点在您的AWS帐户中使用最新的EKS优化的EMIs运行,而节点更新和终止将优雅地耗尽节点,以确保您的应用程序始终保持正常并可用。所有托管节点都作为自动伸缩组的一部分提供,由EKS为您管理。
所有资源2022世界杯阿根廷预选赛赛程包括在AWS托管帐户内运行的实例和自动伸缩组。每个节点组使用EKS优化的EMI,并且可以跨您定义的多个可用分区运行。你也可以在瓶子火箭上提供平台。现在快速segue,因为我们涉及到操作系统的话题。
让我们来多谈谈什么是瓶子火箭操作系统。Bottle Rocket是一个基于Linux的操作系统,由AWS专门构建,用于在虚拟机或裸金属主机上运行容器。如今,大多数客户在通用操作系统上运行容器化应用程序,这些操作系统是包对包更新的,这使得操作系统更新难以自动化。然而,瓶火箭的更新应用于单个状态,而不是包对包的基础上。
这个单步更新过程通过使用容器编排服务(如EKS本身)使操作系统更新易于自动化,从而帮助减少管理开销。单步更新还通过最小化更新失败和支持简单的更新回滚来改善容器应用程序的正常运行时间。另外,最重要的是,我认为,bottle rocket只包含了运行容器的必要软件,这进一步提高了资源利用率,大大降低了表面攻击。
我们还使用Amazon RDS MySQL数据库作为与JFrog平台连接的第二层数据库。
在提供多AZ数据库实例时,Amazon RDS会自动创建一个主数据库实例,并将数据同步复制到不同可用分区中的备用实例。在基础设施故障的情况下,Amazon RDS执行自动故障转移到备用实例,因为故障转移后数据库的端点保持不变。
应用程序可以在不需要的情况下恢复数据库操作用于人工行政干预。我们还配置idea以在AWS机密管理器中存储管理凭据,以便用户和应用程序通过调用机密管理器api来检索机密。从根本上消除了将敏感信息硬编码为纯文本的需要。秘密经理提供秘密旋转与内置集成亚马逊RDS。我们使用Amazon S3作为持久层,人工使用cash文件系统作为读取缓冲区来缓存频繁的请求,从而显著减少了访问S3的次数,并极大地提高了性能。
Artifactory还使用最终缓存作为写入缓冲区,这意味着上传是异步和早期的,缓存在磁盘上的本地。
最后,前面的吊舱,为Artifactory HA和X射线应用提供了弹性负载均衡器。我们的安全性作为去零责任是至关重要的,我们还使用AWS证书管理器将其添加并链接到Amazon负载平衡服务,以便无缝地管理和轮换证书。现在,正如我们刚刚看到的,在这个设置中有很多移动的部分,提供整个开放式设置可能是具有挑战性的。
当我们需要在Kubernetes集群中安装JFrog平台时,如果使用传统的方法,将需要使用至少两个不同的api进行上下文切换,一个用于配置和管理AWS资源,另一个用于Kubernetes2022世界杯阿根廷预选赛赛程API用于在集群中部署工作负载。
本例中的工作负载是JFrog平台的不同移动部件,包括Artifactory pod和X射线pod。开发人员和管理员需要了解至少两种不同的cli,语法和技术,以便使平台完整。
更不用说AWS和JFrog一直在努力使平台的安装尽可能无缝,因为这是一个开放的基础设施。使用Amazon云开发工具包(通常称为AWS cDk)极大地解决了这一特定挑战。在我们继续讨论之前,先简要介绍一下什么是AWS cDk。CDk是一个开源软件开发框架,可以使用go Lang、Java、TypeScript和Python等熟悉的编程语言定义云应用程序资源。2022世界杯阿根廷预选赛赛程
正如我们前面看到的,提供云应用程序可能是一个具有挑战性的过程,因为它要求您执行手动操作,编写自定义脚本,维护模板,甚至学习领域特定的语言。AWS cDk使用编程语言的熟悉性和表达能力对应用程序建模。
它还为您提供了一个称为构造的高级组件,用于预配置具有经过验证2022世界杯阿根廷预选赛赛程的默认值的云资源,这样您就可以专注于构建云应用程序,而不需要成为该领域的专家。
AWS cDk通过AWS云生成以安全可重复的方式2022世界杯阿根廷预选赛赛程提供资源,并使用相同的云生成引擎来提供资源。它还使您能够组合和共享您自己的自定义构造,这些构造结合了您组织的需求,帮助您更快地启动新项目。
JFrog后台的cDk构造也在其库中使用cDk来安装平台,使用Helm作为Kubernetes的包管理器,具有智能默认值和可选覆盖。有了这些,我很高兴分享新的JFrog cDk L3结构的开发人员预览,这是我们刚刚看到的整个设置的一个开放的抽象。这就是我们与JFrog合作开发的东西。这个cDk结构将使您能够使用我们刚才看到的推荐架构在Amazon EKS上快速安装整个JFrog平台。
我们强烈建议您尝试这个L3结构,并让我们知道任何反馈,以便我们可以进一步迭代以改进它。
你可以立即从NPM和管道存储库中下载这个文件。这些构造可以通过包名jfrog - cdk -构造获得。
现在让我们来谈谈DevSecOps。但是在进一步讨论之前,让我们首先定义什么是DevSecOps。DevSecOps是文化理念、实践和工具的结合,它利用IT自动化的进步来实现生产的不变性、业务价值的频繁交付和安全策略的自动化执行。
DevSecOps通过将预防性、侦察性和响应性安全控制集成到管道中并实现自动化。
从实现自动化开始,我们的目标是DevSecOps的三个不同组件,即管道的安全性,管道中的安全性,以及管道的强制执行。
让我们深入探讨这些问题。管道安全的第一步。实现管道安全性的第一步本质上是将管道和相关基础设施视为工作负载,并像对待任何其他应用程序代码一样对待它。我们为整个JFrog平台提供AWS cDk,以及任何偏差为了提供帮助,还必须对代码进行审查。此外,JFrog平台或JFrog管道,甚至AWS管道都可以保存为YAML dsl,强烈建议每个团队将管道作为代码来管理。接下来,每月对附加到JFrog管道的权限进行一次审查,并定期轮换键。根据租赁原则授予对AWS资源的访问权…2022世界杯阿根廷预选赛赛程特权原则非常具体。
使用基于角色的访问控制来确定谁可以访问管道,因为这成为交付软件产品的关键元素。hth华体会最新官方网站在Amazon、Elasticsearch、cloudwatch、Amazon managed grafana或Prometheus等分析服务中使用flow在插件中配置访问和系统日志记录和指标。最后,练习修补和更新所需的操作管道,还有整个平台。接下来,让我们讨论管道中的安全性以及如何实现它。需要在应用程序的整个生命周期中考虑管道中的安全性。让它以容器或其他二进制文件的形式存在。
它从静态代码分析开始,在版本控制软件中,如AWS代码提交。当你的代码被静态存储在AWS代码提交这样的服务中时,你会如何进行集成或代码分析呢?答案是使用像Amazon code guru这样的服务,这是一种开发人员工具,不仅提供智能建议来提高代码质量和识别应用程序最昂贵的代码行,而且还使用机器学习算法和自动推理来识别关键问题、安全漏洞和难以发现的调试,或应用程序开发期间难以发现的错误,并提供建议来提高代码质量。接下来,在构建过程中,让我们考虑容器应用程序的构建。
容器化应用程序的典型生命周期包括执行映像构建。但是,当推送时,使用X射线触发图像漏洞扫描,如果发现漏洞则构建失败,这样管道将无法进一步部署到目标环境中。如果发现漏洞,构建将被标记为失败,管道执行将停止。最后,让我们谈谈管道的执行。首先,采用多帐户策略,利用共享服务平台分离测试和刺激工作负载。
JFrog平台可以通过从各自的帐户中假设必要的角色来部署这些测试和刺激工作负载。
回去。其次,作为负责人执行管道来执行部署,并确保部署过程中除了单击之外没有其他人员参与只有在需要时才在管道中添加按钮。一开始很难执行,但首先要确定为什么需要在工作负载中访问生产帐户然后使用工具来编排特定的需求并解决特定的需求。
我的共同需求是我需要查看生产日志。
您可以通过确定需要哪些日志、它们来自哪里和使用工具来消除这些日志例如flowindy或云手表代理,或AWS开放遥测分布,以将遥测数据输出到云手表等外部聚合器。好的,让我们做一个快速的演示。好了,我们通过创建一个cDk应用程序来启动示例应用程序,并声明我们创建的L3结构,即jfrog -cDk-construct作为依赖项。
一旦我们声明了依赖项,你只需要创建类的新实例,并填写集群的属性,节点和IDAs,就像我们在本例中看到的那样,并指定要使用的Kubernetes版本的属性,可访问的端点,这是Kubernetes集群特定的端点。
在这种情况下,节点类型是什么,我使用bottlerocket操作系统节点和RDS数据库的细节。我需要Postgres的12.5版本和那个数据库以及我应该使用的用户名。一旦我这样做了,下一步就是简单地将TypeScript编译为JavaScript。完成后,使用cDk部署命令部署到特定的AWS帐户。您将注意到,一旦cDk将告诉您它试图部署的更改列表,它将开始在您指定的AWS帐户中创建一个新堆栈。
如果您必须在AWS控制台上查看它的外观,只需登录到控制台上,就可以看到云形成堆栈。几分钟后你会看到,一个新的堆栈会出现,它会有从头到尾部署的整个堆栈,其中包括EKS集群、想法数据库、秘密、负载平衡器以及几乎所有的端到端的东西。
好的,你会看到它被展开了。快速暂停并在部署完成后继续执行。
好的,一旦堆栈部署完成,您可以在控制台本身看到输入输出,就像这样。如果你想登录到Kubernetes集群,你可以运行update, cube CT update cube config命令来连接到创建的集群。同时,如果你要在云生成控制台中看到输出,它看起来是这样的,堆栈处于创建完成状态。因此,一旦创建了堆栈,一旦平台部署到EKS集群上,您就可以打开已经创建的URL,然后创建管道。
就像这样,整个管道,DSL可以保存为代码在你的版本控制中,这样你就可以协同工作,作为一个好的DevSecOps实践,最好也把管道保存为代码。
管道代码中的步骤看起来是这样的,以容器化应用程序为例,您进行Docker构建,将Docker推送到存储库,存储库本身就是一个工件,这将触发X射线扫描,一旦X射线扫描完成,它将被提升到存储库,然后用于部署到EKS集群并进行测试,然后进行prod。因此,简而言之,这就是使用DevSecOps的整个应用程序生命周期的样子。正如你所看到的,这里的Docker升级步骤不会进一步进行,除非进行漏洞扫描的X射线扫描完成,因为X射线的策略是这样配置的。
好了,转回去,这就是我演示的全部内容。快速的下一步是尝试JFrog的AWS cDk构造。
它可以在NPM和管道存储库中的JFrog-cDk-constructspackage中找到。此外,我们还用JFrog.AWSworkshop.io创建了一个动手实验室。
尝试一下研讨会,这样你就可以自己尝试最终体验,如果你有任何问题,可以联系我们。
我们很高兴在任何时候听到反馈。就这样,非常感谢大家来听这次会议。
我希望它对你有用。再说一次,我在这里可以回答你们关于会议或任何一般的问题。
swampp快乐,期待您的反馈。
谢谢你!