Kubernetes安全加固

news2025/1/21 22:03:36

本博客地址:https://security.blog.csdn.net/article/details/130034953

一、认证安全配置

1.1、X.509客户端证书

X.509客户端证书是目前用户最常用的认证安全配置方式,其也可称作HTTPS证书认证,是基于CA根证书签名的双向数字证书认证方式,默认情况下Kubernetes开启此参数配置。

与X.509客户端证书相关的三个kube-apiserver启动参数为:

⬤ client-ca-file:指定CA根证书文件为/etc/kubernetes/pki/ca.pem,内置CA公钥,用于验证某证书是否为CA所签发。
⬤ tls-private-key-file:指定API Server私钥文件为/etc/kubernetes/pki/apiserver-key.pem。
⬤ tls-cert-file:指定API Server证书文件为/etc/kubernetes/pki/apiserver.pem。

如果用户使用kubeadm方式部署Kubernetes,kubeadm会自动调用openssl生成证书及相关密钥,一旦为kube-apiserver配置了以上三个参数,说明开启了HTTPS认证方式,此时若在外部通过https://masterIP:6443/api访问集群会被提示未授权访问,因此只有在客户端配置了认证信息才可对集群进行访问。

1.2、OIDC令牌

OpenID Connect(OIDC)令牌目前常用在主流公有云平台中,是一种基于OAuth2 的认证方式。OIDC对OAuth2的主要扩充体现于ID令牌(ID Token),其是由服务器签名的JSON Web令牌(JWT),并在认证时与访问令牌(Access Token)一同返回。

OCID认证流程图如下:
在这里插入图片描述

二、RBAC授权机制

API Server认证通过后,凭据(username、ID、group)作为授权模块的第一层输入,用户请求的资源、路径、行为等作为第二层输入,授权模块负责对以上输入进行校验,若通过则进入流程的下一步验证阶段,即准入控制器,若未通过则返回HTTP 403 Forbidden错误响应信息。

对于授权模式,目前业界使用最多的是基于角色的访问控制(Role-Based AccessControl,RBAC)

RBAC策略包含以下核心概念:

⬤ Resource:指Kubernetes中的资源,如Pod、Service等。
⬤ Role:对Resource执行的操作,如对Pod执行create、update、delete等操作。
⬤ Entity:代表一个应用程序,可以是一个用户、组或服务账户。
⬤ Role Binding:将Role绑定到Entity,表明在指定Resource上运行某Entity并执行一组操作。

此处需要注意的是,就Role和Role Binding而言,Kubernetes定义了两种范围类型:

⬤ 集群范围:Cluster Role和Cluster Role Binding。
⬤ 命名空间范围:Role和Role Binding。

如何使用上述两种类型的资源,须根据具体需求而定。

举例:

# 为应用程序建立服务账户资源
kubectl create namespace coolapp
# 查看创建的服务账户
kubectl --namespace=coolapp create serviceaccount myappid

# 创建Role,该Role只能在coolapp命名空间中查看和列出Pod
kubectl --namespace=coolapp create role podview --verb=get --verb=list --resource=pods
# 查看Role
kubectl --namespace=coolapp describe role/podview

# 创建Role Binding,将Role podview绑定至名为myappid的应用程序中
kubectl --namespace=coolapp create rolebinding mypodviewer --role= podview --serviceaccount=coolapp:myappid
# 查看Role Binding
kubectl --namespace=coolapp

三、准入控制器

当用户请求通过API Server认证和授权后,便进入了准入控制器环节,顾名思义,准入控制器即对请求的资源如Deployment、Pod、Service、DaemonSet、StatefulSet进行准入考量,相比前面提到的API Server认证授权机制,准入控制器是更为细粒度的资源控制机制,其支持Kubernetes的许多高级功能,如Pod安全策略(Pod Security Policy)、安全上下文(Security Context)、服务账户(Service Account)等。

准入控制器实际上为一段代码,它会在用户请求通过认证授权之后,Kubernetes资源对象持久化之前进行拦截。集群管理员可以通过在kube-apiserver配置文件中指定--enable-admission-plugins参数项的值来完成启动,若未指定,默认使用--enable-admission-plugins=NodeRestriction,NodeRestriction准入控制器限制了kubelet可以修改的Node和Pod对象。

举例:

--enable-admission-plugins= NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook

准入控制过程主要分为两个阶段,第一个阶段运行变更准入控制器,第二个阶段运行验证准入控制器。需要注意的是,Kubernetes的某些准入控制器既是变更准入控制器也是验证准入控制器。如果第一个阶段的任何准入控制器拒绝了请求,则整个请求被拒绝,并同时向终端用户返回一个错误。当上述两阶段校验全部通过后,请求的元数据被持久化至etcd组件中。

