Version:2.0Created:12Jan2022Status:WIP|InReview| Approved LastReviewed:16May2022,PDFPublished:17May2022 ReleaseVersion:2.0 FinalPDFApprovers[X]@TheFoxAtWork[X]@justincormack Version2(May2022) •Contributors:BrandonKrieger,ColeKennedy(TestifySec),FatihDeğirmenci(EricssonSoftwareTechnology),FrederickKautz,JoelBork,MarinaMoore(NYU),mateuszpruchniak@gmail.com,PushkarJoglekar(VMware),raja.faisal@gmail.com,SavithaRaghunathan(RedHat),SayantaniSaha(Independent) •Reviewers:JonZeolla,@nyrahul(Accuknox),RagashreeShekar,StevenHadfield,KapilBareja,MaliniBhandaru,MikkoYlinen,JonahKowall(@jkowall),KuangDahu,ArielShuper,EricLi(AlibabaCloud),TannerRandolph(AppliedSystems),MarkDaltonGray(Microsoft),CiaraCarey,BrandonLum(TAGSecurityChair),EmilyFox(TOCLiaison)andJustinCormack(TOCliaison). Version2inChinese(September2023) •Translatorandreviewers:@aiaicaow,@babysor,@cafra,@dwctua,@gtb-togerther,@hbrls,@jinjia,@knwng,@losery,@lovepoem,@n3erox0,@rootsongjc,@victorjunlu,@yzyunzhang(GitHubIDs) 目录 执行摘要4 宗旨4 生命周期阶段4 推荐做法6 结论6 介绍7 目标受众7 云原生目标7 文档前提8 云原生层次模型9 生命周期10 开发10 分发12 部署17 运行时环境18 安全保障31 威胁建模31 用例:勒索软件(v2新增)35 安全原则38 安全栈(v2新增)44 合规44 监管审计44 角色和用例44 行业45 用例:在欧盟法规下安全的保障金融机构运行v2新增46 云原生安全的演变48结论50 缩略语和词汇表51 附录53 版本一总结v2新增53 新版本变化53 反馈v2新增53 安全软件开发框架(SSDF)v1.1参考(v2新增)54 参考文献55 致谢57 执行摘要 宗旨 技术行业已经转向被看作“云原生”的开发和部署模式。与此同时,技术、产品、标准和解决方案的生态系统正在扩展,促使决策者及时了解最新的复杂设计。特别是CISO的角色,需要在这个动态的领域中阐明业务价值主张。与此同时,云原生模式也推动了消费模型的转变,促进了现代工作流程的应用。现代工作流程要求集成安全实践,例如敏捷方法论和DevOps流程。 问题分析 由于明确关注快速开发和部署,因此该领域内的安全问题很复杂。此外,在传统的基于边界的安全模型中,依赖于网络IP地址等静态标识符是不切实际的。这种复杂性要求我们进行范式转变以保护应用程序安全,放弃基于边界的传统方式,让安全和工作负载(基于标签和标记等属性和元数据进行标识)的联系更加紧密。这种方法可以识别和保护负载,满足云原生应用程序对规模的要求,同时适应不断的变化。这些范式转变需要在应用程序生命周期中增加安全控制的自动化和安全设计架构(例如,零信任)。安全实现的权衡仍然涉及组织内的多个利益相关者,并且显著影响开发人员和运营人员追求业务目标的生产力。云原生应用程序仍然需要开发、分发、部署和运行时操作,但是这种范式指定了新的安全机制,通过这些机制可以高效地实现这些目标。云原生开发可以建模为构成应用程序生命周期的不同阶段:“开发”、“分发”、“部署”和“运行时”。“云原生安全”与传统的安全方法不同,因为有一个巨大的机会,可以确保安全贯穿于这些不同阶段,而不是通过独立的安全管理干预来结束生命周期。这些概念、工具和过程的持续学习对长期采用和应用至关重要。 生命周期阶段 开发 云原生工具旨在在应用程序生命周期的早期引入安全性。安全测试需要尽早识别合规性违规和错误配置,以创建短且可行的反馈循环,以实现持续改进。这种方法可以使安全故障遵循熟悉的工作流程,在管道中解决其他问题(例如错误修复或连续集成故障),然后才能将软件推向更深入的管道。这种模型的现代安全 生命周期围绕遵循推荐设计模式的代码开发(例如12因素),并确保开发环境的完整性。 分发 软件供应链安全在支持更快软件迭代的模型中尤为重要。云原生应用程序生命周期需要包括验证工作负载本身的完整性以及工作负载创建和操作方式的方法。这个挑战被必要的、实际的和一致的使用开源软件和第三方运行时镜像(包括上游依赖的层)所放大。生命周期管道中存在的工件(例如容器镜像)需要持续自动扫描和更新,以确保免受漏洞、恶意软件、不安全的编码实践和其他不良行为的影响。完成这些检查后,将工件进行加密签名以确保完整性并强制执行不可否认性非常重要。值得注意的是,不可变的镜像二进制和镜像的不可变URL也非常适合于安全分发。 部署 在整个开发和集成发布阶段,应对候选工作负载的安全性进行实时和持续的验证,如,对签名的工件进行校验,确保容器镜像安全和运行时安全,并可验证主机的适用性。安全工作负载的监控能力,应以可信的方式监控日志和可用指标,与工作负载一同部署来完善整体的安全性。 运行时 云原生运行环境本身可以分解为一系列相互关联的具有独特安全问题1的组件层次结构,例如硬件、主机、操作系统、网络、存储、容器镜像运行时和编排。容器运行时由不同的实现组成,用于各种隔离边界级别,例如共享内核、微型虚拟机沙盒和可信执行环境沙盒。选择满足预期安全要求的运行时非常关键。例如,对于在多租户环境中运行的不受信任的工作负载,可以考虑基于虚拟机的沙盒。对于隐私敏感的金融数据处理,像机密容器这样的可信执行环境(每个进程或虚拟机的内存加密硬件)可能值得考虑。在典型的云原生运行环境中,应用程序通常由几个独立的且单一用途的微服务组成,它们通过服务层抽象相互通信,容器编排层使其成为可能。保护这种相互关联的组件体系结构的最佳 1另一个要考虑的模型是,云、集群、容器和代码: https://kubernetes.io/docs/concepts/security/overview/ 实践包括确保只有经过授权的进程在容器命名空间内运行,防止和警报未经授权的资源访问尝试,以及监控网络流量以检测敌对入侵活动。服务网格是另一种抽象,提供了合并和补充有序服务的功能,而无需对工作负载软件本身进行更改(例如,API流量记录、传输加密、可观察性标记、身份验证和授权)。 推荐做法 云原生安全旨在确保与传统安全模型相同或更高的勤勉、诚信、信任和威胁预防条件,同时融合了瞬息万变、分布式和不可变性的现代概念。在这些快速变化的环境中,为了确保安全结果,需要与开发流水线保持一致的自动化。组织应快速采用这些云原生概念,以帮助在其云原生旅程中创造价值驱动的安全结果。通过尽早将安全整合到开发生命周期中,甚至是通过互动式开发者培训更早地进行整合,安全组织可以实现预防性安全,而不是反应性安全(也可参见“9BoxofControls”)。强烈建议组织根据相关攻击框架2对安全堆栈进行评估,以明确防御堆栈涵盖哪些威胁。此外,组织需要采用能够左移安全3的方法和方法论,实现DevOps,并具有足够的灵活性以适应未来的技术进步。 结论 在组织中战略性地实施云原生安全时,可以在规模上为客户和开发人员提供高可用性、保证性、弹性和冗余性,以确保他们以预期的速度安全地访问所需资源。安全本身仍然是一个跨学科的领域,不能被隔离出来,也不能被视为纯粹的技术领域。开发人员、运维人员和安全人员必须合作、交流和协作,以继续推动该领域和行业的发展。与任何技术创新一样,真正推动社区和云原生安全发展的是那些充满激情踏上这一旅程的人们。 2例子-MITREATT&CKFrameworkforKubernetes 3安全左移通常会使组织失去操作安全监控。重要的是,安全贯穿于整个生命周期,组织不断评估其业务和技术流程的其他方面,在这些方面他们可能超越现代安全范式,将安全作为一种文化和习惯。 介绍 本文旨在为组织和其技术领导层提供云原生安全的简明解释,以及帮助他们将其融入生命周期过程并考虑最适用的应用。云原生安全是一个多目标且多限制的问题领域,涵盖了许多专业和实践领域。从身份管理到存储解决方案,几乎所有的Day1和Day2的操作都与安全领域有关。然而,云原生安全涵盖的领域不止于此;它也是一个涉及个人、团队和组织的人类问题领域。它涉及人类和系统与云原生应用和技术进行交互、更改的机制、过程和意图。 目标受众 我们的目标受众是私营企业、政府机构或非营利组织的首席(信息)安全官(CISO)或首席技术官(CTO),他们希望提供一个安全的云原生技术生态系统。除此之外,其他组织利益相关者可能包括负责设计和实施安全的云原生产品和服务的项目、产品和方案经理以及架构师。此外,任何对云原生安全有浓厚兴趣的人都可以从参考本文中受益。 云原生目标 云原生架构是一组模式和设计,为组织提供了一种有效、可持续的无缝抽象,可跨不同的云实例工作,使应用程序栈成为云无关的。容器和微服务架构的采用和创新带来了许多挑战。安全领导人的任务是通过采用预防、检测和应对网络威胁的最佳实践来保护人类4和非人类的资产,同时满足严格的合规要求。一个常见的历史叙事是,安全实施妨碍了DevOps团队的速度和敏捷性。因此,安全领导必须实现更紧密的集成和双向理解,赋予DevOps团队创建共享的网络风险所有权的能力。 组织应该在现代应用程序开发生命周期中采用安全的云原生模式和架构。特别强调安全架构与组织安全目标之间的协同作用,如零信任、安全软件供应链和DevSecOps,在云基础设施方面应该优先考虑安全。 4人力资本是任何组织成功所必需的重要资产,由此带来的相应知识产权和关系资本同样需要保护。 本文所描述的概念并不旨在偏袒一种服务、组件或产品,而是可以应用于任何服务选择。 本文档不会提供关于安全或云计算的概念方面的一般教育。也不推荐使用特定的技术或工具。但可能会引用一些解决所讨论主题的技术或工具的示例。 除了本文中的建议外,与数据保护和隐私监管法规要求相关的特定数据安全处理实践,如GDPR、PCIDSS,可能需要额外的监管特定考虑因素。我们建议读者通过其他适当的专业咨询资源,以获取有关任何此类技术控制和合规风险事项的指导。 文档前提 本文档中的术语“工作负载Workload”涵盖了已经或将要开发、维护、分发或部署到基于云的运行时环境的任何产品、项目、应用和系统。 所有使用的术语、概念和机制都按照《云原生安全词汇表》和 《云原生词汇表》的定义。本文不旨在改变这些定义或扩展它。 随着云原生采用和现代软件开发方法的不断发展,构成有效云原生栈的技术将继续随着时间的推移而变化。这种变化栈的表现包含在全面的CNCF景观中。 云原生层次模型 图1 云原生技术栈由基础设施层、全生命周期管理、运行环境组成。云原生技术栈可以适用于不同的云计算服务模式:IaaS、PaaS、CaaS和FaaS。每种服务部署模式都提供了额外的抽象,以简化云原生环境的管理和操作。由于这些服务模式中的一些模