kubernetes 镜像构建和扫描

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: kubernetes 镜像构建和扫描

图片.png

随着企业为云原生应用程序采用容器、微服务和 Kubernete,漏洞管理对于在构建、部署和运行期间改善容器化工作负载的安全态势至关重要。

保护构建工件和部署管道,尤其是在涉及到镜像时,是极其重要的。

在整个应用程序开发和部署过程中遵循镜像构建和扫描的最佳做法,可以帮助确保环境中容器和工作负载的安全。

让我们看看选择基础镜像、增强容器镜像和容器镜像扫描,包括选择适当扫描解决方案和解决隐私问题的提示。

选择适当的基础镜像

选择一个能够减少容器攻击面的基础镜像很重要。笔者建议使用 distroless 或 scratch 镜像,因为它们只包含应用程序及其运行时依赖关系。这两种类型的图像通过减少攻击面和漏洞暴露来改善安全态势。

如果出于某种原因,你无法使用 distroless 或 scratch 镜像,请选择最小的发行版。现代的不可变 Linux 发行版,如 Bottlerocket 和 Flatcar Container Linux,以及传统 Linux 发行版的最低版本,如 Ubuntu、Red Hat 或 Alpine,可以用作容器的基础镜像。虽然最小的镜像可以工作,但请记住,这种类型的镜像无法防止操作系统(OS)包中的漏洞。

强化容器镜像

容器镜像强化增加了防御层,允许你在容器内安全地运行应用程序,同时还减少了安全弱点和攻击面。为工作负载构建加固的容器镜像非常重要,因为未加固的镜像会使工作负载面临一系列风险,包括向容器主机泄露信息和权限提升。

以下是一些强化容器镜像的方法。

——仅使用来自可靠来源的基本镜像,例如官方 Ubuntu 或红帽发布频道。

——根据发布的信息仔细检查镜像的哈希,即使它来自可信来源。攻击者在基本镜像中嵌入恶意代码,然后在 Docker Hub 等存储库中提供该镜像并不困难。

——最小化基础镜像。它们应该只包含应用程序的运行时依赖关系。

——按照最小权限原则(尽可能以非根用户身份运行容器),以最小的必要权限运行容器。这样,攻击者将更难逃离容器(CVE-2020-15257 漏洞就是如此)。

——使用容器镜像签名验证镜像。虽然 Kubernetes 原生不包括容器镜像验证工具,但你可以使用 Docker Notary 对镜像进行签名,并使用 Kubernete 许可控制器验证镜像签名。

如果使用 Docker 镜像,笔者建议如下:

——不要使用标签:如果移动或更改依赖库,标签(例如可变标签,如 latest 或 master)可能会导致应用程序稳定性问题。它们还可能导致 CI/CD 管道中的镜像扫描问题,因为它们会定期更新功能和修复。不要使用标签,而是将基本镜像版本固定在 Dockerfile 中(例如 ubuntu:20.08)。

——将层压缩为单个层:层显示开发历史,并可以显示敏感信息。由于使用 Docker 构建的容器镜像往往包括多个层,因此应该使用多级构建或选项——挤压(Docker API 1.25+中提供的实验性 Docker 守护进程)来压缩现有层。

扫描容器镜像

通过检查容器的文件系统和元数据,然后将收集的数据与来自各种可信来源(如国家漏洞数据库或私人情报来源)的漏洞信息进行比较,容器镜像扫描有助于确定镜像中是否存在漏洞组件。有很多可用的扫描工具,包括开源和商用。

确保镜像扫描工具扫描容器镜像中的所有操作系统包,并且了解应用程序使用的语言,以便能够扫描应用程序依赖关系。好的容器镜像扫描工具还应:

——检测文件系统中存在的敏感文件,如证书和密码。

——扫描二进制文件(如.elf 或.exe)。

——集成到你的 CI/CD 系统中。

——虚警率低。(请注意,在容器镜像扫描过程中可能会出现误报和漏报;应用程序和安全团队将需要分析这些信息并评估风险。)

