基础设施即代码(IaC) 是一种快速发展的技术,利用软件开发原则和实践,用软件配置基础设施。与传统的 IT 基础架构相比,IaC 可以更高效地交付软件。自动化还解锁了弹性配置的能力,该功能可在不同的负载下有效地分配资源。

尽管 IaC 有很多优势,但配置不当的 IaC 也会在整个系统中迅速传播错误配置。IaC 的自动化配置能够提高效率,也可以放大错误,而这些错误通常会对安全产生不利影响。坚持 IaC 最佳实践是降低成功供应链网络攻击和漏洞风险的有效方法,考虑以下8个 IaC 最佳实践,为企业安全保驾护航。

扫描 IaC 代码,排查错误配置

IaC 是一个功能强大的工具,但同时也存在一定安全风险,例如在整个云基础设施中传播小的配置错误。错误配置可能的形式有:不安全的默认配置,可公开访问的 S3 buckets 或未加密的数据库。

SAST 和 SCA 扫描是特征代码的最佳方式,然而很少有企业优先考虑用此类方式保护 IaC。对 IaC 代码进行安全扫描可以有效减少由于配置错误导致的暴露和漏洞。此外,可以通过扫描新的 commit 以查找对云部署的更改,来检测和更正与其原始模板匹配的基础结构。

将自动化 IaC 安全扫描嵌入开发工作流程中

在漏洞进入生产环境之前发现并修复比后置的补救手段更有效。因此通过将对 IaC 错误配置的检查嵌入到开发人员工作流中,开发人员能够提前发现并纠正问题。可以采用pre-commit的形式,以便在开发人员保存其工作时测试代码,也可以使用拉取请求自动执行的分支保护规则,或者作为在CI中运行的安全构建规则。在开发人员的工作流中运行安全扫描还可以确保开发人员及时获得准确信息,并修复错误配置,提高修复效率。

识别并纠正环境偏移

环境偏移检测(不同部署环境的配置与其模板不同步的情况)和修复错误配置是 IaC 的最佳实践之一。配置中的偏差通常发生在维护期间,并可能导致环境(如测试和生产)变化。随着时间的推移,这会导致配置偏离安全状态。

环境偏移可能是由粗心的错误引起的,而由此造成的问题修复难度高并且可能导致业务宕机,造成巨大损失。通过将 IaC 与实际生产配置进行比较来识别偏移,但手动完成此操作既繁琐又耗时。因此,偏移检测是 IaC 安全扫描工具的不错选择。

防止硬编码密钥渗透到 IaC 中

IaC 最广泛认可的最佳实践之一是避免部署包含凭证的代码。硬编码密钥可以在特征代码或 IaC 代码中被引入,而进入 IaC 代码的密钥有可能对组织的安全性造成毁灭性的影响。硬编码密钥的存在也使得由于密码破解而导致相关帐户泄露,让恶意攻击者有机可乘。因此如果硬编码密钥保留在程序中,会导致身份验证措施失败,因为任何有权访问项目的人都可以查看这些硬编码密钥。与扫描 IaC 安全配置错误非常相似,初始评估应在主分支和版本历史记录中的 IaC 代码中查找硬编码密钥。最好的方法是通过扫描 commit 来防止这些硬编码密钥进入版本控制系统。

减少代码泄漏的时间和影响

无意泄露源代码可能导致知识产权盗窃、硬编码密钥的暴露等等。源代码和 IaC 代码通常位于同一存储库中,暴露 IaC 代码的风险众多,其中包括攻击者通过解析代码找到对应的漏洞、配置错误和破解密钥的风险。

建立协议以避免代码泄漏,同时制定应急计划,以防发生泄漏。应调查潜在的可疑用户活动,例如使用 IaC 下载、克隆或分叉存储库。强制实施最小特权策略有助于减少代码泄漏风险。此外执行定期检查,防止源代码继续发布到公共存储库或代码共享站点,并确保快速处理任何源代码泄漏。公开专有 IaC 代码的时间越长,恶意攻击者就越有可能借此进行发起攻击。因此,设置警报机制,能够尽可能降低代码泄漏发生的风险。

