一 ABAC

1.1 ABAC授权

基于属性的访问控制(ABAC)定义了访问控制范例,通过使用将属性组合在一起的策略向用户授予访问权限。
使用--authorization-policy-file=SOME_FILENAME和--authorization-mode=ABAC启用ABAC模式。

二 ABAC使用

2.1 策略文件格式

策略文件格式是每行一个JSON对象,每一行都是“策略对象”,其中每个这样的对象都是具有以下属性的映射:
版本控制属性:
apiVersion:字符串类型,有效值为“abac.authorization.kubernetes.io/v1beta1”;
kind:字符串类型,有效值为“Policy”;
spec 属性设置为具有以下属性的map:
  • 主题匹配属性:
user:字符串类型,来自于--token-auth-file。如果指定user,则必须与经过身份验证的用户的用户名匹配。
group:字符串类型,如果指定group,则必须与经过身份验证的用户的其中一个组匹配。
system:authenticated:匹配所有经过验证的请求;
system:unauthenticated:匹配所有未经身份验证的请求。
  • 资源匹配属性:
apiGroup:字符串类型,一个API组。
例如: extensions
通配符:*匹配所有API组。
namespace:字符串类型,命名空间。
例如: kube-system
通配符:*匹配所有资源请求。
resource:字符串类型,资源类型。
例如: pods
通配符:*匹配所有资源请求。
  • 非资源匹配属性:
