发行了用于运行容器的极简Linux分发套件Bottlerocket。关于他最重要的事情





亚马逊宣布Bottlerocket的最终发行版,这是一个用于运行和有效管理容器的专业发行版。



Bottlerocket(顺便说一下,这就是他们所说的小型自制黑火药火箭)并不是第一个用于容器的操作系统,但是由于与AWS服务的默认集成,它很有可能会普及。尽管该系统专注于Amazon的云,但开源允许您在任何地方构建它:在服务器上本地,在Raspberry Pi上,在任何竞争的云中甚至在无容器环境中。



这是Red Hat掩埋的CoreOS发行版的相当有价值的替代品。



总的来说,Amazon Web Services已经安装了Amazon Linux,该操作系统最近发布了第二版:它是一种通用发行版,可以在Docker容器中运行,也可以与Linux KVM虚拟机管理程序,Microsoft Hyper-V和VMware ESXi一起运行。它已经过优化,可以在AWS云上运行,但是使用Bottlerocket,鼓励每个人都升级到更安全,更现代且使用更少资源的新系统。



AWS在2020年3月宣布瓶颈... 她立即​​意识到这不是第一个“用于容器的Linux”,并以CoreOS,Rancher OS和Project Atomic为灵感来源。开发人员写道,操作系统是“我们从亚马逊规模的长期生产服务中吸取的教训以及过去六年中我们在如何运行容器方面获得的经验的结果。”



极简主义



Linux已剥离了运行容器不需要的所有内容。据该公司称,这种设计减少了攻击面。



这意味着在基本系统上安装的软件包更少,这使得维护和更新OS更加容易,并且还减少了由于依赖性导致出现问题的可能性,并减少了资源使用。基本上,这里的所有内容都在单独的容器中工作,而基本系统几乎是光秃秃的。



亚马逊还删除了所有shell和解释器,从而消除了用户使用它们或意外提升特权的风险。为了简化和安全起见,基本映像缺少命令外壳,SSH服务器和Python之类的解释语言。管理员工具已移至单独的服务容器,默认情况下处于禁用状态。



有两种方式提供系统管理:通过API和业务流程。



Bottlerocket会下载完整的文件系统映像并将其重新加载到其中,而不是使用软件包管理器来更新各个软件。如果下载失败,它将自动回滚,并且工作负载故障会触发手动回滚(通过API命令)。



TUF(更新框架)下载的基于图像的更新交替或“未安装”的分区。为系统分配了两个磁盘分区,其中一个包含活动系统,更新已复制到第二个。在这种情况下,根分区以只读模式/etc安装,并且该分区与文件系统一起安装在tmpfs RAM中并在重新启动后恢复其原始状态。/etc不支持直接修改配置文件:要保存设置,使用API​​或将功能移动到单独的容器中。





API更新方案



安全



容器是通过标准的Linux内核机制-cgroups,名称空间和seccomp创建的,而SELinux在“强制”模式下用作强制访问控制的系统,即用于附加隔离



默认情况下,启用策略以在容器和内核之间共享资源。二进制文件受标志保护,以防止用户或程序执行它们。如果有人进入了文件系统,Bottlerocket提供了一种工具来检查和跟踪所做的任何更改。



“验证启动”模式是通过device-mapper-verity函数(dm-verity),它会在启动时检查根分区的完整性。AWS将dm-verity描述为“ Linux内核的一项功能,它提供完整性检查以防止恶意软件在OS上运行,例如覆盖基础系统软件。”



该系统还具有eBPF(扩展的BPF,由Alexey Starovoitov开发),该功能允许用更安全的BPF程序替换内核模块以进行低级系统操作。



执行模式 用户自定义 汇编 安全 故障模式 获取资源
用户 任务 任何 用户权限 中断执行 系统调用,故障
核心 任务 没有 静态的 没有 核心恐慌 直行
BPF 事件 准时制 验证,准时 错误信息 有限的帮手


与常规用户级或内核级代码的BPF不同,



AWS消息人士称,Bottlerocket“采用了一种操作模型,可通过防止管理员特权连接到生产服务器来进一步增强安全性”,并且“适用于控制受限的大型分布式系统。高于每个主机”。



为系统管理员提供了管理员容器。但是AWS认为管理员通常不必在Bottlerocket内部进行工作:“开发人员写道:“登录到单独的Bottlerocket实例的操作旨在进行不频繁的操作:高级调试和故障排除”



Rust语言



内核之上的OS工具大部分是用Rust编写的。这种语言本质上减少了不安全的内存访问的机会,消除了线程之间的竞争条件



如果应用了默认的构建标志--enable-default-pie--enable-default-ssp启用了可执行文件的地址空间的随机化(位置独立于可执行文件,PIE),并防止堆栈溢出。



对于分组的C / C ++还包括标志-Wall-Werror=format-security-Wp,-D_FORTIFY_SOURCE=2-Wp,-D_GLIBCXX_ASSERTIONS-fstack-clash-protection



除了Rust和C / C ++之外,一些软件包还使用Go语言编写。



与AWS服务集成



与类似容器操作系统的区别在于,Amazon已优化了Bottlerocket,使其可以在AWS上运行并与其他AWS服务集成。



最受欢迎的容器协调器是Kubernetes,因此AWS已实现了与自己的企业Kubernetes服务(EKS)的集成。编排工具位于单独的bottlerocket-control-container中,默认情况下启用,并通过API和AWS SSM Agent进行管理。



鉴于过去某些此类举措的失败,看看Bottlerocket是否能起航将很有趣。例如,Vmware的PhotonOS倒闭了,RedHat收购了CoreOS并关闭了该项目该项目被认为是该领域的先驱。



将Bottlerocket集成到AWS服务中使该系统以其自己的方式独一无二。这也许是某些用户可能更喜欢Bottlerocket而不是其他发行版(例如CoreOS或Alpine)的主要原因。该系统最初设计为可与EKS和ECS一起使用,但是同样,这不是必需的。首先,Bottlerocket可以独立构建,并且可以用作托管解决方案。其次,EKS和ECS用户仍然可以选择操作系统。



Bottlerocket的源代码在Apache 2.0许可下在GitHub上发布。开发人员已经在响应错误报告和功能请求






广告



VDSinaVDS提供每日付款可以安装任何操作系统,包括从您自己的映像中安装。每台服务器都连接到500兆位的Internet通道,并受到免费的DDoS攻击保护!






All Articles