概述
容器安全防护涉及定义并遵守构建、部署和运行时实践,从所支持的应用到所依赖的基础架构,为 Linux 容器提供周全的保。
随着企业陆续采用微服务设计模式和容器技术(如 Docker 和 Kubernetes),安全团队面临了重重挑战,需要开发容器安全防护解决方案来促进这些基础架构的变迁。容器安全防护需要集成的和持续的,而且要支持企业的整体安全态势。
容器编排器(即 Kubernetes)在容器安全性方面发挥关键作用,并提供对丰富上下文数据的访问途径,可实现更好的可见性和合规性、基于上下文的风险分析、联网和运行时检测。有效的容器安全防护立足于 Kubernetes 构造之上,例如部署、容器集和网络策略等。例如,Kubernetes 网络策略是一个内置安全功能,应当用于控制容器集间的通信,最大限度地减小攻击者的攻击覆盖面。
通常而言,所谓的容器持续安全防护包含以下方面:
- 保护容器管道和应用的安全
- 保护容器部署环境和基础架构的安全
- 在运行时保护容器化工作负载的安全
了解公司如何实施容器安全防护计划。
容器安全等于软件供应链安全
在传统的软件开发中,安全性审查可能是开发结束时最后执行的一系列测试。但随着现代云原生开发工作流的发展,攻击面比以前大了许多,安全防护也更加复杂。在云原生环境中,容器是标准的应用交付格式,代码会频繁地更新并从多个存储库中提取。诸如配置不当等人为错误,可能在开发和部署周期的许多阶段为未经授权访问开启大门。几乎任何地方都可能会出现安全漏洞。因此,安全防护必须是一个持续的过程。
正如容器部署采用自动化方法(使用 Kubernetes 等容器编排工具)来处理一样,安全防护也必须实现自动化。可以运用 DevSecOps 理念(一个为增加 DevOps 安全性重点而创建的概念),在整个开发周期中不断地审查和检查代码。漏洞可以及早、快速地被发现和修复,而不是置之不管,直到它们成为费时费力的意外问题。由于容器具有不可变性,因此容器安全防护意味着在构建阶段而非运行之时对代码进行修补,从而在容器被销毁和重建时,漏洞不会再次出现。
扫描容器镜像中的恶意软件和其他安全漏洞是一个关键的步骤,应当成为多重安全防护层之一。企业需要考虑整个软件供应链的安全防护,换言之,安全防护要涵盖容器化软件开发和部署的所有步骤,包括依赖项和运行时环境。
下方列出了一些将供应链安全防护考虑在内的容器化开发策略:
- 可信内容和企业级内容存储库提供了具有高级安全防护和访问控制的预加固镜像。
- 零信任方法为关键资源分配级别尽可能严格的访问限制。
- 策略即代码将安全控制直接嵌入到 CI/CD 管道。
- 签名和验证通过确认容器镜像未被篡改来实时认证并建立信任。
- GitOps 实践有助于管理应用和容器的安全性配置。
将安全防护内置于容器管道的基本步骤
收集镜像
容器从一层层的文件创建而来,这些文件称为容器镜像。
借助 Buildah 等工具,您可以从头开始构建兼容 OCI 和 Docker 的镜像,不论有无现有的容器镜像来充当起点。
容器镜像是云原生环境中的标准应用交付格式,但即便是云原生公司也会在云提供商之间混合部署工作负载。理想的容器安全防护解决方案应支持所有架构,无论基础架构运行在私有硬件、共享数据中心,还是 Amazon Web Services(AWS)、Microsoft Azure 或 Google Cloud Platform 等公共云上。
对安全性而言,基础镜像或黄金镜像是最重要的一个因素,因为它要用做创建衍生镜像的起点。容器安全从寻找基础镜像的可信来源开始。确认镜像来自已知的公司或开源团体,托管在信誉良好的镜像仓库中,并且镜像中所有组件的源代码均可获得。
不过,即使是使用受信任的镜像,添加应用和更改配置也会带来新的变数。在引入外部内容来构建应用时,请考虑采取积极主动的漏洞管理:
- 使用内置于镜像仓库中或单独的镜像扫描程序,定期扫描所有的镜像。找到的扫描程序应当能基于特定的语言、软件包和镜像层进行扫描。
- 识别出违反政策或既定最佳实践的修改容器镜像(称为容器不当配置),以降低潜在泄露的可能性和影响。
预测和修复漏洞
容器之所以广受欢迎,是因为它能简化应用或服务及其所有依赖项的构建、封装与推进,而且这种简化涵盖整个生命周期,并且跨越不同的工作流和部署目标。然而,容器安全依然面临着一些挑战。容器可以帮助您实施更加细致的工作负载级安全防护,但它们也会带来新的基础架构组件和陌生的攻击面。恰当的容器安全防护解决方案必须有助于确保集群基础架构和编排器以及它们所运行的容器化应用的安全。
静态安全策略和检查清单无法针对企业内的容器进行扩展:
- 供应链需要更多的安全策略服务。
- 安全团队需要权衡容器化环境的网络和监管需求。
- 构建、维护和服务阶段所用的工具需要具有不同的权限策略。
有效的容器安全防护计划力求实时修复漏洞,并在部署镜像之前缩小攻击面,同时保留出处方面的细节。将安全防护内置于容器管道,可以为您的基础架构增添防护,从而保障容器的可靠性、可扩展性和信赖度。
在收集容器镜像时,思考以下问题:
- 容器镜像是否有签名并且来源可信?
- 镜像来自于何处?怎样重建它?
- 给定镜像的最后扫描日期是何时?
- 运行时和操作系统层是否处于最新状态?
- 容器的更新速度和频率如何?
- 安全问题是否已确定?如何跟踪?
管理访问权限
获取了镜像后,下一步是管理您团队使用的所有容器镜像的访问权限和升级。这意味着要保护好您下载和构建的镜像。私有镜像仓库可帮助您利用基于角色的分配来控制访问权限,也有助于您通过分配相关元数据到容器来管理内容。此元数据可帮助您识别和跟踪已知的漏洞。私有容器镜像仓库也为您提供相应的功能,为您存储的镜像实现自动化和分配策略,同时最大限度减少可能为容器环境带来漏洞的人为错误。此外,具有企业级安全防护功能的容器镜像仓库还内置了漏洞扫描程序。
在决定如何管理访问权限时,思考以下问题:
- 可以利用哪些基于角色的访问控制来管理容器镜像?
- 有没有可协助镜像整理的标记功能?能否对镜像进行标记?是仅允许用于开发环境,还是也可用于测试和生产环境?
- 镜像仓库是否提供跟踪已知漏洞所需的可见元数据?
- 能否利用镜像仓库来分配和自动化策略(例如,查验签名和扫描应用代码等)?
整合安全测试和自动化部署
管道的最后一步是部署。完成了构建后,您需要根据行业标准来进行管理,比如互联网安全中心(CIS)和美国国家标准与技术研究所(NIST)制定的标准。此处的诀窍是,了解如何通过自动化策略对构建进行安全问题标记,特别是在发现新的漏洞时。虽然漏洞扫描依然重要,但它只是用于保护容器环境的一系列安全举措的一部分。
由于容器修补必定不如重新构建容器的解决方案,因此整合安全测试时应当要考虑能触发自动重新构建的策略。在这一步中,首先是运行能跟踪和标记问题的组件分析工具。其次是开发相应的工具来实现基于策略的自动化部署。
在整合安全测试和自动化部署时,思考以下问题:
- 我的容器中是否有包含已知漏洞的容器?(在部署到生产环境中之前,应该修复这些漏洞)。
- 我的部署配置是不是正确?是不是有特权过高的容器并不需要加强特权?我使用的是只读根文件系统吗?
- 对于 CIS 基准和 NIST SP 800-190,我的合规情况如何?
- 我有没有使用内置功能(如网络策略和命名空间)来隔离任何被视为敏感的工作负载?
- 我有没有使用内置安全防护和强化功能,如 SELinux、AppArmor 和 seccomp 配置集等?
在运行时保护容器化工作负载的安全
容器安全防护并不随着测试和部署结束而终止,而是延伸到容器化应用运行之时。威胁检测、网络安全防护和事件响应等方面变得更为相关。
在运行时,应用可能面临无法预测的现实威胁,构建过程中遗漏的漏洞和配置错误也可能会被人利用。运行时安全防护应该包括查找行为异常的应用。运行时异常检测可以识别特权提升、加密挖矿、意外网络流、容器逃逸等不安全的行为。
网络分段是另一个用来最小化攻击面的注意点。在 Kubernetes 中,默认网络策略允许容器集与集群中的其他容器集进行通信。实施零信任策略后,可以确保单个受损的容器集不会导致该集群中所有容器集被攻破。
最后,事件响应策略可以帮助团队对事件做出妥善的响应。响应可以包括向安全信息和事件管理(SIEM)系统发送事件,向应用负责人提供关于哪些部署需要修复的详细信息和步骤,甚至是自动终止和重新启动容器集。响应要遵循重建和重新部署问题容器的实践方法,而不是修补正在运行的容器。
保护您的基础架构
另一层容器安全防护是容器的节点/主机操作系统(OS)提供的隔离。您需要可以提供最大程度容器隔离的主机 OS。这是保护容器部署环境的一个重要组成部分。容器化 Kubernetes 环境中的主机操作系统在不同容器之间共享,并由容器运行时进行管理,该运行时通过与 Kubernete 交互来创建和管理容器(或容器集)。
主机操作系统应当与容器隔离,以避免单个受损容器损害主机操作系统和所有其他容器。若要使容器平台具有弹性,可使用网络命名空间来隔绝应用和环境,并通过安全挂载来附加存储。不要将容器运行时配置为共享主机网络命名空间、IPC 命名空间或 UPC 命名空间。选择一个预强化的容器优化主机操作系统,并且使用主机漏洞扫描功能。
API 管理解决方案中应包含身份验证和授权、LDAP 集成、端点访问控制和速率限制。
在决定如何保护容器基础架构时,思考以下问题:
- 哪些容器需要相互访问?它们要如何发现彼此?
- 如何控制对共享资源(如网络和存储)的访问和管理?
- 如何监控容器的健康状况?
- 如何自动扩展应用容量以满足需求?
- 如何管理主机更新?是否所有容器需要同时进行更新?
我们可以助您一臂之力
红帽® OpenShift® 中包含红帽企业 Linux®。它可以自动化容器应用生命周期,将安全防护集成到容器管道中,让您能够从 DevOps 策略过渡到 DevSecOps 策略。通过我们的容器目录,您可以访问众多认证镜像、语言运行时、数据库和中间件,它们能够在运行红帽企业 Linux 的任何位置上运行。红帽提供的镜像全部经过签名和认证,具有出处和完整性保障。
我们会监控我们的容器镜像中是否有新发现的漏洞(包括持续更新和公开发布的健康指数),同时也会发布安全性更新和容器重新构建并推送到公共容器镜像仓库。红帽 Kubernetes 高级集群安全防护集成了 DevOps 和安全防护工具,可以帮助您缓解安全威胁并执行安全策略,尽量降低您应用的运维风险。
红帽服务互连允许容器之间彼此访问和沟通,同时尽可能减少对企业安全或用户数据造成额外风险。
红帽的安全合作伙伴可通过已获得认证的集成来扩展和增强我们的容器安全防护能力。红帽 OpenShift 在平台中内置了安全防护功能,与我们的安全合作伙伴解决方案相辅相成,可帮助保障应用和容器在整个 DevOps 生命周期中的安全。
此外,也有以下精彩功能供您选用:
- 全网范围容器编排和管理
- 功能丰富且支持多用户协作的 Web 控制台
- CLI 和 IDE 接口
- 利用 CI 进行集成
- 构建自动化和源至镜像
- 部署自动化
- 支持远程存储卷
- 简化安装和管理
- 支持多种编程语言、框架和服务