K8S安全军规101:对CNCF最佳实践的扩充

在上篇文章里,我们分享了CNCF为广大Kubernetes用户建议的9项Kubernetes安全最佳实践,分享了用户使用Kubernetes管理集群时的9个能进一步确保集群安全的基本操作。

上篇文章中的建议非常好,但不足之处在于它们都过于依赖GKE了。对于那些使用谷歌服务的用户来说,GKE固然是一个很好的解决方案。然而,还有更多的人则是在亚马逊、Azure、阿里云、华为云、DigitalOcean、甚至是他们自己的基础设施上或其他他们任何想在的地方上运行着Kubernetes集群,那么此时,GKE相关的解决方案对他们而言并没有太大帮助。

对于这些用户而言,Rancher作为一个开源的解决方案,是一个很棒的选择。

Rancher Labs对待安全问题十分严肃谨慎。Rancher Labs联合创始人及首席架构师Darren Shepherd,是2018年年底Kuberntes 被爆出的首个严重安全漏洞(CVE-2018-1002105)的发现者。安全性不应该是事后的想法,也不应该是部署了不安全的集群之后才记得要去做的事。就像你建造房子时,不应该把所有物品都搬进去之后,才开始安装门锁。

在本文中,我将回顾上篇文章中CNCF提出的每个要点,并向您分析Rancher和RKE能如何在默认设置中满足这些安全建议。

升级到最新版本

这是一个合理的建议,并且不仅适用于Kubernetes。因为未修补的程序常常是***者的切入点。当某个安全漏洞出现、poc代码公开可用时,Metasploit之类的工具套件很快就会在其标准套件中包含这些漏洞。此时,任何会从Internet复制和粘贴命令的人都可以控制您的系统。

使用Rancher Kubernetes Engine(RKE)时,无论是单独使用还是和Rancher一起使用,您都可以选择要安装的Kubernetes版本。Rancher Labs使用原生上游Kubernetes,这使公司能够快速响应安全警报,发布修复版本的软件。因为RKE是在Docker容器中运行Kubernetes组件的。运维团队可以对关键基础架构进行零停机升级。

您可以通过Rancher的GitHub主页、微信公众号、官网等各个渠道接收有关新版本发布的信息。我还强烈建议您在升级之前,先在staging环境中测试新版本。如果升级出错,Rancher也可以轻松回滚到以前的版本。

启用基于角色的访问控制(RBAC)

安装RKE后,RBAC会默认启动。如果您只使用RKE或任何其他独立的Kubernetes部署,则您需要负责配置帐户、角色和绑定以保护您的集群。

如果您正在使用Rancher,它不仅会安装安全集群,还会通过Rancher服务器,代理与这些集群的所有通信。Rancher可以插入许多后端身份验证程序,例如Active Directory、LDAP、SAML、Github等。当以这种方式连接时,Rancher使您能够将现有的企业身份验证扩展到Rancher的保护伞下的所有Kubernetes集群,无论这些集群在哪里运行。
 

 
Rancher在全局、集群和项目级别启用角色,使管理员可以在一个位置定义角色并将其应用于所有集群。这种RBAC-by-default和强大的身份验证和授权控制的组合意味着从使用Rancher或RKE部署集群的那一刻起,集群就是安全的。
 

 
使用命名空间建立安全边界

由于Kubernetes处理默认命名空间的特殊方式,我不建议您使用它。我建议您为每个应用程序创建一个命名空间,将它们定义为逻辑组。

Rancher定义了一个名为Project的附加抽象层。Project是命名空间的集合,可以在其上映射角色。用户可能有权访问某一Project,但他们无法看到任何他们无权访问的Project中运行的任何工作负载,也无法与其进行交互。这样一来,其实就是有效地创建了单集群多租户。
 

 
使用Projects,管理员可以更轻松地授予对单个集群中多个命名空间的访问权限。它最大限度地减少了重复配置以及人为错误。

将敏感工作负载彼此分开

这是一个很好的建议,因为它假定了一个问题,“如果工作负载受到损害会发生什么?”。提前采取行动可以减少破坏地范围使***者更难以升级权限,但也并不是完全不可能。所以这可能得花费您额外的时间处理。

Kubernetes允许您设置污点(taints)和容差(torlerations),从而控制可能部署Pod的位置。

Rancher还允许您通过Kubernetes标签控制工作负载的调度。除了污点和容差之外,在部署工作负载时,您可以为主机设置必须、应该或可以具有的标签,这些标签会控制Pod的部署位置。 如果您的环境是静态的,您还可以将工作负载安排到特定节点。


 
安全的云元数据访问

该建议指出,敏感的元数据“有时可能被盗或被滥用”,但未能概述“何时”或“如何”的条件。上篇文章中提到了Shopify的赏金细节的泄露, 2018年12月13日的北美KubeCon上提到了这一事件。虽然上篇文章指出GKE具有“元数据隐藏”的功能,但值得注意的是,在最开始泄露凭据的服务,正是Google Cloud元数据API。

此外,没有任何证据显示任何其他云提供商存在相同的漏洞。

