基础设施即代码的治理和安全

基础设施即代码的治理和安全

关键字: [Amazon Web Services re:Invent 2024, 亚马逊云科技, Infrastructure As Code, Compliance Automation, Security Governance, Continuous Delivery, Cloud Infrastructure]

导读

在本次会话中,学习如何在受监管环境中使用亚马逊云科技 CloudFormation和Amazon CDK部署云应用程序,同时执行安全控制。了解如何通过cdk-nag及早发现问题,使用cfn-guard验证您的管道,并利用CloudFormation Hooks保护您的账户免受意外更改。

演讲精华

以下是小编为您整理的本次演讲的精华。

空气中弥漫着期待的气氛,Eric Beard作为一位亚马逊云科技解决方案架构师登台,欢迎渴望已久的观众来到拉斯维加斯举办的亚马逊云科技 re:Invent 2024活动。他的介绍为整场活动定下了基调,深入探讨了基础设施即代码如何成为云端治理和安全策略的关键组成部分。与他同台的还有来自亚马逊云科技的Mac Merit和来自Capital One的Ishu Gupta,为这一重要主题的全面探讨奠定了基础。

Eric承认在场观众的角色和职责各不相同,从平台团队和开发人员到安全专业人士和业务领导者,都在云合规性方面扮演着至关重要的角色,每个人都面临着自己的一系列挑战。他指出,企业一直在寻求降低成本的方式,或许将这些节省的成本转嫁给客户或增加利润,这是一个微妙的平衡。另一方面,安全团队则痴迷于降低风险和提高系统安全性,中央安全团队负责整体安全态势,但整个公司都应该贯彻安全文化才是最终目标。Eric指出,开发人员则面临着不断推出新功能以赢得新客户和留住现有客户的压力。

Eric宣称,自动化是克服这些障碍的关键策略。他深入探讨了交付管道的概念,将基础设施的变更与应用程序代码的变更同等对待,经历开发、构建和部署阶段。在开发阶段,Eric强调,目标是优化速度,使开发人员尽可能高效,同时让他们默认开发安全应用程序变得更加容易。进行了大量安全检查,将这些检查向左移动,这是合规性和安全领域经常听到的一个短语,允许开发人员尽早尽多地检查他们的代码,避免在生产环境中出现意外。

Eric解释说,开发人员在本地环境中进行基础设施更改,可能会进行代码审查,然后将代码提交到源代码控制系统。从那里,流程进入自动化构建阶段,代码被构建、依赖项被检查,并运行安全扫描器,如亚马逊云科技 CloudFormation Guard或带有Rego的Open Policy Agent,验证代码的安全性和合规性。Eric强调,目标是将这些检查向左移动,使开发人员能够尽早发现问题,同时在整个过程中都有防护措施,就像曾经拯救过他一命的高速公路护栏一样,防止发生更加灾难性的后果。

一旦应用程序构建完成,代码就会像运行时代码和应用程序代码一样,被交付到生产环境。它从一个由所有开发人员共享的开发环境的亚马逊云科技账户开始,这个账户不包含任何生产数据,以避免潜在的问题。Eric强烈建议不要为了测试而将生产数据复制到开发环境,而是提倡使用合成数据。如果所有测试都通过,流程就会进入一个被锁定并像生产环境一样对待的过渡环境,在那里运行更加真实的负载测试。如果成功,最后一步就是生产环境,可能会分阶段在各个区域推出,采用悲观的方式,寻找任何失败和回滚的理由,然后重新启动管道。Eric强调,目标是在保持安全的同时实现快速交付,这种平衡可以通过采用现代DevOps实践来实现。

Eric透露,在亚马逊,这就是开发软件的方式,数以千计的自主开发团队每天每个团队都会多次将代码推送到生产环境,每年总共有数百万次部署,而且这种方式既快速又安全。即使对于基础设施变更,采用DevOps理念不仅能够实现更快速、更安全的运营,还能减少部署过程中的事故和故障。

这让Eric切入了正题:基础设施即代码对所有人来说都是至关重要的组成部分。他承认,许多人可能是通过登录网络控制台、点击浏览、学习和实验开始他们的云之旅的,这种做法被称为“点击运维”。虽然在一定规模下是可以接受的,但一旦复杂性增加,这种方法就会变得脆弱,需要复杂的运行手册、详细的文档来重现环境,而且这个过程既耗时又容易出错,可能会导致安全问题。

Eric承认,过渡到基础设施即代码可能是一个艰巨的任务,需要克服巨大的学习曲线。然而,他向观众保证,这是值得的。要采用DevOps、DevSecOps和安全设计的理念,组织必须将这些活动合二为一,让每个人在开发和交付代码时都具有运维和安全意识。

