强化和提高容器安全性

强化容器涉及到实施安全措施来减少其攻击面,并增强其灵活应对潜在威胁的能力。本节列出了常用于强化容器的技术。此列表并不全面,容器安全性取决于组织的基础架构。

有关详细信息,请参见安全和强化指南

1. 使用极简基础映像

SUSE Manager 5.0 使用 SLE Micro 5.5 作为基础。此映像中预装的软件包较少,因此可以减少潜在攻击面。

大小更小

与经典操作系统映像相比,极简基础映像的大小要小得多。这些映像去除了不必要的软件包和库,可以最大程度地减少总体占用空间,从而缩短下载时间并降低存储要求。

针对性的功能

极简基础映像旨在提供运行容器化应用程序所需的基本功能。极简基础映像通常包含

  • 核心系统实用程序

  • 运行时环境(例如外壳)

  • 必备的库

    极简基础映像通常不包含非必备组件,例如:

  • 文档

  • 开发工具

  • 不必要的守护程序

安全性更高

极简基础映像最大程度地减少了安装的软件包和依赖项数量,可以减少容器环境中的攻击面和潜在漏洞。这样就可以通过限制恶意行动者利用系统的途径来增强安全性。

灵活性

极简基础映像可让开发人员更灵活地自定义和优化其容器化应用程序。由于这些映像仅包含基本的必备组件,开发人员可以更好地控制要包含哪些附加组件和依赖项,从而根据具体的应用程序要求定制容器环境。

2. 定期更新

通过安全补丁和更新来使容器映像保持最新状态。使用如下工具定期扫描容器映像中的漏洞:

3. 启用映像签名

使用数字签名来校验容器映像的真实性和完整性。实施映像签名和验证机制,以确保仅部署可信的映像。

数字签名

数字签名是一种加密机制,用于验证数字内容(例如容器映像)的真实性和完整性。它涉及到生成映像内容的唯一哈希或校验和,并使用私用密钥对其进行加密以生成签名。可以使用相应的公共密钥解密此签名以校验内容真实性。

私用密钥和公共密钥

映像签名依赖于非对称加密,这涉及到使用一对加密密钥:私用密钥公共密钥。私用密钥用于生成签名,而公共密钥用于校验签名。私用密钥将予保密并安全存储,而公共密钥可以自由分发。

信任模型

映像签名会建立信任模型,其中,映像签名方被隐式信任以保证其真实性。组织通常会维护自己的私用密钥用于映像签名,而用户将信任由该组织的密钥签名的映像。映像使用方可以使用相应公共密钥来校验签名,以确保映像不会泄密或由恶意行动者篡改。

注册表集成

映像签名通常与容器映像注册表(例如 Docker Hub,或 Harbor 等专用注册表)集成。注册表可为映像签名提供内置支持,允许用户直接在注册表平台内对映像进行签名和校验。已签名的映像通常用元数据标记,指明其签名状态和签名方的身份。

校验过程

在部署容器映像之前,映像使用方(例如容器运行时或编排平台)会使用签名方的公共密钥来校验映像签名。如果签名有效且与映像内容匹配,则认为映像真实可信,可以安全部署。如果签名无法校验或与映像内容不匹配,则会拒绝该映像,以防出现潜在安全风险。

4. 实施用户特权

按照最低特权原则运行容器。尽量避免以 root 身份运行容器。相反,应在容器中创建并使用非 root 用户,以限制潜在恶意利用造成的影响。

5. 使用安全上下文

利用容器运行时(例如 Podman)提供的安全功能。配置安全上下文来实施资源限制、网络策略和 SELinux/AppArmor 配置文件。

6. 网络分段

实施网络分段,以将容器相互隔离并与主机系统隔离。使用容器网络插件或叠加网络来实施网络策略并限制容器通讯。

7. 监视运行时活动

采用容器运行时监视工具实时检测和响应可疑活动。监控容器日志、文件完整性和系统调用,以找出入侵或恶意行为的迹象。

8. 限制容器功能

在容器中禁用不必要的 Linux 功能,以减轻特权提升攻击造成的潜在影响。使用 capsh 之类的工具来根据需要删除或限制功能。

9. 安全主机环境

确保底层主机系统受到妥善保护。应用操作系统补丁、配置防火墙规则并实施访问控制,以防范主机遭受外部威胁。

10. 实施运行时保护

使用运行时保护机制(例如 seccomp 或 AppArmor 配置文件)来限制容器进程可执行的操作。定义并实施精细安全策略,以防出现未经授权的访问或执行恶意代码。