此漏洞可能存在的唯一位置是托管的Kubernetes服务,例如GKE。如果您直接或通过Rancher将RKE部署到裸机或云计算实例上,您将最终得到一个无法通过云提供商的元数据API泄露凭据的集群。

如果您正在使用GKE,我建议您激活此功能以防止任何凭据通过元数据服务泄漏。我还认为云提供商不应该将凭证嵌入到可通过API访问的元数据中。即使这样做是为了方便,但这是一种不必要的风险,可能会产生难以想象的后果。

创建和定义集群网络策略

直接部署或由Rancher部署的RKE集群默认使用Canal,当然,您也可以选择Calico或Flannel。Canal和Calico都支持网络策略。当使用Canal作为网络提供商时,Rancher部署的集群也支持Project网络策略。激活后,工作负载可以与其项目中的其他工作负载通信,而系统项目(包括入口控制器等集群范围的组件)可以与所有项目进行通信。

早期版本的Rancher默认启用Project网络策略,但这给一些不了解额外安全性的用户造成了混乱。因此,为了给用户提供最佳体验,此功能现在默认情况下已关闭,但如果您想启用,也可以在启动后轻松激活。
 

 
运行集群范围的Pod安全策略

Pod安全策略(PSP)控制Pod必须具有某些功能和配置才能在集群中运行。例如,您可以阻止特权模式、主机网络或以root身份运行容器。通过Rancher或RKE安装集群时,您可以选择是否要默认启用受限制的PSP。如果选择启用它,则您的集群将立即对工作负载权限强制实施强制限制。
 

 
受限制的和不受限制的PSP在RKE和Rancher中是相同的,因此它们在安装时激活的内容是一样的。Rancher允许无限数量的额外PSP模板,所有这些都可以在全局范围内处理。管理员定义PSP,然后将它们应用于Rancher管理的每个集群。与前面讨论的RBAC配置类似,它将安全配置保存在一个位置,并大大简化了策略的配置和应用。

加强节点安全

这不是Kubernetes特定的建议,而是一个很好的普适策略。当要与您无法控制的流量进行交互时(例如,在Kubernetes中运行的应用程序的用户点击量),应该让其在***面较小的节点上运行。此外,禁用和卸载不需要的服务也是必要的。还有,应该通过SSH限制root访问权限并需要sudo密码加密。在SSH密钥上使用密码短语,或使用2FA、U2F密钥或Krypton等服务将密钥绑定到用户拥有的设备。 以上这些是安全系统的基本标准配置示例。

除了受支持的Docker版本之外,Rancher在主机上不需要其他。并且,RKE只需要SSH访问,它将在继续安装Kubernetes之前安装Kubernetes支持的最新版本的Docker。

如果您想进一步减少***面,可以了解一下RancherOS,这是一个轻量级Linux操作系统,可以将所有进程作为Docker容器运行。System Docker仅运行提供访问所需的最少数量的进程,并在用户空间中为实际工作负载运行Docker实例。

启用审核日志(Audit Logging)

Rancher服务器可在RKE集群内部运行,因此除了Kubernetes审核日志之外,激活对服务器本身的API调用的审核日志也很重要。此日志将显示用户对任何集群执行的所有操作,包括发生的事件、执行操作的人员、执行操作的时间以及执行操作的集群。从有问题的服务器发送这些日志也很重要。Rancher可以连接到Splunk、Elasticsearch、Fluentd、Kafka或任何系统日志端点,您可以从中生成可疑活动的仪表盘和警报。

有关为Rancher 服务器启用审核日志的信息,请参阅我们的文档。

https://rancher.com/docs/rancher/v2.x/en/admin-settings/api-audit-log/

有关为RKE集群启用审核日志的信息,请参阅下一节。

安全保障行动正在进行中

