前言

如果一个系统没有基本的安全性,那么它真的可以被认为是可靠的吗?或者说,如果一个系统不可靠,那么可以认为它是安全的吗?

成功地设计、实现和维护系统需要投入整个系统生命周期中,而只有当系统架构具备安全性和可靠性这两个核心要素时,投入才会有效果。然而,我们往往在事后才会考虑到这两者,这使得改进过程困难重重,而且往往要付出高昂的代价。

随着越来越多的产品连接到互联网,云技术也变得越来越普遍,基于安全的设计(security by design)的概念就变得越来越重要了。我们越依赖系统,系统就越需要可靠;我们越信任系统的安全性,系统就越需要安全。

系统

本书大致介绍了系统,它通常指一组用于执行功能的组件。在系统工程环境中,这些组件通常包括在各种计算机的处理器上运行的软件片段,还可能包括硬件本身以及人们设计、实施和维护系统的过程。排查系统的运行状况非常困难,因为它们很容易出现复杂而又紧急的情况。

写作初衷

我们想写一本专注于将安全性和可靠性集成于软件和系统生命周期的书,并在其中强调与安全性和可靠性相关的技术和实践,同时阐述这些实践之间是如何相互关联的。本书旨在分享安全性和可靠性专家在系统设计、实现和维护方面的见解。

要明确的一点是,本书所建议的一些策略需要基础设施的支持,而这些可能在你目前所在的公司里根本不存在。我们会尽可能地为不同规模的组织提供适用的建议,但我们认为,就如何在实践中提升安全性和可靠性来展开交流非常重要。这是因为随着专业社区的不断壮大和技术的不断精湛,所有成员都可以从彼此身上学习到很多内容。我们希望其他组织也乐于在社区中分享自己的成功故事和经验。随着安全性和可靠性的观念不断发展,整个行业都能从各种各样的实践案例中获益。安全性和可靠性工程仍在迅速发展中。我们将不断地遇到一些新的状况和案例,促使我们修正(甚至在某些情况下取代)过去坚信的观点。

读者对象

因为安全性和可靠性是每个人的责任,所以本书面向的受众非常广泛,包括所有设计、实现和维护系统的人。本书尝试打破专职开发人员、架构师、网站可靠性工程师、系统管理员和安全工程师之间的传统界限。尽管本书将深入探讨一些跟经验丰富的工程师更相关的主题,但请你在阅读不同章节时,尝试站在不同的角度来思考,忘掉自己现有的身份,通过这样的视角来思考如何提升系统。

我们认为,每个人在开发的初始阶段就应该考虑可靠性和安全性,并在系统生命周期的早期就运用书中的原则。这个关键概念是本书的立足之本。安全工程师越来越像软件开发人员,网站可靠性工程师和软件开发人员则越来越像安全工程师,业界对于这种现象的探讨非常热烈 1,我们也邀请你加入这些对话中来。

1举几个例子:Dino Dai Zovi 在 2019 年美国黑帽大会上演讲的议题“Every Security Team Is a Software Team Now”,开放安全大会的 DevSecOps 分会场,以及 Dave Shackleford 为 SANS Analyst 项目所写的论文“A DevSecOps Playbook”。

本书中提到的“你”,指的就是读者,与职位和经验水平无关。本书打破了对于传统工程角色的期望,目的是使你能够在整个产品生命周期中对安全性和可靠性负责。你不必纠结是否需要在特定的情况下借鉴本书的实践经验。我们鼓励你在职业生涯的不同阶段或者组织的发展过程中重温本书,并考虑一下起初觉得平淡无奇的观点在后来是否有了新的解读。

关于文化的提示

建立和采用本书所推荐的最佳实践,需要一种鼓励变化的文化。我们认为,在针对安全性和可靠性进行技术选型时,有必要兼顾组织文化,这样才能使你所做的任何调整都能够持久且弹性可变。既不重视安全性也不要求可靠性的组织是需要改变的,而改变组织本身的文化往往需要前期的投入。

我们在整本书中都结合了技术最佳实践,并为此提供了数据支持,但它不包括以数据为支撑的企业文化最佳实践。尽管本书提出了其他组织可以适应或涵盖的方法,但是每个组织都有其独特的文化。Google 在这种文化中的过往实践可能并不能直接适用于你的组织,我们鼓励你根据本书提供的抽象建议提炼出你自己的实践方式。

如何阅读本书

尽管本书包含许多案例,但它并不是一本手册式的书。本书讲述了 Google 及业界的故事,并分享了我们多年来的经验。每个系统的基础架构都不同,因此你可能需要对我们提供的一些解决方案进行大幅度的调整,一些解决方案甚至可能根本不适用于你的组织。我们尝试提供抽象的原则和实用的解决方案,你可以采用适合自身独特环境的方式来实现它们。