一旦采用了基础设施即代码,Eric赞扬说,开发人员就可以获得强大的工具。代码审查变成了可能,更多的人可以审视基础设施配置,发现潜在的问题。可以插入静态扫描器,如CloudFormation Guard或CheckOv,而版本控制则提供了每一次变更的历史记录,如果需要,可以轻松回滚。像VS Code或JetBrains这样的IDE插件提供了在IDE中标记潜在改进的便捷工具。

但Eric宣称,最大的好处是可以在多个环境中可靠地部署完全相同的架构。这个过程从开发人员的本地沙盒账户开始,Eric强烈提倡这种最佳实践,并强调采用多账户策略的重要性。他承认可能会有人对所谓的费用和复杂性提出反对意见,但他反驳说,从长远来看,这比试图将太多开发人员和生产应用程序塞进一个亚马逊云科技账户要更加经济高效。从安全角度来看,隔离的环境可以限制变更的影响范围,防止由于共享账户中的问题而导致生产力停滞。

一旦开发人员满意,自动化部署管道就会启动,在开发、过渡和生产账户中部署完全相同的基础设施,模板会根据不同环境的实例大小等小差异进行参数化。

在亚马逊云科技实施基础设施即代码的基础服务是CloudFormation,Eric介绍说,这是一个服务器端编排引擎,允许使用YAML或JSON编写基础设施配置。CloudFormation创建堆栈,即一组相关资源,如一组EC2实例与负载均衡器、用于静态网站托管的S3存储桶和CloudFront分发,或者用于Web API的API网关和DynamoDB表。最关键的是,CloudFormation以原子方式进行更改,确保所有资源都成功创建,或者如果任何操作失败,就回滚到以前的状态,保持一致性。

为了帮助从点击运维过渡到基础设施即代码,亚马逊云科技提供了IAC生成器,这是一项可以扫描现有账户、识别感兴趣的资源及其依赖项,并通过几次点击生成CloudFormation模板的服务,将其转换为托管堆栈。Eric指出,这是学习如何编写CloudFormation模板的一个好方法。

