什么是容器安全?

发布日期 2025年5月16日
展现两人使用不同语言编程的 2D 插图
By Phill Powell and Ian Smalley

容器安全定义

容器安全防护面向容器化应用程序和底层基础设施,贯穿于从构建到部署和运行的整个软件开发生命周期

容器安全旨在加强保护措施和最大限度地降低安全风险。

首先需明确讨论范畴,因为“容器安全”一词具有多重定义。容器是自包含的软件单元,将应用程序代码与所有必要的库和依赖项捆绑在一起。它们可支持代码在任何计算环境中运行,包括桌面、传统 IT 和云基础设施。我们在此描述的安全挑战主要针对用于保存和保护数据的容器。

数据如今已成为商业和通信的命脉。没有数据,现代世界将陷入停滞,这就是为什么必须不惜一切代价保护信息的原因。欺骗和犯罪仍然是人类社会的永恒主题。今天的网络罪犯与过去的窃贼有着同样的动机,只不过他们拥有利用安全漏洞的工具和技术。

应用程序的关键作用

为了充分保护数据,我们需要了解容器。此外,我们还需要确保了解应用程序的重要性(因为这正是容器所承载的),应用程序对公司或个人数据执行多种操作。

一共有多少种应用程序?这是一个很难弄清楚的数字,但到 2025 年 4 月,Google Play 和 Apple App Store 各自提供了大约 200 万种不同的应用程序。无论这些应用程序是由组织还是个人使用,安全漏洞几乎肯定会在从应用程序用户到应用程序本身的数据传输过程中出现。

此类传输涵盖多种场景:从个人玩家向游戏应用程序提供财务数据,到企业向会计应用程序提交敏感数据及专有信息。如果这些信息被窃取(通过恶意软件或其他类型的网络威胁)或暴露,就会引发公关噩梦、竞争优势丧失和安全漏洞。它甚至可能导致价值数百万乃至数十亿美元的客户数据遭窃。

因此,在各个层面,都有大量的私人信息被分享给应用程序并通过应用程序共享。风险是巨大的,这就是为什么保持稳健的容器安全态势是网络安全至关重要的一部分。

IBM DevOps

什么是 DevOps?

Andrea Crawford 阐述了什么是开发运维、开发运维的价值,以及开发运维实践和工具如何帮助您完成从应用程序构思到生产的整个软件交付管道。本课程由 IBM 资深思想领袖主导,旨在帮助企业领导者获得所需的知识,以优先考虑能够推动增长的 AI 投资。

容器如何工作?

在软件开发环境中,容器技术承载着应用程序运行所需的一切。容器将所有资源打包成一个自包容的实体以供随时取用,且可在各类环境中持续运行。运行该应用程序所需的所有文件均存放于此:

  • 应用程序代码:应用程序代码包括应用程序的所有可执行文件,例如源代码和编译后的二进制代码。
  • 运行时环境:容器运行时环境包含执行应用程序代码所需的框架、库和工具。
  • 系统库:系统库是共享资源,提供常用功能,例如图形库、网络库和文件输入/输出传输节点。
  • 系统工具:每个应用程序都需要特定的实用程序和工具来帮助其正常运行。
  • 配置文件:配置文件确定应用程序的行为方式以及使用的设置。
  • 依赖项:依赖项是指应用程序为按预期运行必须能够访问的外部框架、组件和库。
  • 环境变量:开发、测试和生产环境可根据容器展示的每个运行时活动进行更改。容器化环境中的变量有助于控制这些设置。
  • 操作系统内核:容器不需要完整的操作系统 (OS),而是使用一种利用操作系统内核功能的操作系统虚拟化。
  • 安全设置:用户可以通过这些设置自定义安全措施,以调节访问控制、功能和资源限制等变量。

什么是容器映像?

容器映像是静态且不变的文件,其中包含可执行代码并在 IT 基础设施上隔离运行。容器映像包含在操作系统上创建容器所需的组件。容器映像由不同的层聚合而成,功能类似模板。

容器映像是云原生环境中交付应用程序的默认格式,也是容器安全的起点。基础映像对于安全很关键,因为它是所有衍生映像的基础。容器安全性始于使用可信来源,确保容器映像来自信誉良好的组织,托管在可靠的注册表上,并包含所有组件的可访问源代码。