真正保护Kubernetes集群需要9项以上的操作,Rancher有一份安全强化指南(https://rancher.com/docs/rancher/v2.x/en/faq/security/ )和一份自我评估指南(https://releases.rancher.com/documents/security/latest/Rancher_Benchmark_Assessment.pdf ),涵盖了CIS基准用于保护Kubernetes的100多种控制。

如果您十分在意安全性,那么Rancher、RKE以及RancherOS将会帮助您。

原文地址:http://blog.51cto.com/12462495/2347458

时间: 2024-10-07 10:52:47

K8S安全军规101:对CNCF最佳实践的扩充的相关文章

生产环境容器落地最佳实践 - JFrog 内部K8s落地旅程

引言 Kubernetes已经成为市场上事实上领先的编配工具,不仅对技术公司如此,对所有公司都是如此,因为它允许您快速且可预测地部署应用程序.动态地伸缩应用程序.无缝地推出新特性,同时有效地利用硬件资源. 本期我们将回顾采用Kubernetes作为容器编排工具的公司所面临的复杂性和挑战.我们希望我们提供的经验教训.最佳实践和技巧将帮助您在前往K8s旅途中起步并继续前进. 本期将介绍关于在Kubernetes生产环境的最佳实践,包括:: 为上K8s容器云准备好应用程序 在Kubernetes中获得

k8s容器灰度发布最佳实践(基于spinnaker)

k8s中的容器一般是通过deployment管理的,那么一次滚动升级理论上会更新所有pod,这由deployment资源特性保证的,但在实际的工作场景下,需要灰度发布进行服务验证,即只发布部分节点,这似乎与k8s的deployment原理相违背,但是灰度发布的必要性,运维同学都非常清楚,如何解决这一问题? 最佳实践:定义两个不同的deployment,例如:fop-gate和fop-gate-canary,但是管理的pod所使用的镜像.配置文件全部相同,不同的是什么呢?答案是:replicas

关于防止语音网关被盗用的最佳实践

问题描述尽管事实情况是没有任何内部用户拨打过国际或省际长途电话,但用户的电信账单依然出现了难以置信的高额费用.记录显示,用户曾经频繁.长时间联系国际和省际的长途用户,从而产生了非常高的长途费用.本文介绍如何发现并防止语音网关被盗用的实例.最佳实践1. 防止来自IP网络的盗用如果用户的语音网关有Internet/Intranet可达的IP地址,但没有配置足够的安全特性,任何voip的终端都有可能跳过管理员的耳目,实现越权拨打电话.针对此类风险,我们建议的最佳实践如下:在网关上增加访问列表,除了允许

Cobbler自动化部署最佳实践

第1章 Cobbler自动化部署最佳实践 运维自动化在生产环境中占据着举足轻重的地位,尤其是面对几百台,几千台甚至几万台的服务器时,仅仅是安装操作系统,如果不通过自动化来完成,根本是不可想象的. 面对生产环境中不同服务器的需求,该如何实现批量部署多版本的操作系统呢?Cobbler便可以的满足这一实际需求,实现多版本操作系统批量部署. 笔者QQ:572891887 Linux架构交流群:471443208 1.1 Cobbler简介 Cobbler是一个快速网络安装linux的服务,而且在经过调整

基于AWS的云服务架构最佳实践

ZZ from: http://blog.csdn.net/wireless_com/article/details/43305701 近年来,对于打造高度可扩展的应用程序,软件架构师们挖掘了若干相关理念,并以最佳实践的方式加以实施.在今天的"信息时代",这些理念更加适用于不断增长的数据集,不可预知的流量模式,以及快速响应时间的需求.本文将强调并重申其中的一些传统观念,并讨论他们如何在融合云计算的发展,还将讨论由于云计算的动态性而产生的一些前所未有的概念(如弹性). 本文的目标是面向云

Android最佳实践——深入浅出WebSocket协议

首先明确一下概念,WebSocket协议是一种建立在TCP连接基础上的全双工通信的协议.概念强调了两点内容: TCP基础上 全双工通信 那么什么是全双工通信呢? 全双工就是指客户端和服务端可以同时进行双向通信,强调同时.双向通信 WebSocket可以应用于即时通信等场景,比如现在直播很火热,直播中的弹幕也可以使用WebSocket去实现. WebSocket的协议内容可以见The WebSocket Protocol,讲得最全面的官方说明.简单介绍可以见维基百科WebSocket 在Andro

[书目20150309]成功的企业级软件项目管理:优化绩效完美交付的最佳实践

本书旨在解决困扰软件行业的一个问题: 如何组织软件项目管理以实现优化绩效.完美交付.作者尼尔.怀特(PMP,项目管理领域的专家)介绍了一种新的方法:Enterprize组织. 本书描述了Enterprize组织所定义的项目中的关键角色与责任,包括产品经理.项目经理.业务架构师.产品架构师.过程架构师.资源经理.团队带头人和团队成员. 本书还讨论了如何利用Enterprize组织大型项目.小型项目.多个项目和维护性项目,并通过设置的“问题与答案”栏目回答了项目管理过程中常见的一些问题. 目录 第1

Android 6.0 运行时权限管理最佳实践

Android 6.0 运行时权限管理最佳实践 版权声明:转载必须注明本文转自严振杰的博客: http://blog.yanzhenjie.com 这是一篇迟来的博客,Android M已经发布一年多了(6.0的变化),在Android M中权限系统被重新设计,发生了颠覆性的变化,很多人把握不好这个变化,一是对这个权限策略和套路还没有摸透,二是没有一个很好的实践来支撑,在我的技术开发群里很多人问我关于权限的问题,往往我都没有直接回答,因为这个问题不是一两句说的清楚的,这几点是今天我写这篇博客的原

[Java Performance] 数据库性能最佳实践 - JPA和读写优化

数据库性能最佳实践 当应用需要连接数据库时,那么应用的性能就可能收到数据库性能的影响.比如当数据库的I/O能力存在限制,或者因缺失了索引而导致执行的SQL语句需要对整张表进行遍历.对于这些问题,仅仅对应用代码进行优化可能是不够,还需要了解数据库的知识和特点. 示例数据库 该数据库表示了128只股票在1年内(261个工作日)的股价信息. 其中有两张表:STOCKPRICE和STOCKOPTIONPRICE. STOCKPRICE中使用股票代码作为主键,另外还有日期字段.它有33408条记录(128