关于多租户容器之间安全隔离的思考

发布者:上海IT外包来源:http://www.lanmon.net点击数:1417

顾名思义,多租户是很多人租用集装箱平台的资源来实现自己的应用托管运营和维护需求。有了资源,谁来管理这些资源的运营和分配?多租户的一个非常重要的方面是资源的安全隔离。即使对于专用容器,您也需要考虑适当的安全性和业务隔离要求。
从多租户的角度来看,租户租用容器云平台的资源来托管,开发,部署和部署他们自己的应用程序和服务。容器云平台需要提供和维护租户以正常使用这些资源。同时,它还为租户托管的应用程序提供服务注册,服务发现,服务配置,日志,监控,预警,弹性扩展,负载平衡和安全性等服务。我们必须了解的是,租户只租用这些功能,他们不负责维护。
那么谁来管理运营和维护分配以使用这些资源呢?那么容器云中的资源是什么?谁应该管理资源?如何分配?谁将运营这些资源?谁将使用这些资源?这也是我写这篇文章的目的,本文包含了我对一般多租户安全容器协调器的详细安全注意事项。我将使用一个特定的示例来解释如何安全地单独运行第三方代码。请详细参阅。
测试环境配置
1.用于运行Docker镜像以将每个进程与其他进程完全隔离的API;
2.滥用可以立即终止;
3.代理应自动更新,以便在出现安全问题时对其进行处理;
4.能够使用整个系统调用接口来运行进程;
配置性能要求
1.禁止和删除任何采矿工具使用的基础设施和跟踪器;
2.防火墙可以关闭任何现有的网络端点;
3.防火墙可以将运行该进程的容器与其所有相关的本地链路和任何可访问的内部IP隔离开来;
4.如果一个多租户容器之间的安全隔离受到损害,则需要立即执行另一层隔离。如果同时破坏两层安全隔离,将有一个隔离机制进行保护;
5.主机操作系统安全;
测试过程
我们要求每个容器运行如下:
1.Block/io cgroups,使磁盘没有噪音干扰。 Cgroups是对照组的首字母缩写。它是Linux内核提供的一种机制,用于限制,记录和隔离进程组使用的物理资源(如cpu,内存,IO等)。最初由谷歌的工程师提出,它后来被集成到Linux内核中。2. CPU限制;
3.内存限制;
4.网络或带宽限制;
5.有一个网络(bpf或iptables)与测试主机的其他网络隔离;
主机操作系统
主机操作系统应该是简化的操作系统,具有最简单的功能,即与容器内使用的操作系统共享尽可能多的功能。这是为了最大限度地减少主机环境中的运行漏洞并减少攻击面。
这些操作系统的示例包括:
1.带有CoreOS的容器Linux;
2.容器优化操作系统;
3.英特尔Clear Linux,英特尔推出Clear Linux项目的目的是让用户充分利用虚拟机的隔离技术和容器的部署优势;
4.LinuxKit,linuxkit这个工具可以理解为使用多个docker镜像来形成一个最小化的自定义操作系统。定制系统只有几十兆字节;
主机操作系统功能
CoreOS Container Linux和Container Optimized OS都具有以下功能:
1.验证启动;
2.只读或usr:
2.1Container优化的操作系统将根文件系统(/)挂载为只读,并将其某些部分重新挂载为可写;
2.2/tmp,/run,/media,/mnt/disks和/var/lib/cloud都是使用tmpfs挂载的,尽管它们是可写的,重启后它们的内容不会保留;
2.3目录/mnt/stateful/partition,/var和/home从有状态磁盘分区挂载,这意味着这些位置可用于存储重新启动后仍然存在的数据。例如,Docker的工作目录/var/lib/docker在重启时是有状态的;
2.4在可写位置,只有/var/lib/docker和/var/lib/cloud挂载为“可执行”,即没有noexec挂载标志;
2.5CoreOS容器Linux根文件系统(/)安装为read_write,/usr是只读的;
3.所有操作系统都允许无缝升级以解决安全问题;
集装箱运行
容器应作为管理程序运行,以确保Linux容器的用户配置不会降低集群的安全性。如果你想允许整个系统调用接口,Firecracker似乎是最合适的。 Firecracker是一种虚拟化技术,旨在创建和管理多租户容器和基于功能的服务,使用Rust开发,以加快AWS Lambda和AWS Fargate等服务的速度和效率。
网络要求
默认情况下,应锁定网络,拒绝所有入口和出口策略。这将创建一个安全的表单,以确保您的网络环境的绝对安全性。
这可以通过iptables或直接使用BPF来完成。
DNS
不允许群集间DNS,主节点和系统节点上没有调度:确保无法调度群集中的主节点和系统节点,这样可以将系统进程的焦点移动到其他位置。
调度
调度程序不应打包bin文件。在使用临时工作负载,当前几个节点耗尽且所有其他节点未被使用的情况下,可能会发生这种情况。因为工作负载不断完成前几个节点上的资源释放(在批处理作业的情况下)。
Kube-batch目前是Kubernetes SIGs下的孵化项目,Kubernetes SIGs是用于在Kubernetes上运行的机器学习/大数据/HPC的批处理调度程序,它支持Pod Group单元中的资源调度并支持抢占和优先级。对于暂时无法满足资源条件的Pod,它将在Kubernetes中处于挂起状态,直到资源被释放并继续执行。 Kube-batch建立在IBM多年的HPC集群经验之上,更适合批处理作业,因此如果我们计划长期使用该程序,我们需要对其进行修改。
如果我们使用裸机运行,我们需要考虑电源管理,BIOS更新,硬件故障等。
资源约束
使用cgroups来管理资源和设置限制:
1.磁盘IO;
2.网络带宽;
3.记忆;
4.CPU;
避免被开采
1.带有eBPF的CPU跟踪器监视CPU使用情况,因此如果它没有波动,它可能是一个挖掘工具;
2.二进制跟踪器负责查找具有特定名称的二进制文件或进程;
3.网络跟踪器负责查找与已知挖掘工具端点关联的进程;
为什么不使用kubernetes?
Kubernetes,缩写为K8s,是8个字符的缩写,而不是8个字符“ubernete”。一种开源应用程序,用于管理云平台中多个主机上的容器化应用程序。 Kubernetes的目标是简化和高效部署容器化应用程序,Kubernetes提供应用程序部署,规划,更新和维护。机制。由于我不希望任何允许任意代码执行的容器只有一层安全性,我认为kubernetes很难满足这个要求。
Kubernetes的etcd集群不是孤立的,并且不能隔离kubelet和apiserver通信。 Etcd是Kubernetes集群中非常重要的组件,用于存储有关集群中所有网络配置和对象的状态信息。
总而言之,Kubernetes过于复杂,并且有太多第三方驱动程序。攻击面太大,我们不需要大部分(90%)功能集。
默认情况下,Kubernetes将为每个节点安排最多110个pod。这是您可以修改的一个方面,但同样重要的是要注意kubernetes中的默认调度程序是无法识别的,我们必须修复它。有关详细信息,请参阅上面的“计划程序”部分。由于默认调度程序的逻辑,群集中的前几个节点将被销毁。
甚至谷歌也没有在内部使用Kubernetes来安排虚拟机。 Kubernetes在容器中插入了一些额外的env变量,我们还需要处理这些变量。
如果存在影响隔离的内核零日漏洞,我们该怎么办?
首先,更新内核,但如果内核未更新,我们可以使用ebpf捕获易受攻击的内核函数并删除任何试图利用此漏洞的容器。
假设我们已经有一个可以持续构建内核并应用补丁的系统,请考虑威胁模型。在大多数情况下,有人会攻击我们的基础架构,因此我们应该确保所有这些服务器都与网络上的其余堆栈隔离。
另一个威胁是我们在打开容器后运行的用户名和密码,黑客将通过VM拦截它们。通常,当容器运行不正确时会发生这种情况。
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部