k8s的认证授权

一、ServiceAccount

Service account是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计的。它与User account不同

User account是为人设计的,而service account则是为Pod中的进程调用Kubernetes API而设计;

User account是跨namespace的,而service account则是仅局限它所在的namespace;

每个namespace都会自动创建一个default service account

Token controller检测service account的创建,并为它们创建secret

开启ServiceAccount Admission Controller后

每个Pod在创建后都会自动设置spec.serviceAccount为default(除非指定了其他ServiceAccout)

验证Pod引用的service account已经存在,否则拒绝创建

如果Pod没有指定ImagePullSecrets,则把service account的ImagePullSecrets加到Pod中

每个container启动后都会挂载该service account的token和ca.crt到/var/run/secrets/kubernetes.io/serviceaccount/

当创建 pod 的时候,如果没有指定一个 service account,系统会自动在与该pod 相同的 namespace 下为其指派一个default service account。而pod和apiserver之间进行通信的账号,称为serviceAccountName。

二、RBAC----基于角色的访问控制

Kubernetes的授权是基于插件形式的,其常用的授权插件有以下几种:

Node(节点认证)

ABAC(基于属性的访问控制)

RBAC(基于角色的访问控制)

Webhook(基于http回调机制的访问控制)

让一个用户(Users)扮演一个角色(Role),角色拥有权限,从而让用户拥有这样的权限,随后在授权机制当中,只需要将权限授予某个角色,此时用户将获取对应角色的权限,从而实现角色的访问控制。

基于角色的访问控制(Role-Based Access Control, 即”RBAC”)使用”rbac.authorization.k8s.io” API Group实现授权决策,允许管理员通过Kubernetes API动态配置策略。

在k8s的授权机制当中,采用RBAC的方式进行授权,其工作逻辑是  把对对象的操作权限定义到一个角色当中,再将用户绑定到该角色,从而使用户得到对应角色的权限。此种方式仅作用于名称空间当中,这是什么意思呢?当User1绑定到Role角色当中,User1就获取了对该NamespaceA的操作权限,但是对NamespaceB是没有权限进行操作的,如get,list等操作。

另外,k8s为此还有一种集群级别的授权机制,就是定义一个集群角色(ClusterRole),对集群内的所有资源都有可操作的权限,从而将User2,User3通过ClusterRoleBinding到ClusterRole,从而使User2、User3拥有集群的操作权限。Role、RoleBinding、ClusterRole和ClusterRoleBinding的关系

但是这里有2种绑定ClusterRoleBinding、RoleBinding。也可以使用RoleBinding去绑定ClusterRole。

当使用这种方式进行绑定时,用户仅能获取当前名称空间的所有权限。为什么这么绕呢??举例有10个名称空间,每个名称空间都需要一个管理员,而该管理员的权限都是一致的。那么此时需要去定义这样的管理员,使用RoleBinding就需要创建10个Role,这样显得更加繁重。为此当使用RoleBinding去绑定一个ClusterRole时,该User仅仅拥有对当前名称空间的集群操作权限,换句话说,此时只需要创建一个ClusterRole就解决了以上的需求。

这里要注意的是:RoleBinding仅仅对当前名称空间有对应的权限。

在RBAC API中,一个角色包含了一套表示一组权限的规则。 权限以纯粹的累加形式累积(没有”否定”的规则)。 角色可以由命名空间(namespace)内的Role对象定义,而整个Kubernetes集群范围内有效的角色则通过ClusterRole对象实现。

四、RBAC的三种授权访问

RBAC不仅仅可以对user进行访问权限的控制,还可以通过group和serviceaccount进行访问权限控制。当我们想对一组用户进行权限分配时,即可将这一组用户归并到一个组内,从而通过对group进行访问权限的分配,达到访问权限控制的效果。

从前面serviceaccount我们可以了解到,Pod可以通过 spec.serviceAccountName来定义其是以某个serviceaccount的身份进行运行,当我们通过RBAC对serviceaccount进行访问授权时,即可以实现Pod对其他资源的访问权限进行控制。也就是说,当我们对serviceaccount进行rolebinding或clusterrolebinding,会使创建Pod拥有对应角色的权限和apiserver进行通信。

原文地址:https://www.cnblogs.com/muzinan110/p/11105789.html

时间: 2024-08-30 16:59:15

k8s的认证授权的相关文章

k8s认证授权详解

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

使用Owin中间件搭建OAuth2.0认证授权服务器