Pod安全策略是集群级别的资源,主要在Pod的创建和更新阶段提供细粒度的权限控制,其在Kubernetes中被定义为一个准入控制器,集群管理员可通过在kube-apiserver配置文件中指定--enable-admission-plugins=NodeRestriction,PodSecurityPolicy来完成启动。

Pod安全策略资源定义了一组Pod运行时必须遵循的条件及相关字段的默认值,只有Pod满足这些条件才会被Kubernetes接受。此外,Pod安全策略定义完成后,需要使用RBAC对其授权才可以正常使用。

四、Secret对象

Kubernetes使用Secret对象来保存敏感信息,如密码、令牌和SSH密钥。相比于将敏感信息放入Pod定义的yaml文件或容器镜像中,使用Secret方式更为安全灵活,该方式也是目前开发者常使用的密钥管理方式。Secret内容可以是一个字符串也可以是一个文件,用户操作Secret主要包含传递和访问两个行为。

在传递至容器的过程中,主要通过挂载宿主机文件系统的方式来进行。Kubernetes支持通过挂载卷的方式将Secret传递至Pod,当挂载的是一个临时卷时,意味着Secret不被写入磁盘而是写在内存中,所以攻击者更难获得Secret内容。此外,使用kubectl decribedocker inspect也无法查询Secret内容。

当访问Secret时,用户通常使用以下两种方式:

⬤ 容器内访问Secret。
⬤ kubelet组件访问Secret。

第一种方式,如果攻击者获得了对容器的访问权限,便可通过docker execkubectl exec进而获取Secret。针对此类型的攻击,我们可通过在容器内运行较少的工具来增加攻击者获得信息的难度,如禁止cat、vim、sh等。

第二种方式,通过添加NodeRestriction准入控制器,限制kubelet仅能访问调度到其节点Pod中的Secret,可避免kubelet访问权限过大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/414239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文精读1:(网格特征)In Defense of Grid Features for Visual Question Answering(CVPR2020)

马萨诸塞州立大学阿默斯特分校Facebook 人工智能研究 目录1. Introduction2. Related WorkVisual features for vision and language tasksPre-training for VQARegions vs. grids.3. From Regions to Grids3.1. Bottom-Up Attention with RegionsRegion selectionRegion featu…

5年测试被裁,恶补3个月上岸字节28K,面试差点被问哭···

我的个人背景非常简单,也可以说丝毫没有亮点。 学历普通,计算机专业二本毕业,毕业后出来就一直在一家小公司,岁月如梭细,算了下至今从事软件测试已经5年了,也点点点了五年,每天都是重复的工作&…

大数据4 - 分布式计算

1.分布式计算概述 分散->汇总模式: 1. 将数据分片,多台服务器各自负责一部分数据处理 2. 然后将各自的结果,进行汇总处理 3. 最终得到想要的计算结果 1. 什么是计算、分布式计算? •计算:对数据进行处理&#x…

git版本规范-前端

前言 本文档适用于前端的小伙伴。针对目前前端只有测试环境和生产环境,为更好管理前端代码和适用于自动化部署,编写次文档,有不同意见的小伙伴可以进行讨论。 分支 由于没有目前没有预发环境,简化开发、测试、部署和发布流程&a…

W80X|联盛德|nulllab空想实验室|Arduino适配|学习(6):w80x_arduino环境安装

文章目录概述官方推荐安装方法(实测未成功)readme中的安装步骤:手动安装方法:clone项目至本地手动新建w80x_arduino管理器存放目录w80x_arduino开发进展说明概述 此开源项目由nulllab空想实验室团队维护,并得到联盛德…

STL基本概念

📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c++阶段>——目标Windows,MySQL,Qt,数据结构与算法,Linux,多线程&…

vue3+TS+Pinia+Vite项目实战之一

文章目录一、创建项目1.1 使用脚手架创建项目1.2 初始化项目二、登录页面的开发三、使用vite-plugin-mock模拟后台接口返回数据四、前端调用后端接口使用axios五、首页layout六、动态菜单七、设置需要登录才能访问某些页面一、创建项目 1.1 使用脚手架创建项目 npm init vuel…

【网络安全】SQL注入--报错注入