接下来,Eric介绍了亚马逊云科技 Cloud Development Kit (CDK),这是一个建立在CloudFormation之上的开源项目,允许使用更高级的编程语言(如TypeScript、Python或C#)编写基础设施代码。CDK不仅仅是代码生成器,它还处理资产部署等,但其核心是生成CloudFormation模板。CDK还支持采用GitOps,这个短语通常用于Kubernetes世界,但在这里也适用,确保对已部署的云应用程序的每一次更改都通过源代码控制、代码审查、自动化测试和交付管道进行,不会在生产账户中进行任何带外更改。

使用CDK,开发人员不仅可以指定基础设施,还可以指定运行时代码(如Lambda函数)、从开发到过渡再到生产的整个交付管道,以及每个阶段的配置,所有这些都在一个CDK应用程序中。对整个环境(包括管道)的每一次更改都通过这个单一应用程序进行,体现了GitOps理念。

在这一点上,Eric将接力棒交给了Mac Merit,后者深入探讨了亚马逊云科技中用于基础设施即代码治理和安全的具体工具和功能。Mac是亚马逊云科技 IAC组织的一名高级工程师,他带来了一名每天都在使用这些工具的工程师的视角,他的团队依赖基础设施即代码来部署基础设施,同时将安全性作为最高优先级。

从代码编写阶段开始,Mac介绍了CFN Lint,这是CloudFormation YAML和JSON模板的lint工具。Mac解释说,CFN Lint不仅仅是传统的lint,它还利用了每个CloudFormation资源的资源规范,提供语法高亮、基于对CloudFormation引擎本身的深入理解的最佳实践分析,并能够更快地发现潜在问题,从而提高生产力并向左移动。

在一个示例中,CFN Lint突出显示了一个没有明确定义删除策略的KMS密钥资源,这可能会导致意外删除和潜在的中断或安全问题。在另一个示例中,它标记了一个不必要的依赖关系,不仅提高了可读性,还能够利用当年早些时候引入的性能优化,一些客户报告部署速度提高了40%,因为允许CloudFormation优化依赖关系。

为了实施政策,Mac介绍了CloudFormation Guard,这是一种允许定义任意规则应用于模板的工具,用于监控和检查特定的最佳实践。使用前面的示例,Mac演示了编写一个Guard规则,以检查模板中是否存在任何资源星号语句,这可能会授予过于宽泛的权限,并运行它来识别和突出显示违规情况。

对于CDK用户,Mac讨论了CDK Nag,这是一种用于在CDK代码上实施政策的工具。当将CDK应用程序合成为CloudFormation模板时,传统的linter标记的问题将很难排查,因为开发人员会看到与他们的CDK代码中不存在的构造和资源相关的错误。CDK Nag提供了一种更加本地化的体验,在CDK本身内应用规则,并捆绑了各种标准(如HIPAA)的规则包。

Mac还强调了Amazon CodeGuru Developer,这是一种具有内置基础架构即代码理解能力和一流安全性和漏洞扫描功能的AI辅助编码工具。在一个示例中,CodeGuru识别出一个没有访问日志或SSL要求的S3存储桶,并提供了修复问题的建议,以及单击即可应用这些修复的能力。

从编写到部署,Mac讨论了基础架构即代码与持续集成/持续部署(CI/CD)之间的关系。虽然基础架构即代码可用于配置CI/CD管道,确保一致性和代码审查,但这些管道也可用于部署基础架构本身,利用CI/CD工具实现安全性、回滚、监控和测试。

起点是Amazon CodePipeline,这是配置CI/CD的高级工具,与其他亚马逊云科技工具(如Amazon CodeBuild)集成。虽然基础架构代码不需要传统的编译,但CodeBuild仍然通过软件组合分析和定义平台级检查(如前面的资源星号语句Guard规则)提供了价值,确保整个CI/CD过程的合规性。

CodePipeline还与CloudFormation功能(如Hooks)集成,Hooks是一种政策执行机制,要求每次部署都应用指定的钩子,除非被过滤掉。新功能(如基于lambda的自定义钩子和在堆栈时应用钩子的能力)在任何资源被触及之前就能捕获错误并快速失败,避免意外状态或痛苦的回滚。

Mac继续说,Change Sets提供了一种在部署之前预览更改的主动机制,现在增强了属性级别的解析和与CloudFormation Hooks的集成,允许钩子作为变更集的一部分运行,如果检测到违规,则使其失败。

对于监控已部署的基础架构,Drift Detection将资源的实时状态与模板中的期望状态进行比较,识别任何需要更新模板或实时资源以保持合规性的不一致情况。

扩展到多账户和组织部署,Mac介绍了CloudFormation StackSets,这是一种跨整个组织部署基础架构的工具,与Amazon Organizations原生集成。StackSets可以处理巨大的规模,每个堆栈集的默认限制为100,000个堆栈实例,并且持续改进,如Soft Concurrency Mode,使某些客户的部署速度提高了95%。CloudFormation开放存储库中的一个示例模板现在集中了所有部署问题的日志记录,使管理账户能够在不登录单个目标账户的情况下进行调试。

最后,Mac讨论了Amazon Control Tower,这不是一种传统的基础架构即代码工具,但是强烈建议将其作为一种最佳实践,在整个组织中一致地应用保护措施,如前面的资源星号检查。

通过这一全面的概述,Mac将话筒交给了Capital One的Ishu Gupta,分享他们在基础架构即代码方面的经历和经验。

Ishu是Capital One负责构建CI/CD管道和平台的软件工程总监,他首先提供了Capital One现代技术栈、创新产品以及作为第一家采用公有云的主要银行的背景信息。

回顾Capital One的DevOps之旅,Ishu描述了最初的孤立模型,团队负责管道的特定部分,如架构、工程、安全、质量和运营。虽然这种模式运行良好,但团队在孤岛中运作,导致了一些挑战,如运营团队寻求VHS团队来解决生产事故。

下一步是授权应用程序团队构建自己的管道,量身定制他们的用例。然而,这导致团队重复发明轮子,有些甚至雇佣了专门的DevOps工程师来维护他们的管道,偏离了预期目标。

Capital One随后采用了集中式方法,在业务线(LOB)级别构建CI/CD平台,这种方法相当成功,并在很大程度上实现了标准化,但仍有团队在孤岛中构建软件。

当前模型涉及整个公司的集中式CI/CD平台,允许应用程序团队专注于业务逻辑,而平台团队则处理样板代码、标准(如同行评审检查和开源软件漏洞扫描)以及部署最佳实践。这种方法运行良好,但随着亚马逊云科技不断推出新服务,Capital One看到了重新思考其策略并解决新出现的挑战的机会。

Ishu强调了Capital One现代化战略的三大支柱:将合规性逻辑与部署逻辑分离、转向使用Amazon CloudFormation、CDK和其他工具进行有状态和可组合的基础架构即代码部署,以及构建可重用架构模式的CDK构造的模式目录。

Ishu宣称,这带来了诸多好处。在签入阶段进行更早的合规性扫描可以为开发人员节省数小时的时间,使用声明式语法取代自定义SDK调用可以利用CloudFormation功能(如StackSets和Change Sets),而CloudFormation的幂等性则提供了高达20%的更快部署速度,因为它可以跳过未更改的资源。

Ishu还指出,能够利用亚马逊云科技服务的改进而无需额外投资,如当年CloudFormation依赖关系管理优化带来的40%性能提升。

为了实现大规模的基础架构即代码,Capital One构建了一个集中式CDK库,包含L2.5、L3和L4构造,以多种语言发布到二进制存储库,为开发人员提供无缝体验。回归套件确保发布的构造在开箱即用时就是合规的,自定义堆栈合成器强制执行了公司特定的IAM规则。

检测和资源发现功能至关重要,将部署数据流式传输到中央数据库并进行仪表板显示,使平台团队能够识别流行的模式并更密切地关注维护这些构造。开发人员还可以通过超链接存储库访问参考实现。

Ishu强调,建立实践社区至关重要,包括对CDK库的内部源码贡献、展示实现、量身定制的公司实践培训以及与亚马逊云科技团队合作,提供有关最佳实践的指导。

随着会议的结束,Eric Beard感谢与会者,鼓励他们填写会议调查,并表示愿意与Mac Merit和Ishu Gupta一起回答任何其他问题,巩固了他们分享专业知识和深入了解云中基础架构即代码治理和安全性的承诺。

下面是一些演讲现场的精彩瞬间:

Eric Beard是亚马逊云科技的一位解决方案架构师,他为一场关于基础设施代码工具及其在Capital One的采用情况的会议介绍了演讲者和主题。

ce383281831cc8ddf00d462d0451b7b5.png

演讲者承认在场观众的角色和职责各不相同,包括平台团队、开发人员、安全专业人员和业务领导。

fcfdd2b7d761b6acb9868d16848d3197.png

亚马逊云科技强调所有利益相关者之间的协作的重要性,包括业务、安全和合规团队,以实现成本节约、风险降低和云端强大的安全文化。

eee634093349801d7b4c2b4c02bc9293.png

强调在开发环境中使用合成数据而不是生产数据进行测试的重要性,以维护数据安全和隐私。

d04b0f192b55171059e9b50feec66183.png

采用DevSecOps,将开发、运营和安全融为一体,实现安全高效的代码交付。

ff11700481e0e957f6faabccb567dbf5.png

Amazon CloudFormation的声明式语法和标签集、变更集、幂等部署等功能使效率提高了10-20%。

7431c8513bab266293bd6cc044275519.png

演讲者感谢观众的到场,并强调亚马逊云科技服务如CloudFormation和云开发工具包可以帮助制定治理、安全和基础设施变更的策略和流程。

d3b006f478db1a27492b241048c9f0fa.png

总结

这篇演讲深入探讨了基础设施即代码(IaC)在实现有效的云基础设施治理和安全策略中的关键作用。它强调了自动化和采用DevOps实践的重要性,以简化软件交付流程,同时保持合规性和安全性。演讲重点阐述了IaC的优势,例如一致的部署、版本控制,以及利用开发人员工具(如代码审查和静态扫描器)。

演讲者概述了一个三阶段的基础设施变更交付流水线(开发、暂存、生产),在每个阶段都融入了安全检查和防护措施。亚马逊云科技服务(如CloudFormation、CDK、CodePipeline和CodeBuild)被介绍为实施IaC、实现策略执行、漂移检测和持续集成/持续部署(CI/CD)的重要工具。

演讲还以Capital One的案例研究为例,展示了他们集中化合规平台、利用CDK构造库以及围绕IaC采用培养实践社区的经历。主要好处包括早期合规性扫描、减少技术债务、更快的反馈循环和提高可靠性。

最后,演讲强调了采用IaC和DevOps方法在云端实现敏捷性、安全性和大规模治理的重要性,使组织能够快速行动,同时保持强大的安全态势。

亚马逊云科技(Amazon Web Services)是全球云计算的开创者和引领者。提供200多类广泛而深入的云服务,服务全球245个国家和地区的数百万客户。做为全球生成式AI前行者,亚马逊云科技正在携手广泛的客户和合作伙伴,缔造可见的商业价值 – 汇集全球40余款大模型,亚马逊云科技为10万家全球企业提供AI及机器学习服务,守护3/4中国企业出海。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值