建立一致的工具管理机制标准

IaC 安全中经常被忽视的一个方面是 DevOps 工具和基础结构本身的安全设置和策略。强化身份验证、确保最小特权原则以及强制实施职责分离,在建立有利于安全的协议方面都大有裨益。开发者凭证是攻击者和其他恶意行为者的有力工具,但实施治理保护措施有助于防止单个被盗用帐户危及系统的其他部分或访问 IaC 工具。

实现策略的一致实施是 IaC的最佳做法之一。Google 的  SLSA 框架(Supply chain Levels for Software Artifacts) 包含有关确保源代码完整性的具体指南,此指南旨在减少代码篡改的机会,并防止恶意活动被忽视。这些要求旨在使对 IaC 的更改可跟踪和审查。建立一致的管理标准,要求软件供应链中的每个系统都是安全的,用户无法在没有额外监督的情况下更改系统。

防止 IaC 代码篡改

如果开发人员的帐户遭到入侵,攻击者可以篡改 IaC 代码,从而造成严重后果,例如使数据库可公开访问。因此,不仅要强化开发人员的帐户,还需要明确 IaC 配置何时发生更改,并验证更改是否经过批准。在 SDLC 的不同阶段之间定期比对,通过识别源代码不匹配的点,帮助降低代码篡改风险。同时通过比较构建生命周期的不同阶段,确保代码完整性,以降低篡改代码的风险。如前所述,IaC 会放大错误配置,未经授权的更改可能会导致 IaC 模板更改或配置篡改,从而导致代码泄漏,因此检查和确认正在执行更改的主体十分关键。

关键代码监控是降低 IaC 篡改风险的另一个途径。从本质上讲,关键代码监控是在每次发生更改时的发出警报,对于特征代码,必须谨慎使用关键代码监控。但 IaC 代码是为应用程序初始化和部署的基础结构的模板,因此使用关键代码监控再合适不过。因为基础架构通常不会更改,但发生更改时应具有高可见性,以确保更改不是恶意的。

全面了解安全环境

繁冗复杂的环境是保障安全的最大阻碍。全面了解安全环境非常重要,因为这能有效减少修复安全问题所需的响应时间。通过改善安全环境,保障开发安全,避免代码泄漏或代码被篡改。此外,可以通过多个事件和工具的环境更有效地确定修复的优先级。这种方法可以产生深度防御,从而降低产生漏洞的风险以及在漏洞对企业和组织产生的影响。

参考链接:

Supply chain Levels for Software Artifacts 

https://github.com/slsa-framework/slsa

