往往一些胜利的软件公司在构建解决方案的时候非常重视其可重复性、可审计性、和简便性,而基础设施即代码(IaC)的呈现让开发人员可能将这些工夫利用于基础设施的调配。目前的存储 IaC 的实际有以下三种:
- IaC 与应用程序和性能代码一起存储
- IaC 独自存储在特定于应用程序的存储库中
- 企业中所有应用程序的所有 IaC 代码存储于同一个存储库中
本文将带你一起探讨这几种 IaC 存储解决方案之间的利弊,并摸索合乎企业需要的 IaC 存储最佳实际。
IaC 与性能代码一起存储
存储 IaC 最简略间接的办法是将所有 IaC 代码保留在应用程序存储库中,该应用程序存储库将此 IaC 代码用作其 CI/CD 流水线的一部分。这样的存储形式易于设置,不须要简单的权限调配,并且对应用此代码库的开发人员齐全可见,这样就可能轻松检索上下文。这也就是为什么有一部分开发人员抉择总是将性能代码和 IaC 存储在同一个 repo 中的起因。然而将 IaC 代码于性能代码存储在一起存在许多问题。
软件开发最佳实际包含最小化冗余。IaC 不仅蕴含特定于应用程序的调配信息,还蕴含所有的底层基础设施(底层基础设施就是企业能够跨多个应用程序和生态系统共享的公共基础设施)。此类基础设施的例子包含 Kubernetes 集群和日志存储帐户。
此外,将 IaC 代码与特色代码一起存储会带来平安危险。容许开发人员以管理员级别拜访将代码投入生产所需的所有部署脚本违反了最小权限准则,并使设法劫持开发人员帐户的攻击者更容易横向挪动。
因为企业的部署过程有肯定水平的保密性,部署流水线及其配置也基于企业开发需要定制的,因而也让开发过程具备肯定安全性。然而将 IaC 与应用程序的性能代码存储在一起,让领有企业应用的服务映射的攻击者可能更轻松且胜利地发动软件供应链攻打。此外,将 IaC 与性能代码一起存储可能会使代码受到透露,同时泄露所有 CI/CD 配置,不仅会对相干应用程序产生微小影响,同时也给整个企业造成损失。
这样看来,将 IaC 与产品代码一起存储尽管更容易进行最后设置,但违反了最小特权准则和零信赖准则。这种存储代码的办法引入了不必要的平安危险。
所有 IaC 代码存储在一起并不可行
因为将带有性能代码的 IaC 存储在公共存储库中并不是最佳解决方案,那么将所有 IaC 存储在专用 IaC 存储库中怎么样?这样既可能容许 DevOps 和平安团队施行精准的访问控制,也能让代码冗余易于辨认和预防。
但这样的存储办法同样会给企业带来一些麻烦。当所有 IaC 都存储在独自的共享存储库中时,很难将性能更改与 IaC 更改相匹配。这种状况会给开发过程许多问题,比方升高开发人员的开发效率,同时减少开发团队、DevOps 团队和平安团队之间的摩擦。
此外,当所有 IaC 被存储在一个公共存储库中,会造成开发人员没有方法管制影响其工作流程的平安决策但问题。在不足所有权和批改任何代码特定的部署脚本所需的额定步骤之间,将所有 IaC 存储在一起时,开发人员同样无奈疾速更改 IaC,有可能还会给企业造成其余不必要的麻烦。
IaC 的类别
IaC 和其余 CI/CD 脚本最终分为两类:根底 IaC 和性能 IaC。
根本部署脚本能够被了解为企业宽泛应用的代码,其中包含例行部署操作或与共享资源交互。拆散此代码使企业可能将根底 IaC 所有权和保护职责调配给企业的 DevOps 团队,这样操作非常适合保护共享基础设施。
而性能 IaC 脚本是用于配置和治理与特定软件相干的资源的代码段。开发人员常常和与其可交付成绩相干的部署脚本进行交互,比方更改公布步骤、批改网关、更新服务器配置和许多其余需要,针对性能 IaC 和根底 IaC 须要应用不同的解决协定。
当初在咱们理解了个性和根底 IaC 之间的区别之后,就能够为每个个性定义适合且失当的管理策略了。
IaC 存储混合解决方案
最佳实际要求对性能 IaC 和根底 IaC 进行不同的分类,并将职责调配给不同的团队,以最大限度地进步安全性,同时不给开发和公布过程减少不必要的摩擦。根底 IaC 应由 DevOps 团队治理,而特定性能的 IaC 则由托管软件的代码所有者即开发人员解决。
为了抉择更合乎企业需要的 IaC 存储解决方案,须要从盘点企业现有的零碎和服务。理解这些资源的共享形式可能帮忙企业在做无关 IaC 代码存储的业务决策时提供必要信息,帮忙企业最大水平上缩小部署协定中的冗余。在定义哪些 IaC 是企业部署的软件根底,哪些 IaC 不是特定于某些应用程序、库和其他软件交付物的时候,可见性(Observability)是不可或缺的。
帮忙 DevSecOps 团队治理 IaC
为了帮忙企业 DevSecOps 团队更好地治理 IaC,请执行以下最佳实际:
- 跟踪资源,包含镜像仓库、代码存储库、构建和云 /IaC 部署
- 施行精准的访问控制,依据资源是要共享的或是特定于应用程序的,能够适当地调配所有权
- 提供对资源应用的可见性,使企业可能严格施行最小特权准则,防止在开发过程中减少不必要的摩擦
- 通过间接与企业软件供应链的组件集成来提供全面的资产清单
施行上述实际,企业能够取得其余平安工具无奈提供的具备更高复杂性的洞察能力,同时,也可能帮忙企业继续监控安全更新,从而缩小从发现 zero-day 破绽到修补破绽之间的工夫。