在过去十年里我们见证了越来越多的企业开始或已经采用云技术,这也意味着云安全的重要性也越来越高。当谈及安全威胁,McKinsey 的一篇文章表明,云上大多数漏洞都是由于配置错误导致而非外部攻击造成底层云基础设施损坏。因此,从开发初期就拥有正确安全配置比构建一个安全独立的系统更靠谱、更有效。而实现这的最好方式就是安全即代码(Security as Code)。

什么是安全即代码 (SaC)

安全即代码(SaC)就是在软件开发的早期阶段将安全融入 DevOps 工具中,使其成为工作流程的重要组成部分。这能够帮助开发人员更早识别代码中易受攻击的部分,并引入相应的安全措施来规避相应安全风险。由于安全即代码在开发工作开始时已经在流程中发挥作用,因此企业无需将开发和安全分离,这也有助于企业提高开发效率。因为将安全融入到开发过程中,从而产生了 DevSecOps。

SaC 与持续交付

持续交付(Continuous Delivery)是在短时间内将所有对软件所做的更改交付给用户的能力。因此,将安全嵌入此过程是非常必要的。实施 SaC 有很多好处,主要体现在以下三个方面:

  • 高效: SaC 通过消除人工干预造成的问题改进了软件开发过程,它进一步加快了流程,由于安全已嵌入开发过程中,实现了无缝的安全工作流程。

  • 降低风险: 由于软件开发是一个广泛的过程,因此安全控制是整个软件开发生命周期 (SLDC) 要考虑的一个十分重要且相当困难的问题。这就是为什么通过 SaC 将安全嵌入开发阶段可以降低泄露风险的原因。

  • 业务支持: 云架构是大多数企业及其运营的核心。良好的云安全是加速软件和部署过程的核心。这就是 SaC 的用武之地,它可以帮助企业在不影响安全性的情况下有效地将其应用程序推向市场。

为什么 SaC 对 DevSecOps 很重要

SaC 的目的是为了让安全人员和开发人员达成同频共识。开发人员能够在开发过程中展示开发结果,同时也允许他们在开发过程中纠正问题,这种交流有助于形成一个持续的反馈循环。

通过 SaC,开发人员可以在安全和低影响故障的环境中测试所有新的代码,还可以将自动化安全扫描和测试集成在开发过程中,以便后期在所有项目中重复使用。通过将安全扫描集成到开发人员现有的工具和流程中,把安全注入开发过程,能够有效降低部署时间且保证开发过程不会中断。此外,SaC 还能够帮助开发人员识别漏洞。需要注意的是,开发人员需要接受相应的安全培训和教育才能够在发现漏洞后进行相应的修复工作。

SaC 的 7 个要素

DevOps 的目标是在不影响安全性的情况下尽快完成应用程序开发并交付,而通过 DevSecOps 将安全嵌入流程中能帮助实现安全开发高效交付。让我们看看在实施 SaC 时要注意的 7 个要素。

1. 定义安全要求

在开发开始时有预定义的安全要求(predefined security requirements)十分重要。比如 OWASP (Open Web Application Security Project)主动控制这样的安全模型应该在开发阶段实施,开发人员就能在开发过程中有规范的安全实践进行参照。

2. 检查代码依赖

在开发和构建应用程序时,代码之间必然会有错综复杂的依赖关系。依赖关系图(dependency graph)能够帮助开发人员深入了解代码库的每个部分,以及不同组件如何协同工作,帮助开发人员更好地识别和修复相应问题。

3. 为代码选择正确的安全工具

将安全工具集成到 SLDC 时需要考虑两个问题:安全工具集成到开发流水线的难易程度是怎样的? 这些工具如何能最好地帮助开发和安全团队无缝协作?安全工具的集成和功能必须是自动化的,这样开发人员就不需要花费额外的时间来启动扫描并验证其发现。安全工具还必须提供速度和准确性,确保不会出现误报。最后,安全工具应该能够实时识别、修复和防御漏洞,同时也能够解决开源中的风险。

4. 建立 DevSecOps 文化

由于开发和安全都是业务驱动,因此双方必须在建立和维护 DevSecOps 文化的同时承担共同的责任。建立良好的 DevSecOps 文化最重要的部分是相互尊重。安全和开发必须尊重彼此的工作,并齐心协力无缝工作。安全工具必须也是开发工具,并应根据必要的目的和要求进行集成。

5. 自动化安全测试

在开发期间的任何安全测试需要自动化,以匹配快节奏的 DevOps 环境。由于开发过程中不断有新的代码注入,安全控制十分必要,因此使用自动化安全测试工具在整个 SDLC 中不可或缺。这样有助于提供自动安全分析,帮助开发人员优先考虑首先修复哪些代码问题。

6. 进行威胁建模

威胁建模是一个可以识别安全要求和威胁的过程。它有助于衡量应对威胁所需的安全工作,并确定相应补救措施的优先级顺序。威胁建模通过识别应用程序设计中的缺陷来加强组织的安全架构,它有助于评估新的攻击形式。因此,在开发过程开始之前进行威胁建模是关键的。

7. 定期检查代码安全实践

企业的安全框架不仅有助于安全策略的实施,还有助于制定定期评估会议,以测试所实施策略是否有效。定期审查 SaC 实践,来了解其是否运作良好以及是否需要进行更改。

