What is Infrastructure-as-Code (IaC)?

基础设施即代码(IaC)是指利用代码(以预构建模板的形式)来提供支持基于云的应用程序所需的基础设施资源的实践. 开发人员可以利用这种高度可重复的实践来编写, test, 并发布将创建应用程序运行的基础结构的代码. 整个过程可以作为持续集成/持续部署(CI/CD) software pipeline.

IaC非常有益,因为它避免了每次将新代码推送到生产环境时手动配置资源. 可重复的任务可以自动化,团队可以更快地部署产品.

而实现IaC可以帮助开发人员更快、更有效地进行开发, there is often a trade-off to do so. 这种速度的提高通常会导致平台和DevOps团队的控制和监督减少, 在某些情况下,这可能导致资源配置不当, or worse, created in an insecure manner. Perhaps to combat this, a recent Forrester report 注意到58%的全球高级安全决策者计划在2022年增加其应用程序安全预算.

However, 将安全性集成到开发周期中可能会导致开发人员和安全人员之间的摩擦, 因为SecOps试图跟上DevOps的步伐,并尽可能快地确保工作负载的安全.

Infrastructure-as-Code Tools

Each environment and its purpose is unique. Some tools will be better fits than others, 所以有必要研究一下什么最适合你的具体需求. 值得注意的是,许多云提供商为其平台提供原生工具和服务. 尝试在研究过程中考虑到这一点,以避免在采用特定平台时可能已经可用的功能冗余.

Learn more about our approach: 将云安全与DevOps和CI/CD工具集成

Terraform

Terraform帮助用户以人类可读的方式定义资源和基础设施, declarative configuration files. 它可以在多个云平台上管理基础设施的生命周期, 以及在整个部署过程中跟踪资源更改.

Chef Infra

Chef Infra允许用户通过定义可重复的策略来自动化配置管理, consistent, and reusable. 它可以将配置和策略定义为可测试的代码, 可强制执行,并且可以作为自动化管道的一部分大规模交付. Chef还可以检测配置漂移并在需要时进行纠正.

Puppet

Puppet是一个使用声明性代码来帮助管理和自动化服务器配置的工具. 它支持根据组织的It需求扩展基础设施自动化. 用户可以描述所需的系统状态,而不是到达那里所需的步骤.

AWS CloudFormation

AWS CloudFormation帮助用户通过DevOps管理基础设施. 它支持自动化、测试和具有CI/CD自动化的基础设施部署模板. 它还可以扩展和管理基础设施,以包括在CloudFormation Registry中发布的云资源, the developer community, and a user’s library.

Ansible

Ansible是一个开源的命令行IT自动化软件应用程序. It can configure systems, deploy software, 并编排高级工作流以支持应用程序部署, system updates, and more. Ansible具有最小的“移动部件”,并使用OpenSSH进行传输. 它还采用了一种人类可读的语言,因此用户可以快速入门.

SaltStack

SaltStack is a Python-based, 用于远程任务执行和配置管理的开源软件, 使用户能够部署和配置复杂的IT系统. 它将人类可读的YAML与事件驱动的自动化相结合,从而使ITOps受益, DevOps, NetOps, or SecOps functions.

What are the Benefits of IaC?

在云环境中,基础设施即代码的主要好处是——如上所述——速度. 再深入一点,就会发现以下更切实、更具体的商业利益:

  • Templatizing manual configurations: Previously, 每次准备部署应用程序时,开发人员都必须手动配置基础设施. IaC automates this process with templates. 可以快速有效地利用可重复的代码, SecOps用这些模板建立安全控制和护栏.
  • Reducing risk: Risk can never be fully eliminated. However, 通过构建与组织安全标准和最佳实践保持一致的可重复模板, 人为错误和漏洞的风险将会降低.
  • Reduce wasted spend: 以及提供错误配置资源的可能性, 人为错误通常会导致基础设施资源的过度供应. By applying guardrails to resource volumes, 您可以避免与过度供应的资源相关的浪费.
  • Creating a stronger team: IaC可以节省成本,提高技术和业务效率. 也许最大的好处是减少了DevOps和SecOps之间的摩擦. 如果安全被自然地集成到流程中,那么安全组织在运行之前“检查开发人员的工作”的感觉就会减少. 这可以创造一个更积极的工作环境和团队友谊.

大多数现代企业希望实现的宏观效益是巨大的。”shift left.也就是说,将DevOps和SecOps整合成一个真正的 DevSecOps 将安全性移入CI/CD管道的文化, 将安全性和遵从性从被动的立场转变为预防性立场.

Declarative vs Imperative IaC

Again, what is IaC? 很明显,有很多方法可以回答这个问题. Drilling down a bit further, 一般有两种方式:声明式IaC和命令式IaC. 简单地说,这两种方法是开发人员告诉IaC自动化平台要做什么的方法.

Declarative IaC

In stating a desired outcome, 用户让系统依赖于预构建的模板和规则来获得该结果. Therefore, 用户对配置过程的技术知识要求更少,并且通过委托获得效率. A user is essentially saying, “我希望这个结果能在整个过程结束后出现, and I don’t care how you do it.“另一个好处是,用户可以采取更具战略性的方法来塑造和部署整个应用程序.

As a quick refresher, IaC的本质是编写定义代码运行的云基础设施的语句. 声明性IaC只是一种更快、更容易获得预期结果的方法, 是绝大多数时候使用的方法.

Imperative IaC

负责定义每个步骤以获得最终结果可能听起来像是一个很大的缺点, and it can be. 用户必须熟悉编程语言,并且必须完美地执行整个操作的每一步. 这样做的好处是用户可以更好地控制自动化过程和代码, 并且可以根据具体情况定制配置过程.

它包括告诉控制器如何做确切的事情. “Iterate through this loop, check this boundary condition, 如果满足条件,执行此操作, 但如果条件不满足,这另一个动作.命令式编程本质上是微观管理,通常由人主导.

What are Some Challenges of IaC?

团队必须确保通过IaC将速度和效率添加到开发生命周期中不会产生安全问题——在过程中尽可能早地实现安全控制和检查是至关重要的. 这样做可以通过在创建模板之前捕获问题来帮助避免创建不遵循组织标准的资源. 让我们来看看IaC面临的一些挑战(别担心, 好处肯定超过了它们):

  • Templates that contain security risks: 模板构建完成后,并不意味着它没有错误. 在使用模板之前检查模板是一个好主意,以避免在第一时间创建有风险的资源.
  • Built-in analysis: Once IaC has been put into practice, scanning tools must also be integrated to, as mentioned above, 在错误变成真正的漏洞之前抓住它们. 好消息是,静态IaC分析和动态IaC分析都可以帮助分析代码, identify misconfigurations, 并评估运行IaC模板的云环境.
  • Ramping up with IaC: 在给定的时间内,实现和使用IaC伴随着学习曲线,这可能会耗尽开发人员的资源,并可能创建一个与团队可能习惯的根本不同的工作流. Additionally, 它要求IaC模板的存储库足够全面,以确保它适合整个开发团队的需求. 因此,涉众团队在保持模板更新的计划上保持同步是至关重要的.
  • Human friction: When implementing IaC, 对于开发人员来说,由于需要持续使用安全工具来确保基础设施免受错误配置和漏洞的影响,因此很难处理中断或放缓的感觉. 为了安全起见,开发人员可以尽可能无缝地快速扫描IaC模板并继续工作.

Read More About IAC Security

了解Rapid7的云安全平台如何提供IAC安全

Rapid7博客上最新的云基础设施主题

2022云错误配置报告:最新的云安全漏洞和攻击趋势