8款最佳实践,保护你的 IaC 安全!的更多相关文章

  1. 保护REST API/Web服务的最佳实践

    在设计REST API或服务时,是否存在处理安全性(身份验证,授权,身份管理)的最佳实践? 在构建SOAP API时,您可以使用WS-Security作为指导,有关该主题的文献很多.我发现了有关保护R ...

  2. 一款不错的 Go Server/API boilerplate,使用 K8S+DDD+CQRS+ES+gRPC 最佳实践构建

    Golang API Starter Kit 该项目的主要目的是使用最佳实践.DDD.CQRS.ES.gRPC 提供样板项目设置. 为开发和生产环境提供 kubernetes 配置.允许与反映生产的 ...

  3. Dropbox可伸缩性设计最佳实践分享

    http://www.infoq.com/cn/news/2012/11/dropbox-scale-bestpractice Dropbox的运维工程师Rajiv,跟大家分享了可伸缩性设计的最佳实践 ...

  4. Windows Azure 安全最佳实践 - 第 4 部分:需要采取的其他措施

    那么,哪些安全威胁应由WindowsAzure环境缓解?哪些安全威胁必须由开发人员缓解? 开发 Windows Azure 应用程序的最佳安全做法一文说明了对于在 Windows Azure 中运行的 ...

  5. Windows Azure 安全最佳实践 - 第 3 部分:确定安全框架

    构建云应用程序时,安全始终是计划和执行Windows Azure的首要核心因素.第 1 部分提出安全是一项共同责任,Windows Azure为您的应用程序提供超出内部部署应用程序需求的强大安全功能. ...

  6. MongoDB最佳实践中文手册

    背景:查阅了一下MongoDB的相关文档,发现中文文档还是比较少的,工作中需要用到MongoDB,而这本<MongoDB最佳实践>是很好的选择,所以就把这本手册翻译了一下,其中生涩的专业用 ...

  7. 2018亚太CDN峰会开幕, 阿里云王海华解读云+端+AI的短视频最佳实践

    4月11-12日,2018亚太CDN峰会在北京隆重召开,在11日下午的短视频论坛中,阿里云高级技术专家王海华进行了<短视频最佳实践:云+端+AI>的主题演讲,分享了短视频的生命周期关键点和 ...

  8. 快速web开发中的前后端框架选型最佳实践

    这个最佳实践是我目前人在做的一个站点,主要功能: oauth登录 发布文章(我称为"片段"),片段可以自定义一些和内容有关的指标,如“文中人物:12”.支持自定义排版.插图.建立相 ...

  9. MySQL · 答疑解惑 · MySQL 锁问题最佳实践

    http://mysql.taobao.org/monthly/2016/03/10/ 前言 最近一段时间处理了较多锁的问题,包括锁等待导致业务连接堆积或超时,死锁导致业务失败等,这类问题对业务可能会 ...

  10. 【MySQL】锁问题最佳实践

    最近一段时间处理了较多锁的问题,包括锁等待导致业务连接堆积或超时,死锁导致业务失败等,这类问题对业务可能会造成严重的影响,没有处理经验的用户往往无从下手.下面将从整个数据库设计,开发,运维阶段介绍如何 ...

随机推荐

  1. PTA乙级1038C++哈希解法

    #include"bits/stdc++.h" using namespace std; int main() { int a,b[105]={0}; long i,n,K; ci ...

  2. EFCore 使用FluntApi配置 全局查询筛选器

    我们在类中通常会有一个属性为 IsDel来表示软删除或也称逻辑删除,这个属性会导致我们在进行查询操作时,每一次都要 .where(s=>s.IsDel==false) 非常的麻烦.在使用efCo ...

  3. UIKit Inside: frame bounds position anchorPoint center

    iOS 中UIView的属性:frame.bounds.center以及CALayer的属性:position.anchorPoint与视图的位置与大小相关,理解这些属性是进行 iOS 视图编码的基础 ...

  4. SQL Server 2000 创建角色,登陆用户,安全用户,批量授予权限

    前言 我在2011年刚入门学习的时候,是从 SQL Server 2008 开始学的,再加上这些年较少接触 SQL Server 2000,因此对它不是很熟. 之前都是在 SQL Server 200 ...

  5. 工厂模式(Factory Method)

    模式定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使得一个类的实例化延迟(目的:解耦)到子类. 要点总结 Factory Method模式用于隔离类对象的使用 ...

  6. 主数据管理系统(MDM)集成方案

    在当今社会,数据已成为企业发展的宝贵财富.然而,大多数企业面临着数据散落在多个系统中.无法互相印证和共享的问题,导致数据使用效率低下.为解决这个问题,目前有两种典型途径:建设公司级系统或建立数据共享平 ...

  7. python原生数据类型(上)

    # 查看数据 print('hello world') # 查看数据类型 type('hello world') hello world str 1 数据类型定义 1.1 不可变数据类型 # 数值 # ...

  8. Mybatis-Flex之基础查询

    1.selectOneById /** * selectOneById(id):根据主键查询数据. */ @Test public void testSelectOneById() { /** * S ...

  9. 流媒体服务器ZLMediaKit与FFmpeg

    流媒体服务器ZLMediaKit与FFmpeg overview 关键字:ZLMediaKit.FFmpeg.srt.vlc 如果想快速拥有自己的流媒体服务器,那么可以使用开源项目自己搭建.开源的流媒 ...

  10. NetSuite 开发日记 —— 科目类型码

    科目类型码可用于搜索判断科目类型 代码实现 var sch = search.create({ type: 'account', filters: ['type', 'anyof', 'Bank'], ...