我们建议你从第 1 章和第 2 章开始阅读,然后挑选最感兴趣的章节。大多数章节以带框的前言或摘要开头,其中概述了以下内容。

◆ 问题陈述。

◆ 在软件开发生命周期中,你应该采取的原则和实践。

◆ 关于可靠性和安全性之间的结合和权衡的思考。

每一章均从最基础的内容入手,逐渐过渡到最复杂的内容,其中深奥的部分会使用爬行动物图标来标识。

本书推荐了许多被认为是业界最佳实践的工具或技术,然而并非每种想法都适合你,因此你应该根据自身项目的需求,设计适合自身风险状况的解决方案。

虽然本书独立成册,但你可以从《SRE:Google 运维解密》和《Google SRE 工作手册》中找到参考资料,其中有来自 Google 的专家阐述了可靠性对服务设计的重要性。阅读这些书可以让你对本书中的一些概念有更深入的了解,不过并非前提条件。

我们希望你能喜欢本书,因为本书能帮助你提高系统的可靠性和安全性。

排版约定

本书使用以下排版约定。

黑体

  表示新术语或重点强调的内容。

等宽字体(constant width)

  表示程序片段,以及正文中出现的变量、函数名、数据库、数据类型、环境变量、语句和关键字等。

等宽粗体(constant width bold

  表示应该由用户输入的命令或其他文本。

等宽斜体(constant width italic)

  表示应该由用户输入的值或根据上下文确定的值替换的文本。

 该图标表示一般注记。

 该图标表示深奥的内容。

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

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

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

联系我们

请把对本书的评价和问题发给出版社。

美国:

  O'Reilly Media, Inc.

  1005 Gravenstein Highway North

  Sebastopol, CA 95472

中国:

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

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

O'Reilly 的每一本书都有专属网页,你可以在那儿找到本书的相关信息,包括勘误表、示例代码以及其他信息。本书的网站地址是:https://oreil.ly/buildSecureReliableSystems

对于本书的评论和技术性问题,请发送电子邮件到:bookquestions@oreilly.com

要了解更多 O'Reilly 图书、培训课程、会议和新闻的信息,请访问以下网站:https://www.oreilly.com

我们在 Facebook 的地址如下:http://facebook.com/oreilly

请关注我们的 Twitter 动态:http://twitter.com/oreillymedia

我们的 YouTube 视频地址如下:http://www.youtube.com/oreillymedia

致谢

本书是约 150 人的热情和慷慨贡献的结晶,其中包括作者、技术作家、编辑,以及来自工程、法律和市场等领域的审阅者。贡献者遍布美洲、欧洲和亚太地区的十多个办事处,跨越了 18 个时区。我们想花些篇幅来感谢一些人,他们未在章首列出。

作为 Google 安全和 SRE 的领导者,Gordon Chaffee、Royal Hansen、Ben Lutch、Sunil Potti、Dave Rensin、Benjamin Treynor Sloss 和 Michael Wildpaner 是 Google 内部的发起人。他们致力于将安全性和可靠性直接集成到软件和系统生命周期中,这一信念对于完成本书至关重要。

如果没有 Ana Oprea 的推动和奉献,就不会有本书。她意识到本书的价值,因此在 Google 内部提出了想法并向 SRE 和安全负责人宣讲,为促成本书写作组织了很多必要的工作。

我们希望在此感谢为本书提供深入的思考、讨论和审查的人,他们的名字按章列出,如下所示。

◆ 第 1 章——Felipe Cabrera、Perry The Cynic 和 Amanda Walker

◆ 第 2 章——John Asante 和 Mike Koivunen

◆ 第 3 章——Amaya Booker、Michał Czapiński、Scott Dier 和 Rainer Wolafka

◆ 第 4 章——Felipe Cabrera、Douglas Colish、Peter Duff、Cory Hardman、Ana Oprea 和 Sergey Simakov

◆ 第 5 章——Paul Guglielmino 和 Matthew Sachs

◆ 第 6 章——Douglas Colish、Paul Guglielmino、Cory Hardman、Sergey Simakov 和 Peter Valchev

◆ 第 7 章——Adam Bacchus、Brandon Baker、Amanda Burridge、Greg Castle、Piotr Lewandowski、Mark Lodato、Dan Lorenc、Damian Menscher、Ankur Rathi、Daniel Rebolledo Samper、Michee Smith、Sampath Srinivas、Kevin Stadmeyer 和 Amanda Walker

◆ 第 8 章——Pierre Bourdon、Perry The Cynic、Jim Higgins、August Huber、Piotr Lewandowski、Ana Oprea、Adam Stubblefield、Seth Vargo 和 Toby Weingartner

◆ 第 9 章——Ana Oprea 和 JC van Winkel

◆ 第 10 章——Zoltan Egyed、Piotr Lewandowski 和 Ana Oprea

◆ 第 11 章——Heather Adkins、Betsy Beyer、Ana Oprea 和 Ryan Sleevi

◆ 第 12 章——Douglas Colish、Felix Gröbert、Christoph Kern、Max Luebbe、Sergey Simakov 和 Peter Valchev

◆ 第 13 章——Douglas Colish、Daniel Fabian、Adrien Kunysz、Sergey Simakov 和 JC van Winkel

◆ 第 14 章——Brandon Baker、Max Luebbe 和 Federico Scrinzi

◆ 第 15 章——Oliver Barrett、Pierre Bourdon 和 Sandra Raicevic

◆ 第 16 章——Heather Adkins、John Asante、Tim Craig 和 Max Luebbe

◆ 第 17 章——Heather Adkins、Johan Berggren、John Lunney、James Nettesheim、Aaron Peterson 和 Sara Smollet

◆ 第 18 章——Johan Berggren、Matt Linton、Michael Sinno 和 Sara Smollett

◆ 第 19 章——Abhishek Arya、Will Harris、Chris Palmer、Carlos Pizano、Adrienne Porter Felt 和 Justin Schuh

◆ 第 20 章——Angus Cameron、Daniel Fabian、Vera Haas、Royal Hansen、Jim Higgins、August Huber、Artur Janc、Michael Janosko、Mike Koivunen、Max Luebbe、Ana Oprea、Andrew Pollock、Laura Posey、Sara Smollett、Peter Valchev 和 Eduardo Vela Nava

◆ 第 21 章——David Challoner、Artur Janc、Christoph Kern、Mike Koivunen、Kostya Serebryany 和 Dave Weinstein

在此也特别感谢 Andrey Silin 对整本书的指导。

以下审阅者一路指引着我们,并提供了宝贵的见解和反馈:Heather Adkins、Kristin Berdan、Shaudy Danaye-Armstrong、Michelle Duffy、Jim Higgins、Rob Mann、Robert Morlino、Lee-Anne Mulholland、Dave O'Connor、Charles Proctor、Olivia Puerta、John Reese、Pankaj Rohatgi、Brittany Stagnaro、Adam Stubblefield、Todd Underwood 和 Mia Vu。特别感谢 JC van Winkel 检查了全书的一致性问题。

我们也感谢以下贡献者,他们提供了丰富的专业知识或资源,或者为本书做出了出色的贡献:Ava Katushka、Kent Kawahara、Kevin Mould、Jennifer Petoff、Tom Supple、Salim Virji 和 Merry Yen。

我们非常感谢外部的定向审阅者 Eric Grosse 的指导,他帮助我们在创新性和实用性建议之间取得了良好的平衡。我们同时还收到业界对本书非常有效的反馈,这些反馈来自以下审阅者:Blake Bisset、David N. Blank-Edelman、Jennifer Davis 和 Kelly Shortridge。以下人员的深度审阅让每一章对于读者来说都更有针对性:Kurt Andersen、Andrea Barberio、Akhil Behl、Alex Blewitt、Chris Blow、Josh Branham、Angelo Failla、Tony Godfrey、Marco Guerri、Andrew Hoffman、Steve Huff、Jennifer Janesko、Andrew Kalat、Thomas A. Limoncelli、Allan Liska、John Looney、Niall Richard Murphy、Lukasz Siudut、Jennifer Stevens、Mark van Holsteijn 和 Wietse Venema。

另外,特别感谢 Shylaja Nukala 和 Paul Blankinship,他们非常慷慨地贡献了时间和关于 SRE 与安全技术写作团队的技能。

尽管其工作内容没有直接体现在书中,但我们仍要感谢下列贡献者:Heather Adkins、Amaya Booker、Pierre Bourdon、Alex Bramley、Angus Cameron、David Challoner、Douglas Colish、Scott Dier、Fanuel Greab、Felix Gröbert、Royal Hansen、Jim Higgins、August Huber、Kris Hunt、Artur Janc、Michael Janosko、Hunter King、Mike Koivunen、Susanne Landers、Roxana Loza、Max Luebbe、Thomas Maufer、Shylaja Nukala、Ana Oprea、Massimiliano Poletto、Andrew Pollock、Laura Posey、Sandra Raicevic、Fatima Rivera、Steven Roddis、Julie Saracino、David Seidman、Fermin Serna、Sergey Simakov、Sara Smollett、Johan Strumpfer、Peter Valchev、Cyrus Vesuna、Janet Vong、Jakub Warmuz、Andy Warner 和 JC van Winkel。

感谢 O'Reilly Media 团队的 Virginia Wilson、Kristen Brown、John Devins、Colleen Lobner 和 Nikki McDonald,他们的帮助和支持让本书面世。感谢 Rachel Head 出色的编辑经验。

最后,本书的核心写作团队想在此表示个人感谢。

Heather Adkins

  经常有人问我 Google 是如何确保安全的,我能给出的最简短的回答是:员工的多样化是 Google 保卫自身的关键能力。本书正是这种多样性的反映,我相信这一生再也找不到比 Google 团队更好的防御团队了。特别感谢我的好丈夫 Will(加 42 个赞!)、母亲 Libby、父亲 Mike 和兄弟 Patrick,以及专门制造错别字的 Apollo 和 Orion。感谢我在 Google 的团队和同事在我撰写本书时容忍我的缺席,你们在面对强大对手时非常坚韧。感谢 Eric Grosse、Bill Coughran、Urs Hölzle、Royal Hansen、Vitaly Gudanets 和 Sergey Brin 在过去超过 17 年的指导、反馈以及偶尔的质疑。感谢我亲爱的朋友和同事 Merry、Max、Sam、Lee、Siobhan、Penny、Mark、Jess、Ben、Renee、Jak、Rich、James、Alex、Liam、Jane、Tomislav 和 Natalie,特别是 r00t++ 的鼓励。感谢 John Bernhardt 博士,你教了我很多,很抱歉我还没有取得学位!

Betsy Beyer

  感谢每天激励我的祖母、Elliott、Aunt E 和 Joan,你们都是我的英雄。感谢 Duzzie、Hammer、Kiki、Mini 和 Salim,你们积极而清晰的检查让我保持清醒。

Paul Blankinship

  感谢支持我的 Erin 和 Miller,以及让我笑个不停的 Matt 和 Noah。我想对在 Google 的朋友和同事表示感谢,特别是我的技术作家,你们为概念和表述而反复斟酌,并且要为“小白”读者同时扮演专家和提倡者两种角色。非常感谢本书的其他作者,我钦佩你们每一个人,能与你们相提并论是我的荣幸。

Susanne Landers

  感谢本书的所有撰稿人,言语已无法表达我作为参与者所感到的荣幸。没有这些人就没有我的今天,Tom 寻得了这次机会,Cyrill 教会了我一切,Hannes、Michael 和 Piotr 邀请我加入最棒的团队 Semper Tuti !感谢带我去喝咖啡的你(你知道我说的人是你!),如果没有你,生活将极其无聊。感谢 Verbena,她比任何人都更能成就我。最重要的是,感谢我生命中的挚爱,感谢你的无条件支持和我们最神奇、最优秀的孩子。我不知道于你们而言是否值得,但我会尽我所能做到最好。

Piotr Lewandowski

  感谢每一位让世界变得更美好的人。感谢我的家人给予的无条件的爱,感谢我的伴侣与我分享生活中的喜怒哀乐,感谢我的朋友给我带来欢乐。感谢我的同事,你们无疑是我工作中最棒的部分。感谢我的导师一直以来的信任。如果没有你们的支持,我就无法完成本书。

Ana Oprea

  献给即将在本书出版之际出生的小家伙。感谢我的丈夫 Fabian,当我们组建家庭时,无论是撰写本书还是其他事情,他都一直支持我。感谢我的父母 Ica 和 Ion,你们比我更懂我自己。本书证明,如果没有一个开放、有建设性的反馈环是不会取得进展的。本书是基于我过去的经验来编撰的,因此要感谢我的经理 Jan 以及整个基础设施研发团队,你们信任我,让我能将精力集中于集成安全性、可靠性和研发工作中。最后,还要由衷感谢 BSides Munich 和 MUC:SEC 这两个对我帮助颇多的社区,在那里我不断地学习和成长。

Adam Stubblefield

  感谢我的妻子、家人以及过去这些年来帮助我的同事和导师。

译者致谢

刘志颖

感谢我的合作伙伴和编辑老师们,在大家的共同努力下才能顺利完成本书的翻译,特别感谢 Martin(周雨阳)在翻译过程中对我提供的无私帮助。感谢我的另一半郭静晖,如果没有她的爱和支持,可能无法让翻译工作坚持下来。感谢腾讯 PCG 应用安全团队的小伙伴们,特别感谢 ruilin 一直以来的工作指导,让我更好地理解本书。感谢在腾讯遇到的各位老师和挚友,特别是 lake2 和 gmxp 二位在翻译过程中的鞭策。

更多信息

扫描下方二维码,即可获取电子书相关信息及读者群通道入口。