必须在整个生命周期中采用主动漏洞管理,即使从受信任的基础映像开始也是如此。使用集成到注册表中或作为单独工具提供的映像扫描仪定期扫描所有容器映像。此外,识别违反政策或最佳实践的容器映像;这通常称为容器配置错误。

整个软件开发生命周期的容器安全性

软件开发生命周期 (SDLC) 控制着软件生命周期的“季节”及其工作存在。这里概述的七个阶段都是必要的,并且应按顺序进行。

许多关键技术与这些开发阶段密切相关,并且这些解决方案(以及它们提供的安全措施)也在 SDLC 中应该出现的时间点进行讨论。

规划

初始阶段是定义项目的各个方面。这意味着首先要概述项目的范围、预期目标和可用于该项工作的资源。但它通常还包括其他活动,例如成本优点分析、可行性研究和日程安排。

建议在规划阶段讨论以下两项相关技术,因为这两项技术可以在 SDLC 的任何部分期间实施:

  • CI/CD 管道:持续整合/持续部署 (CI/CD) 管道是一种 DevOps 开发运维工作流,其中容器化应用程序通过使用自动安全检查来提高速度并获得简化。通过自动化和持续的安全监控,可以标记问题以执行补救,确保在造成进一步影响之前进行修复。管道可以通过实施左移方法(一种在 DevOps 开发运维流程早期集成安全措施的方法)进一步加强。将容器与 CI/CD 管道结合使用,有助于将安全实践整体集成到 DevSecOps 团队使用的工作流中。
  • 供应链:供应链是与容器安全要素紧密结合的相关技术的又一案例。安全小组致力于加强供应链容器安全,并负责定期扫描容器图像和相关组件,借此应对新的网络威胁和已知漏洞。

需求分析

下一阶段涉及从利益相关者和用户的需求角度,进一步深入了解项目需求。需要收集、分析和管理适用于项目的各种要求。

设计

在这一阶段,设计师通常是团队焦点,因为需要将所有收集的需求信息整合为可行的软件设计方案。该设计蓝图用于描述所需的架构和数据结构,以及应采用的用户界面。

有四种相关技术最好在设计阶段处理(如果要使用的话)。

  • 云:容器被广泛采用的同时,云计算也同样被广泛接受。现在,云中大量使用容器来创建云原生应用。保护基于云的信息资产的责任落在了 IBM Cloud、Google Cloud、Microsoft Azure 和 Amazon Web Services (AWS) 等云服务提供商身上。建立云安全涉及制定安全措施,以促进数据保护、基础设施安全和身份管理。转移到云中的工作负载需要处理相同的基本安全问题;即使存储在云环境中,映像存储库仍需要进行例行扫描,以确保其可行性。云的实施最好在 SDLC 的设计阶段就开始,因为它对架构和资源规划有重大影响;而这两点都必须在开发开始前确定。
  • Linux:Linux 是容器安全的重要组成部分。开源平台提供容器安全所使用的基本构建模块和防火墙等必要的安全功能。Linux 命名空间是有效隔离环境中正在运行的容器并最大限度地减少其对资源的访问,同时保持一致的运营的地方。Linux 容器充分利用 Linux 内核的功能,通过使用各种方法来限制和隔离容器化的工作负载。Linux 是关键程序细节最终确定和实际编码开始的地方。因此,它可以在设计阶段或稍后的实施阶段进行。
  • 微服务:与 Linux 一样,微服务使用容器对每个微服务进行隔离,除了主机操作系统和其他服务之外,还为其提供了自己的“沙盒”环境。这不仅为微服务容器提供了额外的可扩展性,还减少了攻击面并提高了其防御能力。与其他容器安全最佳实践一样,微服务采用最小特权原则,即仅赋予容器绝对最小的必要特权,以便它可以按预期执行其功能,但不会超出其访问资源或影响其他容器的能力。理想情况下,微服务应该在设计阶段使用,因为在此阶段,单体应用程序被分解为较小的服务,然后可以独立部署。但在某些情况下,也可以在部署阶段使用微服务。
  • 虚拟机:虚拟机 (VM) 可以提供额外的容器安全性,因为它们提供了额外的隔离层。虚拟机拥有自己独立的操作系统,减少了容器因与其他容器交互而受到污染的风险,因为它们不必向主机系统寻求资源。虚拟机还表现出比单独的容器所能实现的更稳固的安全边界,这有助于减少安全漏洞蔓延到整个文件系统并对正在处理的工作流产生负面影响的可能性。虚拟机的使用应该在设计阶段进行,因为系统的架构和结构都是在这个阶段理论化和规划的。

