草庐IT

在 Kubernetes 上实施零信任

张晓辉 2023-03-28 原文
本文翻译自 ContainerJournal 的 2022 年度文章之一 《Implementing Zero-Trust on Kubernetes》[1],作者 Deepak Goel 在文中分享了 Kubernetes 上实施零信任的三个最佳实践。

作为云原生社区的基石,Kubernetes 帮助企业在生产环境中更高效地部署和管理容器。尽管 Kubernetes 最初设计时提供了基本的 安全功能[2],但广泛且迅速的采用以及日益复杂的威胁形势使 Kubernetes 更容易受到攻击。开发人员和安全专家当下的任务是扩展 Kubernetes 的内置安全性,以有效防范更复杂、更多样和更频繁的网络攻击。

以往“信任但要验证”的方式已被证明对云计算复杂的分布式特性无效,因此 Kubernetes[3] 必须转向“从不信任,始终验证”的零信任模型思想,为业务提供更大的保护。

零信任模型的基本概念

基于“从不信任,始终验证”的原则,可以用三个基本概念来解释零信任模型:

安全网络:始终认为网络是敌对的和有威胁的。网络上的内部和外部数据和信息不断暴露在安全威胁之下。

安全资源:网络上存在的任何信息源,无论位于何处,对其都应持怀疑态度。

身份验证:默认情况下不应信任来自内部或外部网络的用户、设备和流量。零信任应该基于使用正确的身份验证和授权的访问控制。

零信任的三个最佳实践

Kubernetes 提供了灵活性,既是优势但也增加了复杂性,为了在不同的网络环境中运行,为服务和工作负载引入了许多配置选项。Kubernetes 部署考虑以下三个零信任模型的最佳实践,以提升安全保护和工作效率。

优化软件配置和访问权限

团队需要为服务和跨集群操作提供一致的配置。虽然 Kubernetes 提供了多种配置选项,但过多的选项会增加安全问题出现的几率。使用零信任框架,组织可以对服务进行持续验证并将其部署到多个集群,而不会危及任何安全性。通过在授予它们对应用程序和服务的任何安全权限之前仔细检查这些配置,组织可以加强分布式 Kubernetes 集群的安全性。

使用零信任模型提高 Kubernetes 安全性的另一种方法是只为软件提供运行所需的权限和功能。虽然确定软件所需的确切权限和功能并不是那么容易,但更好地了解这些元素可以降低安全风险。对于云端的容器编排环境,相比本地环境,赋予有限的权限和能力更为重要。

译者注:持续验证、最小权限原则

记录和监控数据

重要的是提供必要的安全数据,使开发人员和安全专家能够衡量、预测、避免和防御潜在的安全风险。例如,组织应该记录服务识别的用户 ID 或组 ID,尤其是在集群环境。这可确保组织使用所需的 ID 来帮助服务和软件团队更快地识别匿名攻击。日志记录也将是在云原生环境中提供安全可追溯性的信息的关键部分。

有了足够的安全数据,团队还可以重新思考和优化他们的安全实践和应用程序更新,以应对不断变化的技术环境,帮助确保持续抵御攻击。

译者注:提供数据支撑

专注于人员和流程管理

除了来自外部网络的用户和设备之外,合作伙伴、利益相关者或任何有权访问组织的数据库和容器化应用程序的人都是潜在的 Kubernetes 安全威胁。因此,培训内部人员以避免潜在的内部威胁至关重要。如上所述,组织可以从记录和监控平台数据开始,同时让所有利益相关者了解市场上普遍存在的各种攻击策略。

除了适当的培训之外,优化日常运营中的安全流程有助于支撑零信任模型,并最大限度地减少网络攻击对企业云上服务的影响。一些推荐的安全流程包括积极审查网络管理、防火墙清单以及定期检查容器和软件镜像。

由于 air-gapped 为云中的复杂部署模式提供了军事级安全级别,我建议组织将这些操作流程与 air-gapped 实现相结合,为 Kubernetes 项目提供额外的安全级别。

