探索容器安全性:概述


【编者的话】本文是Google云平台(GCP)上的容器安全性系列博客文章中的第一篇,介绍了容器安全的以下几个方面:基础设施安全、软件供应链和运行时安全,并澄清了容器不是强大的安全边界,可能要依靠Google云平台项目提供的隔离。最后提供了几场即将到来的在KubeCon EU关于容器安全的讲座信息。

容器越来越多地被用于部署应用程序,这是有充分理由的,因为它们具有可移植性、简单的可扩展性和较低的管理负担。然而,容器化应用程序的安全性仍然没有得到很好的理解。容器安全性与传统虚拟机安全性有何不同?如何利用容器管理平台的特性来提高安全性?

这是系列博客文章中的第一篇,这个系列将涉及Google云平台(GCP)上的容器安全性,以及我们如何帮助你保障运行在Google Kubernetes 引擎中的容器的安全。这个系列的文章将涵盖以下主题:
  • 容器网络安全
  • Kubernetes引擎1.10中新的安全特性
  • 图像安全
  • 容器软件供应链
  • 容器运行时安全性
  • 多租户技术


容器安全是一个很大的话题。在系列的开始,这里有一个容器安全的概述,以及我们在Google如何看待它。

在Google,我们将容器安全划分为三个主要方面:
  1. 基础设施安全,即平台是否提供了必要的容器安全功能?这就是如何使用Kubernetes安全特性来保护你的身份、机密和网络;以及Kubernetes引擎如何使用本机GCP功能,如IAM、审核日志记录和网络,为你的工作负载带来最好的Google安全性。
  2. 软件供应链,即我的容器镜像是否可以安全部署?这就是如何确保你的容器镜像是无漏洞的,并且确保你构建的镜像在部署之前不会被修改。
  3. 运行时安全性,即我的容器运行安全吗?这就是如何识别在生产中恶意行为的容器,并采取行动保护你的工作负载。


让我们更深入地研究其中的每一个。

基础设施安全

容器基础设施安全是为了确保你的开发人员拥有安全构建容器化服务所需的工具。这包括各种各样的领域,包括:

  • 身份、授权和身份验证:我的用户如何在我的容器中声明他们的身份并证明他们是他们所说的那样,以及我如何管理这些权限?
    • 在Kubernetes中,基于角色的访问控制(RBAC)允许使用细粒度权限来控制对kubelet等资源的访问。(从Kubernetes 1.8起,RBAC是默认启用的)
    • 在Kubernetes引擎中,可以使用IAM权限在项目级别控制对Kubernetes资源的访问。你仍然可以使用RBAC来限制对特定集群内Kubernetes资源的访问。

  • 日志记录:如何记录对我的容器的更改,是否可以对它们进行审核?

  • 机密:Kubernetes如何存储机密,以及容器化应用程序如何访问它们?

  • 网络:我应该如何分割网络中的容器,以及我应该允许哪些流量?
    • 在Kubernetes中,你可以使用网络策略来指定如何对POD网络进行分段。当创建时,网络策略定义了一个特定的POD可以与哪些POD和端点进行通信。
    • 在Kubernetes引擎中,你可以创建一个网络策略,并为整个集群管理这些策略。你还可以在测试版中创建私有集群,以便只为你的主节点和节点使用私有IP。


这些只是Kubernetes用来以你想要的方式来保障集群安全的一些工具,从而使维护集群的安全性变得更加容易。

软件供应链

管理软件供应链,包括你没有创建的容器镜像层,是为了确保你确切地知道在你的环境中正在部署什么,并且它属于这个环境。特别是,这意味着让你的开发人员访问已知没有漏洞的图像和打包程序,以避免将已知的漏洞引入到你的环境中。

容器在服务器的操作系统内核上运行,但在沙箱环境中运行。容器的镜像通常包括它自己的操作系统工具和库。因此,当你考虑软件安全性时,实际上有许多镜像和包的层需要保护:
  • 运行容器的主机操作系统
  • 容器镜像,以及任何其他运行容器所需的依赖项。请注意,这些并不一定是您自己构建的镜像,来自Docker Hub等公共存储库的容器镜像也属于这一类。
  • 在容器内运行的应用程序对它本身进行编码。这超出了容器安全的范围,但是你应该遵循最佳实践,并扫描你的代码以查找已知的漏洞。请务必检查你的代码是否存在安全漏洞,并考虑使用如模糊处理(fuzzing)等更先进的技术来查找漏洞。OWASP排名前十的Web应用程序安全风险是了解什么应该避免的很好的资源。


运行时安全性

最后,运行时安全性是要确保你的安全响应团队能够检测并响应在你的环境中运行的容器的安全威胁。这里有一些理想的功能:
  • 利用基线、系统调用、网络呼叫和其他可用信息,以检测异常行为
  • 补救潜在威胁,例如通过不同网络上的容器隔离、暂停容器或重新启动容器
  • 根据详细的日志和活动期间的容器镜像,对事件进行鉴定
  • 运行时策略和隔离,限制环境中允许的行为类型


所有这些功能在整个行业中都是相当新的,现在有许多不同的方式来保障运行时安全性。

容器不是强大的安全边界

有一种说法值得澄清:容器既不提供不可渗透的安全边界,也不是它们的目标。它们对访问主机上的共享资源进行一些限制,但不一定阻止恶意攻击者绕过这些限制。虽然容器和虚拟机都封装了应用程序,但容器是应用程序的边界,而VM是应用程序及其资源(包括资源分配)的边界。

如果你在Kubernetes引擎上运行不受信任的工作负载,并且需要一个强大的安全边界,那么你应该依靠Google云平台项目提供的隔离。对于共享相同信任级别的工作负载,你可以使用多租户,其中容器与其他容器或同一集群中的另一个节点在同一个节点上运行。

即将到来的在KubeCon EU的讲座

除了这个博客文章系列之外,我们还将在哥本哈根的KubeCon Europe举办几次关于容器安全的讲座。如果你要参加,请确保将这些添加到你的日历中:


请注意,上面讨论的所有内容实际上都只是集中在容器级别;你仍然需要一个基于该基础结构的安全平台,并且需要应用程序安全性来保护你在容器中构建的应用程序。要了解更多关于Google云的安全性信息,请参阅Google基础设施安全性设计概述白皮书

请继续关注下周关于镜像安全的文章!

===============================================

原文链接:Google Cloud Platform Blog: Exploring container security: An overview (翻译:Alexander

译者介绍

Alexander,软件开发工程师,希望通过DockOne把最新的译文贡献给大家,与读者共同学习交流Docker技术。关于译者:Alexander

0 个评论

要回复文章请先登录注册