报错注入报错注入定义代码展示常用的报错语句1.获取数据库名称2.获取mysql账号密码3.获取表名4.获取字段名5.获取账号密码报错注入定义 报错注入:利用sql语句的不规范,获取相关sql提示信息 代码展示 常用的报错语句 select first_name, last_name FROM…

【小程序】django笔记2

templates路径除了在settings中的templates的DIR[]中申明还有什么别的方法?已知,django底层根据app注册顺序查找各app文件中的templates文件夹,在其中搜索目标模版文件。已知,app注册在settings中的INSTAll-APPS里。已知&#xff…

MyBatis基础增删改查

文章目录MyBatis1. MyBatis是什么?2. 为什么要学习MyBatis3. 第一个MyBatis环境搭建1)添加MyBatis框架支持2)配置MyBatis相关配置文件3)添加代码4. 解决类的属性名和数据表字段名不一致(resultMap)5. 增加操作1)返回受影响的行数2)返回自增的id6. 修改操作7. 删除操…

类和对象深入讲解(1)

目录 1.类和对象的初步认识 1.1面向过程和面向对象的区别 1.2类的引入 1.3内的定义 1.4类的访问限定符及封装 1.4.1访问限定符 1.4.2 封装 1.5类的作用域 1.6类对象模型 1.6.1如何计算类对象大小 1.类和对象的初步认识 1.1面向过程和面向对象的区别 C语言是面向过程的…

大模型混战,阿里百度华为谁将成就AI时代的“新地基”?

从算力基础到用户生态,群雄逐鹿大模型 自2022年stable diffusion模型的进步推动AIGC的快速发展后,年底,ChatGPT以“破圈者”的姿态,快速“吸粉”亿万,在全球范围内掀起了一股AI浪潮,也促使了众多海外巨头竞…

Golang每日一练(leetDay0030)

目录 88. 合并两个有序数组 Merge Sorted Array 🌟 89. 格雷编码 Gray Code 🌟🌟 90. 子集 II Subsets II 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/…

为什么要创建FAQ?这篇文章告诉你

什么是FAQ 通过上述的引入大家应该也了解到了,FAQ是为了“解决问题”而存在的。FAQ是英文Frequently Asked Questions的缩写,中文意思就是“经常问到的问题”,或者更通俗地叫做“常见问题解答”。FAQ是当前网络上提供在线帮助的主要手段&…

小程序开发收费价目表

小程序作为一种新兴应用形式,正在逐渐成为企业和个人推广、运营的重要手段。然而,小程序开发的价格因项目规模和复杂程度差异较大,令不少人望而却步。本文将从小程序开发的相关因素入手,探讨小程序开发的价格范围和算法。 一、小…

【JLink仿真器】盗版检测、连接故障、检测不到芯片问题

【JLink仿真器】盗版检测、连接故障、检测不到芯片问题一、问题描述二、解决方法1、降低驱动(解决非法问题以及连接故障)2、SWD引脚被锁(解决检测不到芯片)三、说明一、问题描述 盗版检测:the connected probe appear…

【Linux】Mysql之索引的基本操作

一、为什么要使用索引 索引就是根据表中的一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表,实质上是一张描述索引列的列值与原表中记录行之间一 一对应关系的有序表。 索引是 MySQL 中十分重要的数据库对象,是数据库性能调优技术的基础&…

GraphCL方法介绍(Graph Contrastive Learning with Augmentations)

论文链接:https://arxiv.org/pdf/2010.13902.pdf 附录链接:https://yyou1996.github.io/files/neurips2020_graphcl_supplement.pdf 代码链接:https://github.com/Shen-Lab/GraphCL 1 图的数据增强 我们专注于图级扩充。给定 M 个图的数…

【分布式】熔断、降级傻傻分不清楚-熔断和降级的真实关系

文章目录前言降级熔断什么是服务熔断熔断和降级的关系降级方式1、熔断降级(不可用)2、超时降级3、限流降级总结前言 刚开始我以为熔断和降级是一体的,以为他们必须配合使用; 只不过名字不一样而已,但是当我经过思考过…

[架构之路-164]-《软考-系统分析师》-3-操作系统基本原理-文件系统(文件的逻辑组织、文件的物理组织、硬盘空间管理、分布式文件系统)

目录 3 . 4 文件系统 3.4.1文件的组织结构 1 . 逻辑结构 2 . 物理结构 3 . 树形文件结构 3.4.2 硬盘存储空间管理 1 . 空闲文件目录 2 . 空闲块链 3 . 位示图法 4 . 成组链接法 3.4.3分布式文件系统 1. D F S 的特点 2. DFS 的组成 3. DFS 的架构 3 . 4 文件系统…