基础设施即代码(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. .Net Core 3.1 服务端配置跨域

    一.在Startup.cs 的 ConfigureServices 配置好跨域策略 原文链接:https://www.jianshu.com/p/534b9a6a6ed5 public void Co ...

  2. 产品代码都给你看了,可别再说不会DDD(十):CQRS

    这是一个讲解DDD落地的文章系列,作者是<实现领域驱动设计>的译者滕云.本文章系列以一个真实的并已成功上线的软件项目--码如云(https://www.mryqr.com)为例,系统性地讲 ...

  3. 一个基于.NET7的开源DNS服务 DnsServer 的部署使用经验分享

    前言 接上篇 docker-bind 的使用搭建了一个 dns 服务,本篇将介绍另外一款 DnsServer 的部署和使用,更专注,更轻量. 特点 基于 .NET 7 实现 ,支持 Windows.L ...

  4. JUC并发编程学习笔记(十四)异步回调

    异步回调 Future设计的初衷:对将来的某个事件的结果进行建模 在Future类的子类中可以找到CompletableFuture,在介绍中可以看到这是为非异步的请求使用一些异步的方法来处理 点进具 ...

  5. EF Core预编译模型Compiled Model

    前言 最近还在和 npgsql 与 EF Core 斗争,由于 EF Core 暂时还不支持 AOT,因此在 AOT 应用程序中使用 EF Core 时,会提示问题: 听这个意思,似乎使用 Compi ...

  6. Keepalived+Nginx高可用案例(抢占式与非抢占式)

    (1)下载安装Keepalived源码包 Keepalived官网源码包下载地址 在服务器上解压 tar -xf keepalived-2.2.8.tar.gz 安装相关前置依赖 yum -y ins ...

  7. 本地训练,立等可取,30秒音频素材复刻霉霉讲中文音色基于Bert-VITS2V2.0.2

    之前我们使用Bert-VITS2V2.0.2版本对现有的原神数据集进行了本地训练,但如果克隆对象脱离了原神角色,我们就需要自己构建数据集了,事实上,深度学习模型的性能和泛化能力都依托于所使用的数据集的 ...

  8. Batrix企业能力库之物流交易域能力建设实践

    简介 Batrix企业能力库,是京东物流战略级项目-技术中台架构升级项目的基础底座.致力于建立企业级业务复用能力平台,依托能力复用业务框架Batrix,通过通用能力/扩展能力的定义及复用,灵活支持业务 ...

  9. 从0开始用Maven

    一.Maven的介绍即相关概念 Maven是一款构建和管理Java项目的工具,它将项目开发和管理过程抽象成一个项目对象模型(POM),提供了一种统一的项目结构. Maven官网 1.为什么使用Mave ...

  10. 银河麒麟V10(飞腾ARM CPU)安装KVM踩坑记

    服务器配置信息 品牌:GreetWall CPU:飞腾FT-2000+/64 64bit 操作系统:Linux-4.19.90-24.4.v2101.ky10.aarch64-with-kylin-1 ...