前言
前面写了一篇关于SDL实践方面文章,但是目前越来越多的公司开始转向了devsecops体系的建设,看了一些关于这方面的文章,浅谈一下自己的理解。devsecops说白了就是devops+sec。在devops的开发流程下嵌入安全。
由于本人水平有限,文章中可能会出现一些错误,欢迎各位大佬指正,感激不尽。如果有什么好的想法也欢迎交流~~
开发模式的演变
在了解devsecops以前,有必要了解一下开发模式的演变过程,大致经历了三个阶段:瀑布开发,敏捷开发,devops。这三个阶段并无优劣之分,只是适应的场景不同。
瀑布开发
传统的开发模式,我们称之为瀑布开发。
瀑布模型,简而言之,就是等一个阶段所有工作完成之后,再进入下一个阶段。
这种模型适合条件比较理想化(用户需求非常明确、开发时间非常充足)的项目。大家按部就班,轮流执行自己的职责即可。
适用场景:用户需求非常明确、开发时间非常充足
敏捷开发
目前随着市场竞争的加剧,传递的开发模型已经不太适合。等你把全部的功能开发完成上线,别人早就已经占领了市场,因此为了适应目前的环境,提出了敏捷开发。敏捷开发就是为了适应目前的互联网时代快速上线的需求,把大需求变成小需求,把大的时间周期缩小为短的周期,尽快上线运行。
适用场景:项目开发周期短,要求尽快上线
devops
敏捷开发加快了版本更新的速度,但是它还存在着问题,那就是开发,qa,运维还是各干各的,成为了新的瓶颈。这时候devops就被提出了。
适用场景:对敏捷开发的进一步补充,通过对各种工具的使用,进一步加快开发部署过程
简单地来说,就是更好的优化开发(DEV)、测试(QA)、运维(OPS)的流程,开发运维一体化,通过高度自动化工具与流程来使得软件构建、测试、发布更加快捷、频繁和可靠。
devops打破了开发与运维之间的壁垒,促进开发和运维人员的沟通,增进彼此的理解。在DevOps的流程下,运维人员会在项目开发期间就介入到开发过程中,了解开发人员使用的系统架构和技术路线,从而制定适当的运维方案。而开发人员也会在运维的初期参与到系统部署中,并提供系统部署的优化建议。
目前经常说的CI/CD可以说就是把devops从理论变成现实的一种方案。开发人员和测试人员,运维人员使用CI/CD流水线确保以快速、安全和可靠的方式创建和发布软件。
下面的图可以比较形象的看出来他们的区别
devops的工具支持
devops既然讲究快速更新迭代,那么使用人工的方式就是行不通的。必须要借助自动化工具的帮助,下面是devops流程中经常会使用的工具。
代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion
构建工具:Ant、Gradle、maven
自动部署:Capistrano、CodeDeploy
持续集成(CI):Bamboo、Hudson、Jenkins
配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail
容器:Docker、LXC、第三方厂商如AWS
编排:Kubernetes、Core、Apache Mesos、DC/OS
服务注册与发现:Zookeeper、etcd、Consul
脚本语言:python、ruby、shell
日志管理:ELK、Logentries
系统监控:Datadog、Graphite、Icinga、Nagios
性能监控:AppDynamics、New Relic、Splunk
压力测试:JMeter、Blaze Meter、http://loader.io
预警:PagerDuty、pingdom、厂商自带如AWS SNS
HTTP加速器:Varnish
消息总线:ActiveMQ、SQS
应用服务器:Tomcat、JBoss
Web服务器:Apache、Nginx、IIS
数据库:MySQL、Oracle、PostgreSQL等关系型数据库;cassandra、mongoDB、redis等NoSQL数据库
项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker
devops带来新的安全风险
1)大规模使用容器技术带来的安全风险:镜像安全,k8s等平台安全,容器运行时安全,容器安全基线等
2)devops的微服务架构中存在大量的API接口,api接口的安全性如何防范也是需要思考的:api资产梳理,api漏洞检测
3)CI/CD平台的安全:如jenkins平台的安全
4)组件安全:为了快速交付使用了大量的第三方组件,这些组件的安全性也需要进行监控
上面这些