前言

现代计算栈的出现从根本上改变了我们对安全的看法。在传统的数据中心时代,安全领域从业者会把软件应用程序比作欧洲中世纪的城堡:保护它们需要建造高大的城墙,其开放的小洞口守卫森严。基于云计算的现代软件架构看起来更像是一个熙熙攘攘的大都市:人们可以在其中自由移动,跨越其限制来消费和提供服务,买、卖、建造和修理各种东西。

正如今天的城市规划者所知,仅靠高墙和守卫森严的入口不足以保护一座城市。更好的方法需要引入更加广泛的、细粒度的可见性—例如,一个安全摄像头网络,再加上可以查看视频并对实时捕捉到的任何威胁做出响应。

本书主要关注现代应用程序的安全性,使用业界公认的云原生栈中的“安全摄像头”—开源工具Falco。Falco是一个提供云原生运行时安全的项目,旨在通过实时检测意外行为、入侵和数据窃取来保护运行在云中的软件。它是Kubernetes和云基础设施中威胁检测引擎的事实标准,被大量用户部署使用(从单机测试环境到最大的计算环境)。我们将带你了解如何通过检测云基础设施及工作负载中的威胁和错误配置来保护运行中的应用程序。

在本书中,我们有一个非常实际的目标:为你提供在实际环境中成功部署运行时安全所需的知识,无论环境的规模大小,你都可以使用Falco来实现。读完本书后,你将会对Falco的工作方式有一个深入的理解:不仅能够在任何环境中安装和部署Faclo,调优其性能,还可以根据你的特定需求来定制开发,收集并分析数据,甚至对Falco进行扩展。

谁应该阅读本书

本书主要面向希望在现代计算环境中实现生产环境中的运行时安全和威胁检测的安全工程师及架构师。但是,考虑到读者的工作背景差异,我们将本书设计为同样适用于在该领域经验有限或没有经验的读者。我们只要求读者掌握一些最基本的云计算服务、容器和Kubernetes的相关知识。

我们还将介绍一些更高级的主题,如大规模部署、优化和规则编写,即使是专家也会发现这些主题很有帮助。因此,即使你熟悉运行时安全,并且可能已经在使用Falco,本书也将帮助你进一步深入理解Falco。本书后面的一些章节要求读者具备Go等编程语言的基本知识,希望扩展或定制Falco的开发人员会在这里发现更多的价值。本书的最后一章面向那些正在考虑为Falco项目做出贡献的读者—希望本书能激励你加入贡献者行列!

如何阅读本书

本书分为四部分,按照内容的复杂程度递进的方式进行组织,每一部分都建立在前一部分的基础上。为了帮助你整体了解本书,让我们先来看看每部分的内容概览。

第一部分介绍Falco是什么以及它能做什么。我们将带领你理解Falco的基本概念,并指导你完成第一次本地部署:

• 第1章对Falco进行概述,从高层角度对其各项功能进行介绍,并对每个组件进行基本描述。该章会简要介绍Falco的发展历史以及促进它发展的工具。

• 第2章指导你在本地Linux机器上安装一个Falco实例。该章包括运行Falco并生成通知输出的说明。

第二部分介绍Falco的架构和内部工作方式:

• 第3章深入探讨Falco传感器的细节、数据收集过程以及数据处理过程中涉及的组件。该章将帮助你理解Falco的架构,这是本书后续内容的基础。

• 第4章介绍在Falco中使用的两种主要数据源:系统调用和插件。我们将解释这些数据源产生的数据是什么、如何收集数据以及Falco的收集栈与其他方法的比较。

• 第5章介绍Falco如何扩充其收集的数据。扩充包括向收集的数据添加上下文信息层,例如,容器ID、Kubernetes标签或云提供商标签。该章将介绍如何配置Falco来收集扩充元数据,以及如何自定义它来添加自己的元数据。

• 第6章介绍Falco中最重要的概念之一—过滤引擎,以及它的基础—字段。该章可以作为Falco语法(包括运算符)和字段的参考。

• 第7章介绍相应的规则和语法,包括自定义Falco时经常使用的列表和宏等结构。

• 第8章描述Falco向输出通道发送通知的机制、Falco中可用的通道,以及如何配置和使用它们。

第三部分是Falco用户的参考手册。这一部分将指导你在各种环境中部署、配置、运行和调优Falco:

• 第9章介绍如何在生产环境中安装Falco并给出详细说明。

• 第10章介绍Falco的配置系统是如何工作的。该章将帮助你理解和使用Falco设置,包括命令行选项、环境变量、配置文件和规则文件等。

• 第11章对云安全进行概述,然后详细介绍使用Falco的CloudTrail插件进行AWS威胁检测的方法。该章采用一种实用的方法,包括使用Falco设置云安全的清晰、完整的说明。

• 第12章介绍如何利用Falco的检测。该章涵盖帮助你处理Falco输出的工具,如falco-exporter和Falcosidekick,并帮助你了解哪些Falco事件对观测和分析有用,以及如何对它们进行处理。

第四部分是给开发者的参考资料,涵盖扩展Falco的方法:

• 第13章介绍如何自定义和扩展Falco的检测方法。你将学习如何根据实际需求编写新规则和调整现有规则。除了编写规则的基础知识,该章还涵盖降噪、性能优化和标签等高级主题。

