一 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. HDU-3339 IN ACTION(Dijkstra +01背包)

      Since 1945, when the first nuclear bomb was exploded by the Manhattan Project team in the US, the ...

  2. 新手学习FFmpeg - 如何编写Kubernetes资源文件

    Kubernetes API的使用方式 Kubernetes API属于声明式API编程, 它和常用的命令式编程有一些区别. 通俗的说,命令式编程是第一人称,我要做什么,我要怎么做. 操作系统最喜欢这 ...

  3. Django 10

    目录 cookie和session cookie session token Django中间件 自定义中间件 process_request process_response 其他方法 cookie ...

  4. 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor

    [Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...

  5. Linux内核构建过程

    构建内核 # shell 执行如下指令make zImage 全局变量 srctree    := $(if $(KBUILD_SRC),$(KBUILD_SRC),$(CURDIR))objtree ...

  6. sql语句对int类型进行模糊查询

    重点:select * from course where cast(courseId as char) like '%118%'; 首先可以将int类型转换为string类型的值再进行模糊查询,用方 ...

  7. poj 2823 Sliding Windows (单调队列+输入输出挂)

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 73426   Accepted: 20849 ...

  8. 数据库学习笔记day01+day02

    --表示系统时间select sysdate from dual --表是关系型数据库的基本结构--表是二维的,由行和列组成--行称为记录,列称为字段 --创建第一张表create table hw( ...

  9. Android 共享参数 SharedPreferences

    完成共享参数的读写 public class SharedPreference { private Context context; public SharedPreference(Context c ...

  10. 一键删除数据库所有的外键约束-FOREIGN_KEYS

    DECLARE @ESQL VARCHAR(1000);DECLARE FCursor CURSOR --定义游标FOR (SELECT  'ALTER TABLE '+O.name+' DROP  ...