随着云计算开发和部署变得越来越快且越来越灵活,安全团队意识到,保护云应用和系统部署的唯一有效方法是开发可整合到部署管道的安全控制,以及尽可能自动化。安全社区很多人将这种方法称为安全即代码,这是采用基础设施即代码的概念,即将所有虚拟和基于云的堆栈组件定义为可配置元素,这些元素只是被视为一种软件定义,并在在配置文件和模板中进行管理。
然而,很多安全团队在采用这种方法时并不顺利。大多数安全专业人士并没有软件开发背景,并且,他们通常与DevOps团队脱节,DevOps团队使用高度自动化和灵活的工具及流程来集成、测试和部署代码到云端。
重要的是要记住,大多数DevOps工程师和开发人员希望他们的部署尽可能安全,但他们需要安全性整合其环境,而不是部署障碍以及使用缓慢而笨重的工具和流程削弱可扩展性和速度。
为此,安全团队应该开始学习DevOps环境中使用的DevOps工具,这通常包括Jenkins、Chef、Puppet、Salt、Ansible、GitHub等。安全团队不需要精通所有这些DevOps工具,但需要注意以下几点:
- 用于存储和管理代码的DevOps工具。例如,如果Jenkins用于整合GitHub。安全团队将需要知道如何管理权限、当代码签入和推出时Jenkins中可使用哪些日志。此外,源代码扫描和审查应在这个级别进行集成,以确保代码中不包含密码或加密密钥。
- 用于创建和管理服务器配置及部署编排的工具。Chef、Puppet和Ansible是很多环境中的常见选择,它们都有自己的定义语音和不同的配置文件。安全团队需要整合配置设置和安全策略到这些平台内的定义文件。幸运的是,所有这些主要配置和自动化工具都有可用的配置模板和策略评估模板,并符合互联网安全中心基准、美国国防信息系统局技术部署指南和其他行业最佳做法和要求。
- 用于存储和访问登录凭证和密钥的DevOps工具。全面的DevOps做法会规定使用单独的平台用于控制登录凭证和密钥,例如HashiCorp Vault或Ansible Tower。监控和控制对这些平台的控制至关重要,安全团队应该能够独立审查访问并发送日志到远程日志记录库。
在构建系统进行部署时,安全团队需要定义配置设置和策略,并将其集成到正在使用的工具中。通常情况下,这些定义将使用JavaScript Object Notation或者YAML格式进行编码,这两者都易于学习。
当服务器和应用堆栈元素版本得到批准后,安全团队应该部署无法变更的基础设施,在下一个批准的修订版本确定之前,任何更改尝试都将被忽略。上述很多DevOps工具支持这种设置。例如,如果Ansible手册用于生成服务器配置,再次运行该手册将不会导致任何其他更改或问题。
为了成功整合到开发和部署过程,安全团队需要确保团队成员大部分时间都在与DevOps团队协同工具。这种方法(又是被称为DevSecOps)可确保在代码推送到生产或者任何系统在云环境构建之前,所有变更和更新都将得到妥善保护。
然而,这个部署管道整合只是整个流程的一半。安全团队还需要为云端运行的系统和应用提供自动反馈,这将在之后的文章中进行讨论。