应用程序的容器化涉及将应用程序代码及其依赖项(所需的库,框架和配置文件)打包在虚拟容器中。这种方法有助于可移植性,并且可以在各种计算环境和基础架构中一致地运行,而不会降低效率。
Docker是一种特别流行的容器平台。组织使用Docker开发应用程序有以下特点:
- 高效优化
- 高度可扩展
- 便携的
- 敏捷
Docker容器通过其轻量级的运行时环境共享底层操作系统,以托管支持DevOps环境的应用程序。作为Cloud-Native框架的关键元素,Docker为您的软件开发生命周期(SDLC)带来了许多好处。但是,这些好处并非没有风险。您可能会面临复杂性,特别是在保护Docker框架方面。
默认情况下,Docker容器是安全的。但是,您必须知道可能的漏洞,才能采用可防止潜在安全风险的方法。
因此,在本文中,我们将探讨在三个关键领域保护基于Docker架构的最佳实践:
- 基础设施
- 镜像
- 访问和认证
让我们开始吧。
1.保护Docker基础架构
容器是可以托管应用程序的虚拟单元。为此,容器可容纳:
- 代码二进制
- 配置文件
- 相关依赖
由于容器是云原生设置的基础,因此在整个容器生命周期中,保护它们免受潜在攻击媒介的侵害是至关重要的。保护这种框架的整体方法不仅是保护Docker容器,而且还保护其基础架构。
让我们分解保护基础设施安全的最佳方法,看看它是如何工作的。
定期更新您的Docker版本
首先,确保您的Docker版本是最新的。过时的版本容易受到安全攻击。新版本发布通常包含修补程序和错误修复程序,以解决旧版本的漏洞。
主机环境也是如此:确保支持的应用程序是最新的,并且没有已知的错误或安全漏洞。
保持容器清洁
扩展的容器环境扩大了攻击面,并且相对于精益设置而言,更容易发生安全漏洞。为避免这种情况,请将您的容器配置为仅包含使它们按预期运行的必要组件:
- 软体套件
- Library
- 配置文件
此外,应定期检查主机实例中是否有未使用的容器和基本映像,并丢弃那些未使用的容器和基本映像。
配置API和网络
Docker Engine使用HTTP API在网络上进行通信。配置不当的API带有黑客可以利用的安全漏洞。
为避免这种情况,请通过安全地配置API来保护您的容器,该API限制了容器的公开展示。一种方法是通过启用基于证书的身份验证来实施加密通信。
(获取有关保护Docker API的更多详细信息*。)*
限制系统资源的使用
设置每个容器可以使用的基础结构资源比例的限制。这些基础结构资源包括:
- 中央处理器
- 内存
- 网络带宽
Docker使用控制组来限制不同进程之间的资源分配和分配。这种方法可以防止受损的容器消耗过多的资源,这些资源在发生安全漏洞时可能会中断服务的交付。
保持主机隔离
在不同的主机上运行具有不同安全性要求的容器。
通过不同的命名空间维持容器的隔离性可以保护关键数据免受全面攻击。这种方法还可以防止嘈杂的邻居在基于池的隔离上消耗过多的资源,从而影响其他容器的服务。
限制容器功能
默认情况下,Docker容器可以维护和获取运行其核心服务可能需要或不需要的其他特权。
最佳做法是,应将容器的权限限制为仅运行其应用程序所需的权限。为此,请使用以下命令删除Docker容器的所有特权:
复制
- $ docker run --cap-drop ALL
然后,使用**–cap-add**标志向容器添加特定特权。这种方法限制了Docker容器获取不必要的特权,这些特权在安全漏洞期间会被利用。
过滤系统调用
应用系统调用过滤器,使您可以选择容器可以对Linux内核进行哪些调用。
这种方法启用了安全的计算模式,从而减少了可能的暴露点,从而避免了安全事故的发生,尤其是避免了对内核漏洞的利用。
2.保护Docker镜像
现在,让我们转向基础架构之外的安全最佳实践。Docker映像是用于创建容器和宿主应用程序的可执行代码模板。Docker映像由运行时库和根文件系统组成,从而使映像成为Docker容器最关键的基础之一。在保护Docker映像时,以下是一些最佳实践。
使用信任的镜像
仅从最新的且配置正确的可信来源获取Docker基本映像。
此外,通过启用Docker内容信任功能以过滤掉不安全的可疑来源,确保Docker映像已正确签名。
定期扫描镜像
维护可靠的Docker映像安全配置文件并定期扫描它们是否存在漏洞至关重要。在下载图像之前,除了进行初始扫描外,还请执行此操作,以确保可以安全使用。
使用常规图像扫描,您还可以通过以下方法最大程度地减少曝光:
- 审核关键文件和目录
- 使用最新的安全补丁更新它们
支持最小的基本镜像
避免在较小的通用Docker镜像上使用较大的通用Docker镜像,以最大程度地减少安全漏洞。这提供了两个有价值的结果:
- 减少攻击面
- 摆脱更容易受到黑客攻击的默认配置
3.访问和身份验证管理
Docker Security的最后一个类别涉及访问和身份验证。
通过访问控制保护Docker Daemon的安全通常被称为应用第一层安全性。如果没有保护Docker Daemon的安全,那么一切都会很脆弱:
- 基础操作
- 应用领域
- 业务职能
实施特权最小的用户
默认情况下,Docker容器中的进程具有root特权,这些特权授予它们对容器和主机的管理访问权限。这向容器和底层主机开放了黑客可能利用的安全漏洞。
为避免这些漏洞,请设置最低特权用户,该用户仅授予运行容器所需的特权。或者,限制运行时配置以禁止使用特权用户。
使用机密管理工具
切勿将机密存储在Dockerfile中,这可能会使访问Dockerfile的用户放错位置,滥用或损害整个框架的安全性。
标准的最佳做法是安全加密第三方工具(例如Hashicorp Vault)中的密钥机密。您可以将这种方法用于访问凭证以外的其他容器机密。
限制直接访问容器文件
临时容器需要一致的升级和错误修复。结果,这种容器文件在用户每次访问它们时都会被公开。
作为最佳实践,请在容器外部维护容器日志。这大大减少了容器文件的一致直接使用。它还使您的团队无需访问容器目录中的日志即可解决问题。
启用加密通讯
将Docker Daemon的访问权限限制为仅少数关键用户。此外,通过对一般用户强制执行仅SSH访问,来限制对容器文件的直接访问。
使用TLS证书来加密主机级通信。禁用未使用的端口并使默认端口仅公开供内部使用也很重要。
总结
保护Docker可以保护您的IT环境,IT环境中的安全性是您永远不应忽略的关键任务。
为了确保云原生框架的安全,第一步始终是考虑框架关键元素的漏洞。因此,组织应该维护一个强大的安全配置文件,该配置文件围绕容器及其底层基础结构进行。
尽管实施端到端安全性的方法可能有所不同,但目标始终是考虑脆弱点并采用减轻风险的最佳实践。
原文链接:https://www.bmc.com/blogs/docker-security-best-practices/