虽然许多公共云提供商和容器注册服务提供商提供镜像和容器扫描服务,但其中许多提供商不扫描应用程序依赖关系,也只支持有限数量的操作系统版本。

由于产品中有关安全漏洞的信息是敏感数据,这将成为一大负担,因此在选择扫描工具之前,不要忘记解决数据安全和隐私问题。为了了解数据暴露的风险,了解扫描工具将收集哪些数据以及如何收集很重要。例如:它是只收集包元数据,还是将容器镜像上载到其 SaaS 服务?

为了确保该工具符合安全和/或合规团队制定的准则,还需要确定该工具是将收集的数据存储在本地还是作为 SaaS 的一部分存储在云中。如果使用商业工具,请务必检查合同,以了解在数据泄露的情况下有哪些损害赔偿条款;如果使用开源工具,请确保检查文档,以了解数据泄露的风险。

总结

本文中包含的提示和最佳实践可作为漏洞管理的良好起点。笔者建议阅读 O'Reilly 书籍《Kubernetes 安全和可观察性:保护容器和云本地应用程序的整体方法》第 3 章,以进一步详细了解这些最佳实践,并发现更多信息。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
14天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
本文介绍了Docker和Kubernetes在构建高效微服务架构中的应用,涵盖基本概念、在微服务架构中的作用及其实现方法。通过具体实例,如用户服务、商品服务和订单服务,展示了如何利用Docker和Kubernetes实现服务的打包、部署、扩展及管理,确保微服务架构的稳定性和可靠性。
57 7
|
13天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
49 6
|
2月前
|
Kubernetes 网络虚拟化 Docker
K8S镜像下载报错解决方案(使用阿里云镜像去下载kubeadm需要的镜像文件)
文章提供了一个解决方案,用于在无法直接访问Google镜像仓库的情况下,通过使用阿里云镜像来下载kubeadm所需的Kubernetes镜像。
251 3
K8S镜像下载报错解决方案(使用阿里云镜像去下载kubeadm需要的镜像文件)
|
2月前
|
Kubernetes Docker 微服务
构建高效的微服务架构:基于Docker和Kubernetes的最佳实践
在现代软件开发中,微服务架构因其灵活性和可扩展性而受到广泛青睐。本文探讨了如何利用Docker和Kubernetes来构建高效的微服务架构。我们将深入分析Docker容器的优势、Kubernetes的编排能力,以及它们如何结合实现高可用性、自动扩展和持续部署。通过具体的最佳实践和实际案例,读者将能够理解如何优化微服务的管理和部署过程,从而提高开发效率和系统稳定性。
|
2月前
|
Kubernetes 负载均衡 应用服务中间件
kubeadm快速构建K8S1.28.1高可用集群
关于如何使用kubeadm快速构建Kubernetes 1.28.1高可用集群的详细教程。
114 2
|
3月前
|
Kubernetes Docker Perl
在K8S中,如果是因为开发写的镜像问题导致pod起不来该怎么排查?
在K8S中,如果是因为开发写的镜像问题导致pod起不来该怎么排查?
|
3月前
|
Kubernetes 持续交付 容器
在K8S中,镜像的拉取策略有哪些?
在K8S中,镜像的拉取策略有哪些?
|
3月前
|
Kubernetes 容器 Perl
在k8S中,镜像的下载策略有哪些?
在k8S中,镜像的下载策略有哪些?
|
3月前
|
存储 Kubernetes 调度
通过重新构建Kubernetes来实现更具弹性的容器编排系统
通过重新构建Kubernetes来实现更具弹性的容器编排系统
60 8
|
3月前
|
Kubernetes Cloud Native 应用服务中间件
云原生之旅:构建你的首个Kubernetes集群
【8月更文挑战第31天】在这个数字化迅速演进的时代,云原生技术如同星辰般璀璨。它不仅是企业数字化转型的引擎,更是开发者们探索创新的乐园。本文将带你开启一场云原生的奇妙旅程,从零开始,一步步构建属于你自己的Kubernetes集群。想象一下,当你的应用在云端自如地伸缩、滚动更新时,那份成就感和掌控感,是不是已经让你跃跃欲试了呢?那就让我们开始吧!