nonResourcePath:字符串类型,非资源请求路径。
例如:/version或/apis
通配符:
* 匹配所有非资源请求。
/foo/*匹配的所有子路径/foo/。
  • readonly:布尔类型,当为true时,表示资源匹配策略仅适用于get,list和watch操作,非资源匹配策略仅适用于get操作。
注意:unset属性与为其类型设置为零值的属性相同(例如,空字符串,0,false)。

2.2 Kubectl

Kubectl使用api-server的端点/api和/apis端点来发现服务的资源类型。
使用ABAC授权时,必须通过nonResourcePath策略中的属性显式公开这些特殊资源。
要检查特定kubectl操作中涉及的HTTP调用,可通过以下命令查看:
kubectl --v=8 version

2.3 相关授权操作

 {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "alice", "namespace": "*", "resource": "*", "apiGroup": "*"}}
解释:Alice可以对所有资源做任何事情。
 {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "pods", "readonly": true}}
解释:Kubelet可以读取任何pods。
 {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "events"}}
解释:Kubelet可以读写事件。
 {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "bob", "namespace": "projectCaribou", "resource": "pods", "readonly": true}}
解释:Bob可以只读取命名空间“projectCaribou”中的pod。
 {"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:authenticated", "readonly": true, "nonResourcePath": "*"}}
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:unauthenticated", "readonly": true, "nonResourcePath": "*"}}
 
解释:任何人都可以对所有非资源路径发出只读请求。
更多RBAC参考:https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole

2.4 服务账户

每个服务帐户都有一个相应的ABAC用户名,该服务帐户的用户名是根据命名约定生成的:
 system:serviceaccount:<namespace>:<serviceaccountname>
创建新命名空间会导致以下列格式创建新服务帐户:
 system:serviceaccount:<namespace>:default
例如,如果要kube-system使用ABAC为API 授予默认服务帐户(在命名空间中)完全权限,则应将此行添加到策略文件中:
 {"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:serviceaccount:kube-system:default","namespace":"*","resource":"*","apiGroup":"*"}}
需要重新启动apiserver才能获取新的策略行。
注意:该ABAC授权功能在Kubernetes 1.6版本开始已被弃用!

附007.Kubernetes ABAC授权的更多相关文章

  1. 附006.Kubernetes RBAC授权

    一 RBAC 1.1 RBAC授权 基于角色的访问控制(RBAC)是一种基于个人用户的角色来管理对计算机或网络资源的访问的方法. RBAC使用rbac.authorization.k8s.io API ...

  2. 附024.Kubernetes全系列大总结

    Kubernetes全系列总结如下,后期不定期更新.欢迎基于学习.交流目的的转载和分享,禁止任何商业盗用,同时希望能带上原文出处,尊重ITer的成果,也是尊重知识.若发现任何错误或纰漏,留言反馈或右侧 ...

  3. 附010.Kubernetes永久存储之GlusterFS超融合部署

    一 前期准备 1.1 基础知识 在Kubernetes中,使用GlusterFS文件系统,操作步骤通常是: 创建brick-->创建volume-->创建PV-->创建PVC--&g ...

  4. 附004.Kubernetes Dashboard简介及使用

    一 Kubernetes dashboard简介 1.1 Web UI简介 dashboard是基于Web的Kubernetes用户界面.可以使用dashboard将容器化应用程序部署到Kuberne ...

  5. Kubernetes RBAC授权普通用户对命名空间访问权限

    Kubernetes RBAC授权普通用户对命名空间访问权限 官方文档:https://www.cnblogs.com/xiangsikai/p/11413970.html kind: Role ap ...

  6. 附014.Kubernetes Prometheus+Grafana+EFK+Kibana+Glusterfs整合解决方案

    一 glusterfs存储集群部署 注意:以下为简略步骤,详情参考<附009.Kubernetes永久存储之GlusterFS独立部署>. 1.1 架构示意 略 1.2 相关规划 主机 I ...

  7. 附014.Kubernetes Prometheus+Grafana+EFK+Kibana+Glusterfs整合性方案

    一 glusterfs存储集群部署 注意:以下为简略步骤,详情参考<附009.Kubernetes永久存储之GlusterFS独立部署>. 1.1 架构示意 略 1.2 相关规划 主机 I ...

  8. 附005.Kubernetes身份认证

    一 Kubernetes访问 1.1 Kubernetes交互 与Kubernetes交互通常有kubectl.客户端(Dashboard).REST API请求. 1.2 API访问流程 用户使用k ...

  9. 附008.Kubernetes TLS证书介绍及创建

    一 Kubernetes证书 1.1 TLS Kubernetes系统的各个组件需要使用TLS证书对其通信加密以及授权认证,建议在部署之前先生成相关的TLS证书. 1.2 CA证书创建方式 kuber ...

随机推荐

  1. AutoCAD中的螺旋究竟是什么螺旋?

    AutoCad从很早的时候就开始提供了螺旋线的功能,它的用法相对简单,非常适合用来对等距螺旋的理论进行演练. 选择螺旋线工具,首先画出一个基准圆,再向内(或向外)移动鼠标,拖出一个旋转3个周期的螺旋. ...

  2. nfs服务的讲解

    第4章 nfs存储服务的搭建 4.1 nfs服务的介绍 4.1.1 nfs的作用 nfs服务器是一种远程网络传输的共享文件系统 节省web服务器的本地存储空间 用户存储在web服务器上面的资源,会通过 ...

  3. Matlab Robotics Toolbox 仿真计算:Kinematics, Dynamics, Trajectory Generation

    1. 理论知识 理论知识请参考: 机器人学导论++(原书第3版)_(美)HLHN+J.CRAIG著++贠超等译 机器人学课程讲义(丁烨) 机器人学课程讲义(赵言正) 2. Matlab Robotic ...

  4. LNMP-Nginx配置不记录静态文件、过期时间

    用户访问web网站,通常日志文件会记录很多web站点上的一些静态文件信息,如果长期不处理,日志文件会越来越大,占用的系统资源也越大,此时就需要我们配置不记录静态文件和过期时间,减少日志文件记录过多不必 ...

  5. 分布式事务解决方案,中间件 Seata 的设计原理详解

    作者:张乘辉 前言 在微服务架构体系下,我们可以按照业务模块分层设计,单独部署,减轻了服务部署压力,也解耦了业务的耦合,避免了应用逐渐变成一个庞然怪物,从而可以轻松扩展,在某些服务出现故障时也不会影响 ...

  6. java开发必学知识:动态代理

    目录 1. 引言 2. 代理模式及静态代理 2.1 代理模式说明 2.2 静态代理 2.3 静态代理局限性 3. 动态代理 3.1 JAVA反射机制 3.2 JDK动态代理 3.2.1 JDK动态代理 ...

  7. dev gridcontrol简单的动态设置动态表头

    1)使用BandedGridView控件(此处演示BandedGridView控件包含8个列)2)往BandedGridView控件里添加GridBand控件(此处演示添加了4个) 3)///设置添加 ...

  8. java设计模式(一)动态代理模式,JDK与CGLIB分析

    -本想着这个知识点放到Spring Aop说说可能更合适一点,但因为上一篇有所提到就简单分析下,不足之处请多多评论留言,相互学习,有所提高才是关键! 什么是代理模式: 记得有本24种设计模式的书讲到代 ...

  9. 字符串的扩展(ES6)

    文章目录 字符串的扩展 1. 字符的Unicode表示法 2. codePointAt() 3. String.fromCodePoint() 4. 字符串的遍历器接口 5. at()(提案) 6. ...

  10. Vue之使用JsonView来展示Json树

    前两天干活儿有个需求,在前端需要展示可折叠的Json树,供开发人员查看,这里采用JsonView组件来实现,它是一款用于展示Json的Vue组件,支持大体积的Json文件快速解析渲染,下面记录一下实现 ...