写点什么

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

  • 2020-04-23
  • 本文字数:3536 字

    阅读完需:约 12 分钟

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 将会帮助您。


2020-04-23 17:22571

评论

发布
暂无评论
发现更多内容

亚信科技AntDB数据库荣获“2021金融科技应用创新突出贡献奖”

亚信AntDB数据库

AntDB 金融行业 亚信科技

一个cpp协程库的前世今生(二十四)对象池与栈内存池

SkyFire

c++ cocpp

深入理解Python内存管理与垃圾回收

宇宙之一粟

Python 内存管理 1月月更

从智能汽车到智慧出行,区块链能打通车联网的任督二脉吗?

CECBC

一款基于Java语言开发的,开源商业应用的模块化开发框架和智能管理平台-Axelor

马农驾驾驾

Java 系统开发 BPM 开发框架 智能管理

作业帮基于 Flink 的实时计算平台实践

Apache Flink

大数据 flink 编程 实时计算 IT

Hive企业级性能优化

五分钟学大数据

hive 1月月更

一文了解 MySQL 中的锁

Ayue、

MySQL 数据库 1月月更

征文投稿丨在轻量应用服务器上部署SpringBoot项目

阿里云弹性计算

阿里云 用户投稿 轻量应用

微信业务架构+学生管理系统毕设方案

李大虾

#架构实战营 「架构实战营」

代码之外的生存指南,先掌握这五步。

叶小鍵

一条SQL查询语句是如何执行的?

蝉沐风

MySQL sql 面试

SAST 为什么会成为网络安全领域的下一件大事?

麦禾测试

静态分析 静态测试工具 代码静态分析

Mybatis中的VFS是个啥

尹昶胜

mybatis

微信业务架构、学生管理系统(草稿)

Geek_16d2b8

架构训练营

如何使用JavaScript开发AR(增强现实)移动应用

汪子熙

JavaScript AR 1月月更 增强现实

混沌工程之ChaosMesh使用之模拟CPU使用率

zuozewei

混沌工程 Chaos Mesh 1月月更

Fabric.js 将本地图像上传到画布背景

德育处主任

前端 数据可视化 前端可视化 FabricJS Fabric.js

自动驾驶浪潮下,如何给技术迭代插上数据的“翅膀”?

澳鹏Appen

人工智能 自动驾驶 智能汽车 智能驾驶 数据标注

行业先锋畅聊 Flink 未来 —— FFA 2021 圆桌会议(北京)

Apache Flink

大数据 flink 编程 后端 实时计算

Web or Native 哪个才是元宇宙的未来(下)?

Orillusion

WebGL 元宇宙 Metaverse webgpu

微信业务架构图及学生管理系统架构设计实践

IT屠狗辈

系统架构 架构实战营 微信业务架构图

用 K3s 来运行安装和极狐GitLab Runner

极狐GitLab

Awesome DAO 文章和资源推荐(8/100)

hackstoic

DAO

TortoiseSVN 执行清理( cleanUp )失败的解决方案

编程三昧

svn 开发工具 1月月更

农业掀起“上链”潮 区块链等数字技术正成为乡村振兴新动力

CECBC

直播回顾:准确性提升到 5 秒级,ssar 独创的 load5s 指标有多硬核?| 龙蜥技术

OpenAnolis小助手

Linux 开源

SparkSQL的入门实践教程

华为云开发者联盟

sql spark 编程 Sparksql 结构化数据

Hive 数据倾斜问题定位排查及解决

五分钟学大数据

hive 1月月更

面向复杂度架构设计之学生管理系统

晨亮

「架构实战营」

模块一

Geek_f3e842

架构实战营

K8S安全军规101:对CNCF最佳实践的扩充_文化 & 方法_Rancher_InfoQ精选文章