DevSecOps 安全即代码基础指南的更多相关文章

  1. Linux命令之Nano基础指南

    Nano基础指南 1.  Nano基础 目的 这是篇nano简明使用指南,帮助你快速了解nano的基本用法.如想获取更多的帮助信息,请参阅: http://www.nano-editor.org 打开 ...

  2. 《Google 代码风格指南》

    <Google 代码风格指南> https://github.com/google/styleguide

  3. python的PEP8 代码风格指南

    PEP8 代码风格指南 这篇文章原文实际上来自于这里:https://www.python.org/dev/peps/pep-0008/ 知识点 代码排版 字符串引号 表达式和语句中的空格 注释 版本 ...

  4. python代码风格指南:pep8 中文版

    本文档所提供的编码规范,适用于主要的Python发行版中组成标准库的Python代码.请参阅PEP关于Python的C实现的C编码风格指南的描述. 本文档和PEP257(文档字符串规范)改编自Guid ...

  5. C++代码风格指南总结

    C++代码风格指南 代码风格的重要性 今天我收到thougthwork笔试没过的消息, 心里确实很难受, 然后师兄说我代码写得很糟糕 细想一下, 我写代码确实是随心所欲, 并没有遵循什么规范; 所以现 ...

  6. PEP 8 - Python代码样式指南

    PEP 8 - Python代码样式指南 PEP: 8 标题: Python代码风格指南 作者: Guido van Rossum <python.org上的guido>,Barry Wa ...

  7. Android逆向-java代码基础

    作者:I春秋作家——HAI_ 0×00 前言 看这篇可以先看看之前的文章,进行一个了解.Android逆向-java代码基础(1)Android逆向-java代码基础(2) 之前看到有大佬用smali ...

  8. Google JavaScript代码风格指南

    Google JavaScript代码风格指南 修正版本 2.28 Aaron Whyte Bob Jervis Dan Pupius Eric Arvidsson Fritz Schneider R ...

  9. 003-Python3-基础语法-运行方式、代码基础要求、运算符[算数运算符、比较运算符、赋值运算符、位运算符、逻辑运算符、成员运算符、身份运算符]、运算符优先级

    一.基础语法 参看地址:https://www.runoob.com/python3/python3-tutorial.html 1.1.运行方式 1.文件方式 编写一个hello.py文件, pri ...

  10. 大神的JS代码风格指南

    js代码风格指南:1.缩进使用空格,不要用制表符2.必须用分号3.暂时不用ES6(modules)例如export和import命令4.不鼓励(不禁止)水平对齐5.少用var 都应该使用const或者 ...

随机推荐

  1. Go 方法集合与选择receiver类型

    Go 方法集合与选择receiver类型 目录 Go 方法集合与选择receiver类型 一.receiver 参数类型对 Go 方法的影响 二.选择 receiver 参数类型原则 2.1 选择 r ...

  2. JUC并发编程学习笔记(十六)Volatile

    Volatile 保证可见性 private volatile static Integer num = 0; 使用了volatile关键字,即可保证它本身可被其他线程的工作内存感知,即变化时也会被同 ...

  3. OpenCL任务调度基础介绍

    当前,科学计算需求急剧增加,基于CPU-GPU异构系统的异构计算在科学计算领域得到了广泛应用,OpenCL由于其跨平台特性在异构计算领域渐为流行,其调度困难的问题也随之暴露,传统的OpenCL任务调度 ...

  4. vue-router重写push方法,解决相同路径跳转报错,解决点击菜单栏打开外部链接

    修改vue-router的配置文件,默认位置router/index.js import Vue from 'vue' import Router from 'vue-router' /** * 重写 ...

  5. vue 组件之间的自定义方法互相调用

    1,先定义一个中间通信文件js globalBus.js import Vue from 'vue'; export const globalBus = new Vue(); 2,A.vue组件的方法 ...

  6. SpringBoot Seata 死锁问题排查

    现象描述:Spring Boot项目,启动的时候卡住了,一直卡在那里不动,没有报错,也没有日志输出 但是,奇怪的是,本地可以正常启动 好吧,姑且先不深究为什么本地可以启动而部署到服务器上就无法启动的问 ...

  7. [ABC268G] Random Student ID

    Problem Statement Takahashi Elementary School has $N$ new students. For $i = 1, 2, \ldots, N$, the n ...

  8. React Hooks 钩子特性

    人在身处逆境时,适应环境的能力实在惊人.人可以忍受不幸,也可以战胜不幸,因为人有着惊人的潜力,只要立志发挥它,就一定能渡过难关. Hooks 是 React 16.8 的新增特性.它可以让你在不编写 ...

  9. Bert-vits2-v2.2新版本本地训练推理整合包(原神八重神子英文模型miko)

    近日,Bert-vits2-v2.2如约更新,该新版本v2.2主要把Emotion 模型换用CLAP多模态模型,推理支持输入text prompt提示词和audio prompt提示语音来进行引导风格 ...

  10. 聊聊kube-scheduler如何完成调度和调整调度权重

    本文分享自华为云社区<kube-scheduler如何完成调度和调整调度权重>,作者: 可以交个朋友. 一.概述 Kube-scheduler作为k8s集群的默认调度器,它监听(watch ...