认证、授权与准入控制

一、访问控制概述

  1. API server作为访问kubernetes集群的网关,也是唯一入口
  2. 所有客户端访问集群都必须进行合法性检验:
    1)用户身份鉴别
    2)操作权限验证
    3)是否符合全局约束
    4)所有验证均通过才能访问或存入数据到etcd中
  3. 客户端认证操作:由 API Server 配置的一到多个认证插件完成。收到请求后, API Server 依次调用为其配置的认证插件来认证客户端身份,直到其中一个插件可以识别出请求者的身 份为止
  4. 授权操作由一到多个授权插件进行,它负责确定那些通过认证的用户是否有权限 执行其发出的资源操作请求

二、用户账户与用户组

  1. User Account(用户账号):
    1)一般是指由独立于Kubernete 之外的其他服务管理的用户账号(其他集群管理员,一般适用第三方插件管理,kubernetes不存在此类对象)
    2)User Account 通常用于复杂的业务逻辑管控,它作用于系统全局,其名称必须全局唯一
  2. Service Account(服务账号):
    1)指由Kubernetes API管理的账户,用于为Pod之中的服务进程在访问Kubernetes API时提供身份标识(identity)
    2)Service Account通常要绑定于特定的名称空间,他们由API Server或者通过手动创建,附带着一组存储为secret的用于访问API Server的凭据
    3)Service Account隶属于名称空间,仅用于实现某些特定的操作任务
  3. 用户组
    1)Service Account与User Account都可以隶属于一个或多个组
    2)用户组只是用户账号的逻辑集合,本身没有操作权限。但是附加于组上的权限可由其内部的所有用户继承
  4. 特殊的组
    1)system:unauthenticated :未能通过任何一个授权插件检验的账号,即未通过认证测试的用户所属的组
    2)system :authenticated :认证成功后的用户自动加入的一个组,用于快捷引用所有正 常通过认证的用户账号
    3)system:serviceaccounts:当前系统上的所有 Service Account 对象
    4)system :serviceaccounts :<namespace >:特定名称空间内所有的Service Account 对象

三、整体流程梳理

  1. 认证插件负责鉴定用户身份(认证方式:客户端证书、承载令牌、身份验证代理或HTTP basic认证等)
    1)API Server接收到访问请求时,将调用认证插件尝试与以下属性关联
         Username:用户名
         UID:用户ID
         Groups:用户所属组
         Extra:键值对数据
    2)API Server 支持同时启用多种认证机制,但至少应该分别为 Service Account和User Account 各自启用一个认证插件
    3)同时启用多种认证机制时,认证过程会以串行的方式进行,直到一种认证机制成功完成即结束
    4)若认证失败,则服务器会响应 401 状态码,反之, 请求者就会被识别为某个具体的用户(以其用户名进行标识),并且随后的操作都将以此用 户身份来进行
  2. 授权插件用于操作权限许可鉴别
    1)成功通过身份认证后的操作请求还需要转交给授权插件进行许可权限检查,以确保其拥有执行相应的操作的许可
    2)主要的授权插件
      (1)Node:基于Pod资源的目标调度节点来实现的对kubelet的访问控制
      (2)ABAC:attrubute-based access control,基于属性的访问控制
      (3)RBAC:role-based access control,基于角色的访问控制
      (4)Webhook:基于HTTP回调机制通过外部REST服务检查确认用户授权的访问控制
      (5)AlwaysDeny:总是拒绝(用于测试)
      (6)AlwaysAllow:总是运行(用于跳过授权验证)
      (7)补充:启动API Server时使用--authorzation-mode选项定义要启用的授权机制,多个之间使用逗号分隔
  3. 准入控制用于在资源对象的创建、删除、更新或连接(proxy)操作时进行更精细的许可检查
    1)在客户端请求经过身份验证和授权检查之 后,但在对象持久化存储 etcd之前拦截请求
    2)用于实现在资源的创建、更新和删除操作期间强制执行对象的语义验证等功能,读取资源信息的操作请求不会经由准入控制器的检查
    3)常用准入控制器
      (1)AlwaysAdmit :允许所有请求
      (2)AlwaysDeny :拒绝所有请求 ,仅应该用于测试
      (3)AlwaysPulllmages :总是下载镜像
      (4)NamespaceLifecycle :拒绝于不存在的名称空间中创建资源 ,而删除名称空间将会级联删除其下的所有其他资源
      (5)LimitRanger :可用资源范围界定,用于监控对设置了 LimitRange 的对象所发出的 所有请求,以确保其资源、请求不会超限
      (6)ServiceAccount :用于实现 Service Account 管控机制的自动化,实现创建 Pod 对象 时自动为其附加相关的 Service Account 对象
      (7)Pers stentVolumeLabel :为那些由云计算服务商提供的 PV 自动附加 region或zone 标签,以确保这些存储卷能够正确关联且仅能关联到所属的 region或zone
      (8)DefaultStorageClass :监控所有创建 PVC 对象的请求,以保证那些没有附加任何专用Storag Class 的请求会自动设定一个默认值
      (9)ResourceQuota:用于对名称空间设置可用资源的上限,并确保在其中创建的任何设置了资源限额的对象都不会超出名称空间的资源配额
      (10)DefaultTolerationSeconds :如果 Pod 对象上不存在污点宽容期限,则为它们设置默认的宽容期,以宽容“ notready: N oExecute ”和“ unreachable:NoExctute ”类的污点5分钟时间
      (11)ValidatingAdmission Webhook :并行调用匹配当前请求的所有验证类的 Webhook, 任何一个校验失败,请求即失败
    4)检查期间,只有那些顺利通过所有准入控制器检查的资源操作请求的结果 才能保存到 etcd 中,实现持久存储