前言 这里主要总结下本人最近半个月关于搭建OAuth2.0服务器工作的经验.至于为何需要OAuth2.0.为何是Owin.什么是Owin等问题,不再赘述.我假定读者是使用Asp.Net,并需要搭建OAuth2.0服务器,对于涉及的Asp.Net Identity(Claims Based Authentication).Owin.OAuth2.0等知识点已有基本了解.若不了解,请先参考以下文章: MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN

[认证授权] 3.基于OAuth2的认证(译)

OAuth 2.0 规范定义了一个授权(delegation)协议,对于使用Web的应用程序和API在网络上传递授权决策非常有用.OAuth被用在各钟各样的应用程序中,包括提供用户认证的机制.这导致许多的开发者和API提供者得出一个OAuth本身是一个认证协议的错误结论,并将其错误的使用于此.让我们再次明确的指出: OAuth2.0 不是认证协议. 混乱的根源来自于在认证协议的内部实际上使用了OAuth,开发人员看到OAuth组件并与OAuth流程进行交互,并假设通过简单地使用OAuth,他们就

统一认证授权及单点登录的技术选择

主要认证授权技术 LtpaToken全称:IBM Lightweight Third-Party Authentication.是一个羽量的token生成规则,作用有点像OAUTH2.0的第四种规则Client Credentials,即直接产生Access Token一个非常灵活的认证规则,轻量级用户单点登录,适用于简单实现几个类,实现统一算法的URL登陆跳转. OAUTH2.0OAUTH2.0协议在第三方调用开发上比较简单,比较轻量级,各个语言的支持非常丰富,认证类型有4种,可以比较灵活的选

angularjs+webapi2 跨域Basic 认证授权(一)

如今的app,利用各种前端框架结合html5的混合开发模式已然盛极一时.其中ionic+angularjs更是如日中天.这种模式利用angularjs $http 请求数据api 以达到前后端分离深得人心.说到webapi 跨域和认证授权始终是不得不提的.这种现成的例子有很多,但我发现的要么是过于复杂,不利于第一次有效理解整个过程:要么就是侧重点比较单一,不好囊括:要么就是其中有些坑没有踩到,换个环境就一头雾水. 所以,我打算以最简单的实现方式最大限度地寻找其中的一些坑和注意点. 1.来看看我们

OAuth 2.0 认证授权

其实之前自己做的微信服务号的绑定登录也就是个OAuth认证授权 简单看下第三方使用OAuth做认证授权的过程:(取自网络,带图的大家应该都喜欢~) 第一步:用户登录第三方网站,例如使用qq登录. 第二步:点击登录后,会跳到qq平台提示输入用户名和密码. 第三步:如果用户名和密码正确,会提示是否接受授权,如果授权成功,第三方网站就能访问你的资源了,qq头像.用户名等 认证和授权过程(包括三方) 1.服务提供方,用户使用服务提供方来存储受保护的资源,如照片,视频,联系人列表. 2.用户,存放在服务提

在AngularJS应用中实现认证授权

在AngularJS应用中实现认证授权 在每一个严肃的应用中,认证和授权都是非常重要的一个部分.单页应用也不例外.应用并不会将所有的数据和功能都 暴露给所有的用户.用户需要通过认证和授权来查看应用的某个特定部分,或者在应用中进行特定的行为.为了在应用中对用户进行识别,我们需要让用户进行登录. 在用户管理方面,传统的服务器端应用和单页应用的实现方式有所不同,单页应用能够和服务器通信的方式只有AJAX.对于登录和退出来说也是如此. 负责识别用户的服务器端需要暴露出一个认证断电.单页应用将会把用户输入

跟我学Shiro实践-简单的认证授权

本文是基于张开涛老师的跟我学Shiro系列的个人实践.几个月前过了一遍张开涛的跟我学Shiro系列,因为没有实践,基本上又全部还给开涛老师了.趁着假期,这次准备将开涛老师的讲解实践一遍.当然本人的实践不会与开涛的实例完全相同,不然就没必要在写一遍了. 本文只会对相关必要的Shiro概念说明下,建议有时间可以阅读下开涛的Shiro系列:http://jinnianshilongnian.iteye.com/blog/2018398 Shiro的架构和简单的认证授权 1.1 Shiro架构和组件介绍

[认证授权] 2.OAuth2授权(续) & JWT(JSON Web Token)

1 RFC6749还有哪些可以完善的? 1.1 撤销Token 在上篇[认证授权] 1.OAuth2授权中介绍到了OAuth2可以帮我们解决第三方Client访问受保护资源的问题,但是只提供了如何获得access_token,并未说明怎么来撤销一个access_token.关于这部分OAuth2单独定义了一个RFC7009 - OAuth 2.0 Token Revocation来解决撤销Token问题. 1.2 Token对Client的不透明问题 OAuth2提供的“access_token