• 第14章介绍如何使用Falco的源代码。该章首先简要介绍Falco代码库,然后深入探讨扩展Falco的两种重要方式:使用gRPC API和插件框架。你可以使用其中的示例作为编写自定义代码的基础。

• 第15章讨论Falco社区的情况并介绍如何为其做贡献。如果在读完本书后,你也像我们一样对Falco感兴趣,那将是我们梦寐以求的!

排版约定

本书中使用以下排版约定:

斜体(Italic

表示新的术语、URL、电子邮件地址、文件名和文件扩展名。

等宽字体(Constant width

用于命令行输入、程序清单,以及段落中涉及的命令和程序元素,例如变量名、函数名、数据类型和环境变量。

等宽粗体(Constant width bold

表示应由用户直接输入的命令或其他文本,有时也用于突出显示程序清单中感兴趣的文本。

等宽斜体(Constant width italic

表示应由用户提供的值或由上下文确定的值替换的文本。

该图示表示提示或建议。

该图示表示一般性说明。

该图示表示警告或注意。

示例代码

第14章的示例代码可以从https://oreil.ly/practical-cloud-native-security-falco-code下载。

这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,而不需要联系O’Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O’Reilly的示例代码则需要获得许可。引用本书的示例代码来回答问题也不需要许可,将本书中的很大一部分示例代码放到自己的产品文档中则需要获得许可。

非常欢迎读者使用本书中的代码,希望(但不强制)注明出处。注明出处时包含书名、作者、出版社和ISBN,例如:

Practical Cloud Native Security with Falco,作者Loris Degioanni和Leonardo Grasso,由O’Reilly出版,书号978-1-098-11857-0。

如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过permissions@oreilly.com联系我们。

O’Reilly在线学习平台(O’Reilly Online Learning)

40多年来,O’Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。

我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O’Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O’Reilly和200多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreilly.com

如何联系我们

对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。

美国:

O’Reilly Media,Inc.

1005 Gravenstein Highway North

Sebastopol,CA 95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

要询问技术问题或对本书提出建议,请发送电子邮件至errata@oreilly.com.cn

本书配套网站https://oreil.ly/practical-cloud-native-security-falco上列出了勘误表、示例以及其他信息。

关于我们书籍和课程的新闻和信息,请访问我们的网站https://oreilly.com

我们在LinkedIn上的地址:https://linkedin.com/company/oreilly-media

我们在Twitter上的地址:https://twitter.com/oreillymedia

我们在YouTube上的地址:https://www.youtube.com/oreillymedia

致谢

首先,我们发自内心地感谢Falco社区的成员,他们以惊人的热情投入了大量的时间来维护和发展这个项目,许许多多的贡献者让Falco每一天都变得更好,项目的用户和支持者给了Falco良好的发展机会和许多有价值的反馈。显然,Falco是大家热情和才华的结晶,如果本书能够展现出大家在背后付出的辛勤工作,那将是我们的荣幸。

当然也要感谢云原生计算基金会为Falco提供了良好的发展环境和大力支持。

还要感谢在本书写作过程中给予我们帮助和支持的人,特别是我们的项目经理Tammy Yue和O’Reilly的编辑Sarah Grey。他们不仅非常专业和乐于助人,而且非常亲切、有耐心,他们的建议也富有建设性。和他们一起工作真的很愉快。

最后,如果没有我们所在的Sysdig公司的支持,本书是不可能完成的。我们非常荣幸能为这样一个组织工作,它不仅理解开源,而且还十分积极地支持开源,并接受我们的信念:安全的未来是开放的。

Leonardo

有一天,当我和Loris谈话时,他提议我们应该一起写本书,所以这里我得先感谢他。和他一起实现这个想法非常有挑战性,但同时也是我一生中做过的非常有趣的事情。我们再合作一次怎么样?作为第一次写书的作者,本书对我来说是一次不可思议的新冒险,如果没有家人的帮助和爱,这是不可能完成的。所以,我要感谢我那光芒四射、深爱着我的Ada,是她一直支持我,并生下了我们可爱的小Michelangelo。我也要感谢他,因为他一直在妈妈的肚子里等待着,直到他爸爸写完这本书。还要感谢我们的小猫。感谢他们陪我度过了这段充满耐心和快乐的旅程。

最后,我也要感谢我的父母、姐姐、叔叔。他们总是相信我、支持我,在我需要的时候及时地帮助我。没有他们我是做不到的,真的。

Loris

我要感谢我的妻子Stacey,她是我一生的挚爱,感谢她对我所做的一切抱有耐心并坚定支持。

我还要感谢我的三个孩子—Josephine、Vincenzo和August,他们给我的生活带来了欢乐,当然包括为本书工作所花的时间。他们几个经常提出问题并打断我,这使得本书的写作更具挑战性,但这也是更令人愉快的体验。我期待着读他们长大后出版的书。

我要感谢我的父母在我的职业生涯初期(以及过去)给予我的支持。如果没有他们多年前播下的种子,用爱和慷慨浇灌,我今天也没有机会写这篇前言。

如果没有我的伙伴Leo,就不可能有这本书。我们两个人不得不花很多时间在一起才完成了这项工作,与他在一起的每一分钟都是愉快的、有建设性的和有趣的。Leo,我期待着在未来能和你一起做更加有趣、更有野心的项目。