云基础设施的快速采用从根本上改变了企业构建和管理其 IT 资源的方式。随着组织越来越多地采用多云战略和复杂的混合部署,安全性、合规性和运营卓越性方面的挑战呈指数级增长。在 ICT.technology,我们观察到,成功的云采用和数据中心运营不仅仅需要技术专长——它还需要一个系统化的基础设施部署方法,以专门应对这些挑战。一些企业已经以惨痛的代价学到了这一课。
七台服务器如何让华尔街巨头轰然倒塌
2012 年 7 月 31 日,Knight Capital Group 正处于巅峰时期。作为华尔街最大的交易公司之一,它控制着纽约证券交易所 (NYSE) 17.3% 的交易量和纳斯达克 (NASDAQ) 16.9% 的交易量,每天交易近 40 亿股。其声誉刚刚因获得《Wall Street Letter》颁发的 Knight Direct 算法和 Hotspot FX 交易平台奖项而得到加强。生活一片美好。
然后,2012 年 8 月 1 日的早晨到来了。本应是一次针对八台服务器的例行软件部署,最终演变成了金融史上最昂贵的 45 分钟之一。问题并不在于新代码本身,而在于它与某些服务器上残留的旧功能的交互方式——一颗随时可能被引爆的数字定时炸弹。
在 8 月 1 日之前,Knight Capital 仍然保留着一段名为 "Power Peg" 的旧代码,该代码已被禁用,理论上不再使用。尽管它已通过标志位 (flag) 进行了禁用,但底层代码仍然存在——而且存在严重缺陷。
因此,团队计划在夜间维护窗口期间进行新的服务器部署,以避免对交易日造成干扰。
2012 年 7 月 31 日,他们开始在八台服务器上部署新的交易软件。然而,这次部署并不一致:
- 七台服务器正确部署了新代码。
- 一台服务器没有部署新软件,该服务器被遗忘了。
- 软件更新意外地重新激活了旧的 Power Peg 标志。
结果是,一些服务器运行着新代码,而一台服务器仍然运行着旧代码。那台仍然运行旧代码的服务器继续使用测试数据进行交易——但它生成的却是真实的交易指令。
当市场开盘时,混乱爆发了。
Knight Capital 的交易系统出现严重故障,以惊人的速度执行错误交易。在短短 45 分钟内,其自动化交易系统触发了超过 400 万笔非预期交易。
结果?令人震惊的 4.6 亿美元损失,这一事件被 Business Insider 和 Bloomberg 等媒体广泛报道。Knight Capital 的股价在一天内暴跌 32.8%。
后果极其惨烈。为了避免破产,该公司不得不紧急筹集 4 亿美元资金。2013 年 10 月 15 日,美国证券交易委员会 (SEC) 结束调查,并以违反交易规定、缺乏适当的安全保障为由,对其处以 1200 万美元的罚款。
最具讽刺意味的是,这场灾难本可以通过适当的基础设施自动化和部署实践来避免。手动服务器配置、不一致的部署以及缺乏合适的测试环境,共同构成了一场完美风暴。仅仅七台服务器——就足以让一家每日交易近 40 亿股的公司轰然倒塌。
这一事件是一个令人警醒的教训,说明为什么现代基础设施供应工具(如 Terraform)至关重要。如果仅仅几台服务器的配置不一致就能造成近 5 亿美元的损失,那么手动管理基础设施、抱着“希望一切顺利”的心态,显然已经无法满足现代 IT 需求。
Knight Capital 的灾难不仅仅是软件故障——它是基础设施管理的失败。在当今世界,基础设施可以通过代码定义、版本控制,并以一致的配置自动部署,如此灾难性的错误几乎不可能发生。尽管如此,如果真的要失败,那至少应该像这样轰轰烈烈,以至于在接下来的 15 年里,每一场 DevOps 会议都会提及这一案例,这或许也是另一种意义上的成功。
接下来,我们来探讨现代基础设施供应如何防止类似灾难的发生……
基础设施供应的演进
现代基础设施供应还必须适应混合和多云环境的现实。组织通常会在本地数据中心之外,同时使用多个云供应商,以满足特定需求或遵守地区法规。在这些场景下,Terraform 提供了一种统一的资源管理方式,使企业能够跨不同供应商管理基础设施。这种能力尤为重要,尤其是在企业希望保持基础设施管理的一致性,同时充分利用特定供应商功能的情况下。
Terraform 的集成功能不仅限于云基础设施。现代企业需要基础设施工具能够无缝对接现有的监控、日志记录和安全系统。Terraform 的 Provider 生态系统使企业能够通过代码管理这些集成,并确保新建基础设施从一开始就符合相应的安全和监控策略。
声明式 Infrastructure-as-Code 的优势
从手动配置转向自动化基础设施部署标志着重大变革。然而,并非所有自动化方法都是相同的。让我们深入探讨命令式(imperative)与声明式(declarative)部署模型之间的区别。
Knight Capital 事件揭示了命令式、逐步基础设施管理的风险。而 Terraform 的声明式方法则提供了一种截然不同的范式。与其编写详细的命令序列,声明式方法允许组织直接定义所需的最终状态。这种转变使工程师能够专注于目标,而不必操心具体的执行步骤。
声明式模型使 Terraform 能够自动管理复杂的依赖关系,确保资源按照正确的顺序创建,并保持组件之间的关系。这种系统化方法有助于避免不一致的部署,从而防止类似 Knight Capital 事件的灾难发生。
命令式(示例:Bash 脚本,Ansible Roles) | 声明式(示例:SQL,Terraform 配置文件) |
---|---|
逐步定义指令,以实现所需的结果。 | 定义期望的最终状态 - 系统会自动决定所需的步骤。 |
执行顺序是线性的。 指令必须按特定顺序执行,依赖关系需手动管理。 | 执行基于状态驱动 - Terraform 计算依赖关系并决定执行顺序。 |
通常需要手动干预 以管理资源生命周期。 | 自动化资源管理(创建、更新、销毁)。 |
通常是无状态 & 非幂等,这意味着重复执行可能会导致意外更改。 | 有状态 & 幂等,确保重复执行仍能得到一致的结果。 |
专注于过程控制:您定义如何配置资源。 | 专注于最终结果:您定义基础设施的最终状态。 |
Terraform 模块:面向整个组织的可重用代码
资源管理和可扩展性是现代基础设施部署的另一个关键方面。Terraform 的模块系统使我们能够为客户创建可重用的组件,这些组件包含最佳实践、规划阶段和运行时的安全控制,以及定制的业务策略。这些模块可以在不同团队之间共享,以确保基础设施模式的一致性,同时仍然允许灵活的定制。此方法显著减少了部署新环境所需的时间,同时确保了最高的安全性和合规性标准。
云无关架构
让我们来看一个典型的企业场景:一款应用程序需要负载均衡器、虚拟机、网络组件和防火墙规则,并且跨多个云供应商进行部署。采用传统方法,这种基础设施的部署需要深入了解每个供应商的特定工具和接口。Terraform 通过 HCL2(HashiCorp Configuration Language 2.0)提供了一致的语法和统一的工作流,但底层的供应商特定代码仍然存在根本差异。例如,在 AWS 上的负载均衡器配置需要与 Oracle Cloud Infrastructure(OCI)、Azure 或其他云供应商的配置完全不同的资源定义和属性。
尽管 HashiCorp 的市场宣传强调无缝的多云体验,但实际上,每个供应商仍然需要专门的实现、深入的专业知识以及对与供应商 API 交互的模块进行持续管理。通过合理的抽象和精心设计的模块系统,企业可以创建结构化的接口,使最终用户能够在不同的云供应商之间获得一致的资源部署和管理体验。
在 ICT.technology,我们通过清晰的双层模块架构实现了这种抽象。基础层是“基础模块”,这些供应商特定的模块用于映射每个云平台的具体要求,并直接与相应的 Provider API 交互。这些基础模块需要不断维护,并随着供应商的新功能进行更新。
在此基础上,我们引入“服务模块”,用于实现核心业务服务、合规策略和标准化配置(如预定义的实例规格)。该架构的核心原则是,服务模块永远不直接与 Terraform Provider 交互——它们仅调用基础模块。这确保了责任的清晰分工,并实现了真正的抽象。在这些供应商特定的模块之上,组织可以进一步构建抽象层,为最终用户提供统一的接口。如果这种方法得到精心实施,资源可以使用一致的、与供应商无关的代码在不同环境中部署——但这需要有针对性的设计和维护,而不是 Terraform 的内置功能。
状态管理
Terraform 的强大之处尤其体现在其状态管理能力上。状态文件作为基础设施的“唯一真实来源”(Single Source of Truth),用于跟踪所有资源及其关系。无论是开源的 HashiCorp Terraform 还是 Terraform Enterprise,都支持通过不同的后端进行远程状态管理,但它们在实施成本和运营责任方面有所不同。
HashiCorp Terraform 提供了对远程状态的内置支持,允许使用数据源 terraform_remote_state 进行管理,并通过如 Consul 这样的受支持后端实现状态锁定,以便团队协作。此外,Amazon S3 等存储解决方案也可以用于存储 Terraform 状态,但这些方案并未获得 HashiCorp 的官方支持。关键区别在于实现成本和运营责任:使用 HashiCorp Terraform 开源版本,组织需要自行构建和维护状态管理基础设施,包括备份机制、依赖管理和对状态文件的保护。而 Terraform Enterprise 提供了托管服务,其中包含集成的安全控制、合规策略和详细的审计日志记录。
改进空间:部署策略
尽管 Terraform 在基础设施部署方面表现出色,但许多组织需要更复杂的部署策略,例如 Blue-Green 部署或 Canary 发布。这些模式通常需要额外的工具和编排机制,超出了 Terraform 的核心功能。当资源需要重新部署时,Terraform 的默认行为是销毁现有资源后再创建新版本,这可能会导致服务中断。
因此,组织通常将 Terraform 与 HashiCorp Consul、HashiCorp Nomad 以及应用程序部署平台结合使用,以实现更先进的部署模式。Terraform 通过精确的状态管理和基础设施版本控制来管理基础设施组件,而其他工具负责流量路由和应用程序交付。
应对云基础设施中的关键风险
随着云基础设施的扩展,组织面临多个关键风险,这些风险必须经过精心管理。理解这些风险并通过基础设施部署实施适当的控制措施,对于确保安全和合规的环境至关重要。
通过代码保障云基础设施安全
云基础设施中的安全漏洞往往源于安全控制的不一致实施以及不同环境之间缺乏标准化。传统的安全方法高度依赖手动配置和临时审计,但这种方法难以跟上云环境的快速变化。
Terraform 通过与 HashiCorp 生态系统及其他企业安全解决方案的深度集成,为 Security-as-Code(安全即代码)实践提供了稳固的基础。HashiCorp Vault 作为核心平台,用于密钥管理和数据保护,既可以由 Terraform 配置,也可以由其使用。
借助 Terraform,组织可以自动化 Vault 的 Secret Engine 设置、身份验证方法和访问控制策略。这使得组织能够:
- 自动化密钥管理,
- 实现数据加密,
- 实施基于身份的访问控制
并将其扩展到整个基础设施。例如,Terraform 可用于配置 Vault 以动态管理数据库密码、集成云供应商的密钥管理服务、管理 PKI 基础设施,并在执行基础设施更改之前强制要求多因素身份验证(MFA)——而所有这些都无需在 Terraform 代码中存储敏感数据。
身份和访问管理(IAM)是基础设施安全的关键组成部分。组织通常使用 Keycloak 作为身份提供者,而 Keycloak 可完全通过 Terraform 进行管理,包括自动化 Realm、客户端、角色和组的设置,并与企业身份系统进行联邦认证。
Terraform 还可以管理 Keycloak 与其他安全工具(如 Vault)的集成,从而构建一致的身份和访问管理框架。HashiCorp Boundary 可提供额外的基于身份的访问控制和 SSH 审计功能,但在 ICT.technology,我们认为 HashiCorp Boundary 仅在企业已经在其信任中心(Trust Center)内运行高安全性、高可用性的 PostgreSQL 数据库集群时才适合作为生产级解决方案。截至本文撰写时,PostgreSQL 是 HashiCorp Boundary 的强制依赖项,这在要求高安全性、供应链合规性和厂商支持的企业环境中往往并不可行。
在 Terraform 中实现安全控制需要全面的工具链支持。在版本控制系统中,可以通过 Pre-Commit Hooks 在提交前进行初步的安全验证。集成到 CI/CD 流水线中的静态分析工具可以检测 Terraform 配置中的安全错误、潜在的数据泄露以及合规性违规。例如,checkov 提供专门针对 Terraform 设计的自动化安全和合规检查。
这些工具可以配置为执行企业特定的安全策略,并在基础设施部署过程中提供安全分析。组织通常使用 tfsec 进行静态代码分析,以扫描 Terraform 配置中的安全最佳实践,并利用 HashiCorp Sentinel 实施 Policy-as-Code(策略即代码)来进行合规性检查。虽然 Terraform 本身不具备直接的安全监控功能,但它可以配置所需的基础设施和集成以支持安全工具。例如,Terraform 可用于配置日志转发至 SIEM 解决方案(如 Splunk 或 ELK Stack),管理必要的网络安全配置,并设置访问权限。
在企业环境中实现运行时安全监控需要将基础设施部署与安全系统紧密集成。Terraform 可通过官方 Provider 配置企业级监控解决方案,例如 Datadog(用于基础设施分析)或 Palo Alto Prisma Cloud(用于云安全)。ServiceNow Provider 允许基本的配置管理集成,但复杂的企业集成通常需要额外的编排工具。
自动化安全工具在确保持续合规性和强大安全策略方面发挥着关键作用。配置验证工具可以在 Terraform 规划阶段通过自定义规则强制执行安全标准。Secret 扫描工具可以集成到版本控制系统中,以防止敏感数据的意外提交。Policy-as-Code 框架使组织能够在所有基础设施部署中一致地定义和执行安全策略。这些工具共同构建了一条完整的安全自动化流水线,在基础设施变更的多个阶段进行检查——从最初的开发到最终的生产部署。
防止配置漂移(Drift)和错误配置
配置漂移(Drift)是云环境中最大的运营风险之一。随着系统的发展和团队的持续更改,保持基础设施的期望状态与实际状态的一致性变得越来越困难。错误配置可能导致安全漏洞、合规性问题以及运营故障。
Terraform 的状态驱动方法提供了一种强大的解决方案来检测和修正配置漂移。Terraform 通过持续存储期望的基础设施状态,并将其与实际状态进行定期比较,从而自动识别并修复漂移问题。这一功能不仅适用于基本的资源配置,还涵盖了安全设置、标签和其他治理关键的元数据。
配置漂移可以通过定期执行 terraform plan 操作来检测,该操作比较当前状态和期望配置。虽然 HashiCorp Terraform 需要手动运行此操作或编写额外的脚本进行自动化,但 Terraform Enterprise 提供了内置的漂移检测功能。使用 HashiCorp Terraform 开源版本的组织通常会开发自己的自动化解决方案,例如在 CI/CD 流水线中定期执行 terraform plan 操作,并结合通知系统,在检测到配置漂移时向团队发送警报。尽管如此,在应用更改之前,修正配置漂移仍需权衡可能的运营影响,在某些情况下甚至需要人工审核。
Terraform 状态文件的安全管理是另一项至关重要的任务。使用 HashiCorp Terraform 开源版本的组织通常会选择 HashiCorp Consul 作为状态文件的安全存储后端,而 Terraform Enterprise 已经将该功能集成。版本控制系统(如 Git)用于跟踪基础设施定义的变更,而独立的审计日志工具可以记录所有基础设施修改的详细信息。GitLab CI 或 Jenkins 等 CI/CD 工具可以配置为强制执行基础设施变更的审批流程,确保在应用更改之前完成安全审查。
确保高可用性并最小化停机时间
停机和服务中断可能对业务运营和客户满意度造成重大影响。现代基础设施部署必须包括稳健的策略,以在允许必要变更和更新的同时保持高可用性。
Terraform 先进的状态管理和依赖关系跟踪能力,使组织能够实现减少停机时间的复杂部署模式。例如,Blue-Green 部署可以通过 Terraform 进行编排,即在现有环境的旁边创建新的基础设施,并在验证后逐步将流量通过负载均衡器导向新环境,以最大程度地降低风险。一旦所有流量迁移到新环境并确认稳定后,Terraform 可自动清理旧环境中的未使用资源,从而优化成本。
Terraform 的依赖关系管理能力确保资源以正确的顺序创建和更新,从而减少变更期间的服务中断风险。组织可以实施输入验证检查、运行时检查动态生成的值,并将自动化测试集成到 Terraform Testing Framework,以便在开发周期的早期阶段发现潜在问题,从而防止影响生产环境。
持续合规性管理
合规性要求不断发展,并变得越来越复杂,尤其是对于在受监管行业或多个司法管辖区运营的企业而言。传统的合规方法通常依赖于定期审计和手动检查,但这种方式已无法确保在现代云环境中持续满足合规性要求。
Terraform 使组织能够实施 Compliance-as-Code(合规即代码)实践,将合规性要求转换为基础设施定义,并通过版本控制进行管理。然而,这一实现方式在开源版本的 HashiCorp Terraform 与 Terraform Enterprise 之间存在显著差异。使用 HashiCorp Terraform,组织通常依赖于精心设计的模块、变量定义中的自定义验证规则,以及外部工具来执行策略。这可能包括 Pre-Commit Hooks、自定义验证脚本以及 CI/CD 流水线检查,以确保合规性要求得以满足。
Terraform Enterprise 通过 Sentinel 提供了内置的 Policy-as-Code(策略即代码)功能,允许在应用更改之前执行高级合规检查。没有 Terraform Enterprise 的企业通常会使用 Open Policy Agent (OPA)、自定义脚本或 CI/CD 流水线验证作为替代方案。这些外部工具可以执行资源命名约定、安全配置和数据主权要求,但需要额外的设置和维护,并且相较于 Terraform Enterprise 的集成方法,其能力较为有限。
Terraform Enterprise 平台的全面审计功能提供了详细的基础设施变更记录,包括:
- 谁进行了更改,
- 更改发生的时间,
- 具体的修改内容。
这些审计日志在合规性审查期间提供了极大的价值,并可用于调查安全事件。
展望未来
随着云基础设施的持续演进,基础设施部署在确保安全性、合规性和运营卓越性方面的作用愈发重要。组织必须采用能够应对现代云环境复杂性的先进方法,同时确保一致的安全性和合规控制。
Terraform 的声明式模型,结合其强大的状态管理和广泛的供应商生态系统,为应对这些挑战提供了稳固的基础。通过实施 Infrastructure-as-Code(IaC)实践,并利用先进的安全性和合规功能,企业可以构建可靠的云基础设施,以满足业务需求,同时维持高水平的安全性和合规性。
未来的基础设施部署预计将更加侧重于安全自动化、合规自动化和智能编排。今天投资于构建强大基础设施部署能力的企业,将能够更好地适应不断变化的需求,同时保持必要的敏捷性,以在快速变化的市场中保持竞争力。