NCSC (英国国家网络安全中心) 经常被问到的一个问题是是否在云中使用容器。这是一个简单的问题,但答案非常微妙,因为容器化的使用方式有很多种,其中一些方法比其他方法效果更好。
今天,我们发布了有关使用容器化的安全指南,因此这是讨论如何充分利用容器化以及它如何适应云平台使用的绝佳机会。
容器有很多值得喜爱的地方
如果使用得当,容器化可以为您的云服务带来许多安全和运营优势。在我们讨论如何使它们成为现实之前,最好先从这些优势(以及我们为什么需要它们)开始。
标准化
开放容器计划为容器镜像以及如何运行容器提供了标准。这意味着我们可以使用许多不同的工具和生态系统可靠地构建和运行容器,同时仍然从容器中运行的软件中获得云的所有好处。这是云技术锁定的理想平衡。例如,云服务可以安全地向它们运行的容器提供凭据。
分析友好
容器镜像格式使得分析其内容变得容易,例如用于漏洞扫描。这为我们提供了一系列广泛的功能,而这些功能对于虚拟机磁盘映像等其他格式来说是无法实现的。更好的是,这些可以应用于整个容器生态系统,而不是专注于仅一种编程语言的打包格式的工具。
外部组件
与虚拟机不同,容器可以在运行时通过容器中不存在的工具进行管理和分析。这意味着我们可以使用最小化的容器镜像,而无需牺牲安全性、调试或其他操作功能。
情境感知环境
容器镜像包含许多在运行时有用的重要上下文。例如,容器镜像指定容器运行时将启动的进程,这可以使容器感知的保护监控和事件检测更加有效。同样,“秘密”(如 API 密钥和其他凭据)可以安全地注入到容器中,并且可以在运行时连接容器以实现服务网格架构。这些为安全架构开辟了新的可能性,同时减轻了工程团队的负担。
容器化并不是实现这些优势的唯一方法,但它是组合这些属性的最简单方法之一。尽管如此,您应该考虑您的具体用例并采取适合您的方法。
安全机会,而非保证
重要的是要认识到与容器化相关的安全优势是机会,而不是保证。换句话说,如果您将现有应用程序转变为容器,那么如果您不采取任何其他措施,则不太可能获得任何安全优势。事实上,如果您将以前位于单独机器(或虚拟机)中的应用程序全部放入一台机器上的容器中,您的安全状况可能会恶化。
为了充分利用容器化,您需要投入时间和资源来调整您的方法,使其成为“容器原生”。
正如我们在有关使用容器化的新指南中所述,您需要调整构建容器映像和运行容器的方式,以确保充分利用容器化带来的安全机会。
当您在云中使用容器化时,您还需要考虑您可以与云提供商分担多少责任,以便他们能够代表您实现这些安全成果。例如,当使用无服务器计算服务为您构建代码时,该服务可以让您更轻松地在本地测试工作负载,或者通过让您能够导出其构建的容器映像来分析其内容。
分离多少才足够?
容器安全中最常见的讨论点之一是容器是否提供安全边界。我认为最好考虑一下您想要实现的安全结果。您通常不会将不信任的代码与敏感数据或工作负载一起运行,容器化也不会改变这一点。您应该始终期望自己的工作负载与其他人的工作负载之间存在强大的计算分离。根据特定的应用程序,您可能还希望自己的每个应用程序之间有很强的分离。
正如我们在云中技术强制分离中所说,内核强制计算分离(例如容器化)并不能提供强分离。但这并不意味着我们不能使用容器!相反,当需要强分离时,您应该使用虚拟机管理程序强制分离等选项将容器彼此分离。
适应云
正如我们在安全使用云平台指南中讨论的那样,考虑如何适应云非常重要,这对于容器化同样重要。虽然容器化可能是您满足安全要求的方式,但您仍然应该期望云提供商为您完成繁重的工作。您应该警惕以下服务:
您必须管理托管容器的计算集群
云提供商无法帮助您构建容器镜像
执行环境以非标准方式运行容器
无法与云平台正常的认证和访问控制机制集成
您无法在容器化应用程序之间应用强大的计算分离
那么您应该在云中使用容器吗?
这一切都归结为如何使用容器化:
如果您使用云提供商提供的工具和服务很好地构建了容器映像,并且您的提供商为您运行这些容器,那么您可以充分利用云的力量。
如果您自己在基础设施即服务上运行容器集群,那么您将大大限制云的优势。
在许多情况下,您甚至看不到您正在使用容器化。在许多SaaS 应用程序和 PaaS 服务中都会出现这种情况,您提供一些代码,而您的云提供商会完成其余的工作。仅仅因为容器化有助于充分利用云,并不意味着您需要能够看到容器。
容器化是充分利用云的最佳方式之一,因此您应该少关注是否使用容器,而更多地关注如何使用它们。