原文地址:https://www.cnblogs.com/jayce9102/p/12050643.html

时间: 2024-08-02 07:38:32

认证、授权与准入控制的相关文章

Kubernetes之(十五)身份认证,授权,准入控制

目录 Kubernetes之(十五)身份认证,授权,准入控制 ServiceAccount 创建serviceaccount 自定义serviceaccount 自建证书和账号进行访问apiserver RBAC简介 Kubernetes RBAC演示 RBAC的三种授权访问 Kubernetes之(十五)身份认证,授权,准入控制 API Server作为Kubernetes网关,是访问和管理资源对象的唯一入口,其各种集群组件访问资源都需要经过网关才能进行正常访问和管理.每一次的访问请求都需要进

kubernetes认证、授权、准入控制

1 总述 1 概述 kubernetes 中的资源访问类型有两种,一种是由POD提供的服务资源,其可通过service或 ingress提供接口以供外部访问,这种访问不需要经过API server的认证,而另一种对集群内部资源的操作则需要经过一定的认证授权操作才能完成. 2 认证,授权,准入控制概述 1 概述 任何客户端在操作相关资源对象时必须经过三个步骤:认证: 身份鉴别,正确的账号,能够通过认证,其只能证明其是合法的账户.授权: 权限检查,对资源进行相应的操作.其可操作某些资源,其某些资源需

kubernetes集群的认证、授权、准入控制

一.kubernetes集群安全架构 用户使用kubectl.客户机或通过REST请求访问API.可以授权用户和Kubernetes服务帐户进行API访问.当一个请求到达API时,它会经历几个阶段,如下图所示: 1.访问K8S集群的资源需要过三关:认证.鉴权.准入控制: 2.普通用户若要安全访问集群API Server,往往需要证书.Token或者用户名+密码: 3.Pod访问,需要ServiceAccountK8S安全控制框架主要由下面3个阶段进行控制,每一个阶段都支持插件方式,通过API S

aProxy: 带认证授权和权限控制的反向代理

前段时间很多数据库因为没有做好权限控制暴露在外网被删然后遭勒索的事件,而类似的有些内网的web服务也会被开放到公网并且没有做任何权限控制的,这样也会有一定的风险.所以就决定写篇文章简单介绍一个小工具. aProxy是做什么用的 例如我们有很多服务,例如Hadoop.Aerospke.Riak等,都会有一些监控的web界面,我们需要查看这些线上服务的情况,但是又不能完全将这些服务开放到外网,让别人看到,这时候我们可能的做法是通过拨VPN,或者是通过Nginx的BaseAuth验证,又或者是简单的本

013.Kubernetes认证授权

一 Kubernetes认证系统介绍 1.1 访问控制 Kubernetes API的每个请求都会经过多阶段的访问控制之后才会被接受,这包括认证.授权以及准入控制(Admission Control)等 1.2 认证 在集群开启TLS后,客户端发往Kubernetes的所有API请求都需要进行认证,以验证用户的合法性. Kubernetes支持多种认证机制,并支持同时开启多个认证插件(只要有一个认证通过即可).如果认证成功,则用户的username会被传入授权模块做进一步授权验证:而对于认证失败

通过无线AP轻松突破内网准入控制

以定级为等保二级或更高安全等级的网络为例,针对违规内联,会专门部署终端桌面管理系统,并对网络接入实行准入控制,准入控制手段主要有: (1)基于802.1X进行准入控制: (2)基于交换机端口绑定实行准入控制: (3)基于认证网关进行准入控制: (4)其他如DHCP等准入控制. 上述技术手段的组合,会对边界完整性保护发挥重要作用,但仍无法完全杜绝违规内联问题. 原因解析: 第一:无线AP通过NAT结合DMZ,可轻松突破802.1X的准入控制.事实上,基于802.1X的准入控制,推广和普及力度最大的

kubernetes高级之动态准入控制

系列目录 动态准入控制器文档介绍了如何使用标准的,插件式的准入控制器.但是,但是由于以下原因,插件式的准入控制器在一些场景下并不灵活: 它们需要编译到kube-apiserver里 它们仅在apiserver启动的时候可以配置 准入钩子(Admission Webhooks 从1.9版本开始)解决了这些问题,它允许准入控制器独立于核心代码编译并且可以在运行时配置. 什么是准入钩子 准入钩子是一种http回调,它接收准入请求然后做一些处理.你可以定义两种类型的准入钩子:验证钩子和变换钩子.对于验证

k8s认证授权详解

理解认证授权 1.1 为什么要认证 想理解认证,我们得从认证解决什么问题.防止什么问题的发生入手. 防止什么问题呢?是防止有人入侵你的集群,root你的机器后让我们集群依然安全吗?不是吧,root都到手了,那就为所欲为,防不胜防了. 其实网络安全本身就是为了解决在某些假设成立的条件下如何防范的问题.比如一个非常重要的假设就是两个节点或者ip之间的通讯网络是不可信任的,可能会被第三方窃取,也可能会被第三方篡改.就像我们上学时候给心仪的女孩传纸条,传送的过程可能会被别的同学偷看,甚至内容可能会从我喜

源码分析shiro认证授权流程

1. shiro介绍 Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能: 认证 - 用户身份识别,常被称为用户“登录”: 授权 - 访问控制: 密码加密 - 保护或隐藏数据防止被偷窥: 会话管理 - 每用户相关的时间敏感的状态. 对于任何一个应用程序,Shiro都可以提供全面的安全管理服务.并且相对于其他安全框架,Shiro要简单的多. 2. shiro源码概况 先要了解shiro的基本框架(见http://www.cnblogs.com/davi