开发

完成所有“准备”工作后,终于可以使用软件设计师提供的设计规范来构建软件了。开发人员编写代码、创建应用程序编程接口 (API) 并根据需要集成组件。

尽管 Linux 通常在设计阶段使用,但它也会在开发阶段使用,因为这是选择软件架构和平台以及开始软件编码过程的阶段。

测试

构建适当的测试体系可确保创建的代码按预期执行,以免出现错误。其重点是建立自动化策略以标记存在安全问题的构建——尤其当发现新漏洞时更应如此。修复容器漏洞的成效远低于重建容器,因此安全测试应包含可触发自动重建的策略。测试阶段可包括整合测试、单元测试和系统测试

部署

假设前面的所有步骤都已完成,那么就可以发布软件并将其提供给用户了。部署包括准备软件产品以进行大规模分发所需的所有相关任务,例如打包和配置软件。

Kubernetes

Kubernetes 为容器编排工作和容器安全提供自动化的开源平台来保护容器化应用程序,从而支持容器编排工作和容器安全。Kubernetes 环境提供安全功能,例如基于角色的访问控制 (RBAC)、管理 pod(Kubernetes 所指的容器)之间通信的网络策略。它们还提供机密管理(优先考虑敏感数据的安全存储,例如密码、API 密钥、加密密钥和令牌)。

Kubernetes 安全流程会对 Kubernetes 集群进行定期监控,以查找可能的错误配置,也就是任何可能带来安全风险并暴露漏洞的设置。虽然从技术上讲,Kubernetes 可以在软件旅程的任何部分使用,但公认的 Kubernetes 主要用途是处理容器化应用程序的部署和扩展。

前面提到,微服务也可以在部署阶段使用。

维护

SDLC 流程的最后阶段是为软件提供持续支持。这一阶段可能涉及生成程序增强功能、错误修复和其他类型的性能改进。

容器安全最佳实践

组织可以采取各种常规步骤来强调其安全策略的有效性。其中大多数策略均体现常识性方法,并采用经过验证的漏洞管理原则:

限制访问

许多容器安全措施以某种方式、状况或形式限制访问。例如,根据“最小特权”原则,少授予容器特权,只给予容器运行所需的权限。类似地,限制访问控制以仅允许授权用户访问和操作 Container Registry 中的映像。遵循基于角色的访问控制 (RBAC) 规则,确保正确的用户身份验证并防止未经授权的访问。最后,确保容器的基础映像仅来自经批准的来源。在实施之前检查基础映像,以验证它们已经过适当审查并且来自官方认可的来源。

最大限度地减少暴露

为了有效地限制漏洞,组织必须通过剥离容器映像并删除不必要的服务、流程和包来减少攻击面。目标是尽量减少针对容器映像的潜在攻击媒介。

执行常规漏洞扫描

使用容器安全工具对容器环境进行例行漏洞扫描。此外,定期扫描映像并定期更新容器映像以及您正在使用的容器引擎,例如 Docker

时刻保持防御态势

漏洞可能随时出现,因此最好通过定期执行运行时监控和保护运行时安全来保持警惕。还要对潜在的网络安全问题保持警惕。团队协作可以增强安全性,公司中的每个人都应该为越来越重要的容器安全事业做出贡献并保持专注。

作者

Phill Powell

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

相关解决方案
IBM Instana Observability

利用 AI 和自动化的强大功能,主动解决整个应用程序堆栈中的问题。

深入了解 IBM Instana Observability
DevOps 解决方案

使用开发运维软件和工具,在多种设备和环境中构建、部署和管理云原生应用程序。

探索 DevOps 解决方案
云咨询服务

通过我们的云咨询服务持续实现应用现代化,加速业务敏捷性与增长——支持任意平台部署。

深入了解我们的云咨询服务
采取后续步骤

从 IBM Instana® 的主动问题检测到跨堆栈实时洞察,让云原生应用程序保持高可靠运行。

  1. 了解 IBM Instana
  2. 探索 DevOps 解决方案