译者注:人员培训、流程约束必不可少

结论

在生产环境中部署和管理 Kubernetes 时,安全性不再是事后的想法。违规、中断和数据盗窃是严重的网络安全问题,可能对组织产生不利影响。数据和信息记录、员工安全培训和流程优化等零信任实践是保护 Kubernetes 项目和 IT 基础架构的有效且实用的方法。通过实施这些实践,组织可以更好地保护 Kubernetes 部署。遵循这种零信任模型将使开发人员和运维人员无需担心集群和基础设施安全问题,同时使安全团队能够专注于安全性,而不是迷失在 Kubernetes 配置中。

参考资料

[1] 《Implementing Zero-Trust on Kubernetes》: https://containerjournal.com/features/implementing-zero-trust-on-kubernetes/

[2] 安全功能: https://containerjournal.com/editorial-calendar/rsa/15-point-kubernetes-security-checklist/

[3] Kubernetes: https://d2iq.com/resources/cheat-sheet/kubernetes-security

有关在 Kubernetes 上实施零信任的更多相关文章

  1. kubernetes集群划分节点 - 2

    Kubernetes(K8s)是一个用于管理容器化应用程序的开源平台,可以帮助开发人员更轻松地部署、管理和扩展应用程序。在Kubernetes中,集群划分是一种重要的概念,可以帮助我们更好地组织和管理集群中的节点和资源。本文将介绍如何使用Kubernetes对集群进行划分,并提供详细的操作示例,希望能够帮助读者更好地了解和使用Kubernetes平台。Node划分Node划分是将集群中的节点按照一定的规则进行划分。在Kubernetes中,可以使用NodeSelector和Affinity机制来实现Node划分。NodeSelectorNodeSelector是一种将Pod调度到符合特定节点标

  2. 云原生(十八) | Kubernetes篇之Kubernetes(k8s)工作负载 - 2

    文章目录Kubernetes(k8s)工作负载一、Workloads二、Pod三、Deployment四、RC、RS、DaemonSet、StatefulSet五、Job、CronJob1、Job2、CronJob六、GCKubernetes(k8s)工作负载一、Workloads什么是工作负载(Workloads)工作负载是运行在Kubernetes上的一个应用程序。一个应用很复杂,可能由单个组件或者多个组件共同完成。无论怎样我们可以用一组Pod来表示一个应用,也就是一个工作负载Pod又是一组容器(Containers)所以关系又像是这样工作负载(Workloads)控制一组PodPod控制

  3. ruby-on-rails - 有没有办法在 Rails 控制台内的输出上实现类似 grep 的功能 - 2

    在shell中,我可以做到$catname_of_file_with_a_lot_of_text|grep"WhatIamlookingfor"在Rails控制台中,我能否实现类似的功能,比如当我运行一个命令并且输出很大时,尤其是数据库查询。我知道将其输出为YAML,但这不是我要找的。谢谢。 最佳答案 是的,你可以。该方法称为gr...等待它...ep。Ruby的grep适用于String、Array和许多其他内置对象。例如,要获取一个数字的所有to_xxx方法,只需执行以下操作:1.methods.grep(/to_/)

  4. idea连接远程k8s集群使用kubernetes-client - 2

    文章目录一.k8s集群修改config1.1备份当前k8s集群配置文件1.2删除当前k8s集群的apiserver的cert和key1.3生成新的apiserver的cert和key1.4刷新admin.conf1.5重启apiserver1.6刷新.kube/config二.安装kubectl2.1下载kubectl2.2配置kubectl三.使用kubernetes-client操作k8s集群3.1依赖3.2注意(可忽略)3.3创建StatefulSet3.4运行shell命令3.5删除StatefulSet3.6线上运行注意一.k8s集群修改config因为默认的是内网IP,复制出来后,

  5. ruby - 如何在安全的沙箱中运行不受信任的 Ruby 代码? - 2

    我希望能够运行不受信任的ruby​​代码。我希望能够将变量传递给它可能使用的所述不受信任的代码。我还希望上述代码将结果返回给我。这是我在想什么的概念性例子input="sweet"output=nilThread.start{$SAFE=4#...untrustedcodegoeshere,itusestheinputvariable(s)#tocalculatesomeresultthatitplacesintheoutputvariable}#parsetheoutputvariableasastring.澄清一下,我基本上是将不受信任的代码用作函数。我想要提供它的一些输入,然后允

  6. ruby - 您如何使用 ptrace 对在 Rails 中运行的不受信任的代码进行沙盒处理? - 2

    假设我有这个糟糕的Controller代码:classMovesController一段时间以来,我一直在寻找一种最好的方法来沙箱化不受信任的代码的执行,并偶然发现了这个ruby​​-lang特性中的讨论:https://bugs.ruby-lang.org/issues/8468TherealsolutiontothisproblemistorunasandboxatthelevelaboveRuby.Irununtrustedcodeonhttp://eval.ininsideaptracebasedsandbox.CharlieSomerville对该主题的进一步研究并没有得到比

  7. 如何在自定义屏幕上实现自动生成文档编号 - 2

    我需要创建诸如屏幕之类的机会,我不知道如何实现新创建文档的文档编号的自动我期待有人在这个问题上为我提供帮助。我使用的以下步骤,并附上了供审核的代码。我在保存时会遇到错误,并且不生成数字我在文档中为备忘录创建了一个编号序列我为序列编号设置创建了一个DAC区域回忆录publicabstractclassmemoInOrderId:PX.Data.IBqlField{}protectedstring_MemoInOrderId;[PXDBString(10,IsUnicode=true)][PXDefault("MEMOIN")][PXSelector(typeof(Numbering.number

  8. 【云原生 • Kubernetes】kubernetes 核心技术 - Ingress - 2

    本文导读一、前言二、Ingress和pod有什么关系三、使用Ingress对外暴露应用1.创建应用并使用NodePort暴露端口2.应用Ingress(1)部署IngressController(2)创建Ingress规则(3)在Windows系统的hosts文件添加域名访问规则一、前言在以往的操作过程中,我们都是将某端口号对外暴露,然后再使用IP+端口号进行访问服务,这是通过Service中的NodePort实现的。但是NodePort有着明显的缺陷:NodePort会在每一个node节点都启用一个端口,也就是说在集群中的任何一个node节点中,使用节点IP+端口号都能访问到该服务;每个端口

  9. 云计算的含义及其基本特征和kubernetes的核心组件及相应用途 - 2

    一、云计算的含义云计算是指能够按照需求,随时随地、便捷高效地从可配置的计算资源共享池中获取网络、服务器、存储、应用及服务等所需资源的模式。二、云计算的特征规模大、虚拟化、高可靠性、响应速度快、高可伸缩性、按需服务、托管省心、更安全等。三、kubernetes各核心组件kubernetes整体架构包括Master、Node以及etcd。3.1mastermaster即主节点,负责控制整个kubernetes集群。它包括ApiServer、Scheduler、Controller等组成部分。它们都需要和Etcd进行交互以存储数据。ApiServer:主要提供资源操作的统一入口,这样就屏蔽了与Etc

  10. Kubernetes 安装过程问题汇总 - 2

    文章目录1.HAProxy安装问题汇总1.1绑定vip启动失败2.ETCD安装问题汇总集群无法启动2.1etcd节点重启失败3.Kubernetes安装问题汇总3.1namespace无法删除3.2大量Pod状态为Terminating3.3Pod日志无法查看3.4Pod容器初始化失败3.5Pod被驱逐3.6node节点报错3.7查看kubelet日志3.8主节点无法调度4.Calico安装问题汇总4.1节点之间访问Timeout4.2Calico-nodePod启动失败5.CoreDNS安装问题汇总5.1DNS域名服务IP地址调整6.Istio安装问题汇总6.1Kiali无法连接Istiod

随机推荐