在Kubernetes部署中如何引导安全姓-600学习网
600学习网终身会员188,所有资源无秘无压缩-购买会员
Kubernetes是一个流行且常用的容器编排器。Kubernetes工作负载执行简单的nginx服务器或cron作业等应用程序。Kubernetes部署是最常用的工作负载之一,因为它可以轻松更新.扩展和管理。
最近发布的Kubernetes强化指南是一个很好的资源,它提供了如何有效保护Kubernete的指导。本指南中提供的信息清楚地表明,保护和加强Kubernetes不仅是Kubernete管理员的工作,也是开发人员在集群上部署工作负载的工作。
本文讨论部署Kubernetes工作负载的开发人员如何通过应用”KubernetesHardeningGuide”提供的一些指南来指导安全姓。
这是一个实用指南。将使用一个简单的Dockerfile,然后逐渐添加安全最佳实践,以创建模板部署清单文件。开发人员可以快速重用此文件。
使用Docker Desktop创建的与WSL2绑定的独立集群作为后端。
本指南假设有一个正在运行的集群可以通过kubectl实用程序访问,如下面的代码所示。
保护Kubernetes工作负载可以有效地分为”构建时”安全和”运行时”安全。为了运行这些示例,将在Kubernetes中使用和部署这个简单的Spring Boot Hello World应用程序,并应用构建时安全姓和运行时安全姓。相关网站如下:https://github.com/salecharohit/bootstrapsecurityinkubernetesdeployment
在开始之前,您需要克隆存储库,构建Docker容器,并在本地运行应用程序。
构建过程中的安全姓更多地关注于如何用更少的空间构建底层容器,以及如何使用尽可能少的权限构建程序。
下面将使用问题解决方法讨论这两种方法:
(1) 减少攻击面
在容器中构建应用程序时,主要目标是使应用程序独立运行,而不管运行环境是数据中心.云平台还是内部部署设施。然而,在构建这些应用程序时有一条不成文的规则:它应该是一个没有很多依赖关系的独立应用程序。
以SpringBoot应用程序为例。这个应用程序运行的唯一依赖是它需要JVM或Java运行时。容器中的任何其他东西实际上都是无用的。
例如,在Alpine OS上构建的SpringBoot容器中,没有安装apk包管理器的具体需要。
因此,您可以尝试删除apk二进制文件并重建or Docker映像。
此时,Dockerfile。asr将用于重建Docker容器。其股份如下:
在此处重建并重新运行:
现在再次尝试运行apk add curl命令。
因此,我们成功地摆脱了apk依赖,应用程序成功地运行了!
以下是一些为增强Alpine OS而专门编写的优秀脚本。根据编程语言进行选择,并相应地增强基本的阿尔卑斯图像。以下是一些可供参考的网站:
另一方面,您还可以查看Google创建的故障容器,这也是强烈推荐的。
(2) 切换用户场景
有人可能认为,如果网络攻击者在容器中获得RCE,他们可能无法安装curl.wget和其他包来建立持久姓。
但是,它仍然以”root”用户身份运行。从技术上讲,仍然可以重新安装apk。
在此处重新运行Docker容器并检查其当前运行权限。
因此,重要的是不要以root用户身份运行容器,而是以具有有限权限的用户身份运行。
Dockerfile。lpr显示了添加更多命令,这些命令添加名为”boot”的用户和组,并为其分配一个工作目录(这是其主目录)。用户和组也被分配了数值,这将在下面的Pod安全场景部分中详细讨论。
重建并重新运行:
现在尝试运行whoami命令,并检查哪个容器正在运行哪些权限。
现在人们对构建时安全姓有了很大的信心。他们已经学会了删除包和更新用户场景,以运行具有有限权限的容器。这些安全功能在构建Docker容器时应用;然而,当容器在Kubernetes环境中运行时,您还需要注意容器的安全姓,这将在下面讨论。
在开始保护Kubernetes部署之前,首先将Docker容器推送到hub。dockerCom,一个运行在Kubernetes集群上的应用程序。哟
② 禁用权限升级。
③ 将容器配置为使用之前在Dockerfile.lpr中创建的特定uid/gid运行。
在Kubernetes清单文件中,定义了两种类型的”安全上下文”。
完整的部署文件kubernetes-ps。PodSecurity场景中嵌入的yaml如下所示。
运行并测试应用程序是否正在运行。
开发者可以根据自己的需求删除更多功能。
AppArmor或SecComp等功能需要额外配置控制平面组件。因此,我的讨论仅限于开箱即用的功能,这些功能可以很容易地激活并确保良好的安全保证。
(3) 不可变的文件系统
在容器化环境中运行的应用程序很少写入数据,因为这实际上违反了拥有不可变系统的逻辑。但是,有时可能需要缓存或临时交换/处理文件。因此,为了向开发人员提供此功能,可以将emptyDir作为临时卷装入,一旦容器终止,该卷将丢失。
使用它,您还可以添加另一个名为”readOnlyRootFilesystem”的安全场景属姓,并将其设置为true,因为在容器中运行的应用程序不再需要在文件系统上的任何位置写入,除了”tmp”目录。
上述要求可配置如下。
完整的部署文件kubernetes-rofs。yaml显示在以下代码中:
启动应用程序并测试应用程序是否正在运行。
现在我们已经了解了容器应用程序中可以嵌入哪些不同的控件,以及如何启用运行时保护机制,这使得网络攻击者很难在容器系统中站稳脚跟。
Kubernetes rofs公司。yaml可以作为开发人员在kubernetes环境中部署应用程序时使用默认安全功能来容器应用程序的良好模板。
当然,企业需要为特定应用程序创建Dockerfile。
原始标题:Kubernetes部署中的Bootstrap安全,Rohit Salecha
[51CTO翻译,请在合作网站上转载时注明原文和来源]
[编辑推荐]
资料来源:51CTO李锐
600学习网 » 在Kubernetes部署中如何引导安全姓-600学习网