使用RBAC特性让您的Kubernetes集群更加安全

Posted 容器时代

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用RBAC特性让您的Kubernetes集群更加安全相关的知识,希望对你有一定的参考价值。



1
简介

Kubernetes是在集群环境中管理应用程序的开源容器编排工具。在最新的版本(version 1.6)中,Kubernetes引入了诸多特性,如DaemonSet, ETCD v3, 支持更大规模的扩展,高级的调度特性和Kubeadmin的改进。此外,新的RBAC授权者是Kubernetes 1.6的另一个有趣的功能。在Kubernetes内,授权作为一个单独的认证步骤发生。授权检查将请求的属性与访问策略进行比较。一个API调用必须满足至少有一个策略才能发生。


RBAC(Role-Based Access Controll)代表基于角色的访问控制,允许Kubernetes管理员以细粒度的方式将权限应用与Kubernetes集群内的所有内容。它在Kubernetes中提供额外的安全性,并允许配置灵活的授权策略,可以在不重启容器集群的情况下进行更新。在深入了解RBAC的功能之前,我们来看看在Kubernetes如何处理授权。



2
授权模式

Kubernetes可以在启动ApiServer启动的时候通过"标记——授权模式“进行选择。Kubernetes具有如下几种实现:


  • AlwaysDeny —— 阻止所有的请求(主要用于测试)

  • AlwaysAllow —— 允许所有的请求(不需要授权时使用)

  • ABAC —— 基于属性的访问控制,这里访问规则是由用户配置的,以文件的形式提供给Kubernetes

  • Webhook —— 允许您使用自定义或外部服务通过REST接口授权

  • RBAC —— 基于角色的访问控制,此处访问规则存储在Kubernetes API中,也可以预定义或者用户配置



3
请求属性

在使用授权的请求中要包含如下属性:

  • user —— 用于用户认证的用户字符串

  • group —— 用户是其成员的组名称列表

  • extra —— 认证层提供的任职字符串秘钥的映射

  • request path —— 请求的URI,有助于提供对非资源断点的访问,如/healthz/api

  • 该请求是否访问API资源

  • 资源请求方式:

    • Get, list, create, update, patch, watch, proxy, redirect, delete, deletecollection

  • 非资源请求方式:

    • Get, post, put, delete

  • 正在访问的资源

  • 正在访问的子资源

  • 正在访问的Namespace

  • 正在访问的API

  • 正在访问的资源的名称


4
ABAC vs RBAC
ABAC RBAC
ABAC是基于属性的控制 RBAC是基于角色的控制
任何策略改变都需要主机上的文件(ssh and root file system)授权 无需ssh授权即可更改策略
用户必须重启集群ApiServer才能更新权限 用户不必重启ApiServer即可更改权限
它允许一个简单的基于本地文件的用户配置的授权策略 它允许授权由Kubernetes API驱动


5
 RBAC

基本上,RBAC为用户提供细粒度的访问Kubernetes API资源。 RBAC使用两个对象,即RolesRoleBindings,描述权限并连接用户和适当的资源。


  • Roles —— 角色是一组权限,它们在Namespace中定义。


角色有两种风格:

* Role —— 授予对所选Namespace内资源的访问权限 * ClusterRole —— 授予对集群级资源的访问权限


  • RoleBindings —— 将用户或用户组映射到角色,授予角色Namespace下用户的权限。


就像Roles一样,RoleBindings也有两种风格:


* RoleBinding —— 用于将橘色绑定到用户以访问Namespace下的资源。   * ClusterRoleBinding —— 用于将角色绑定到用户以访问集群中的资源。


RBAC的各个属性之间关系的示意图如下:


使用RBAC特性让您的Kubernetes集群更加安全


接下来我们看几个Roles和它们的RoleBindings的实例。


A
Role


下面的例子展示了如何定义"Role":允许该角色读取default空间下的所有Pod:


使用RBAC特性让您的Kubernetes集群更加安全


B
Role Binding


下面的例子给出RoleBindings赋予default命名空间下的pod-reader的角色给用户jane。该策略允许用户jane可以读取default命名空间下的所有pods:


使用RBAC特性让您的Kubernetes集群更加安全


C
Cluster Role


下面的例子展示该ClusterRole赋予读取所有secret的权限:

使用RBAC特性让您的Kubernetes集群更加安全


下面的例子展示了RoleBinding指向一个ClusterRoles关联的dave用户,dave只能访问development空间下的secret

使用RBAC特性让您的Kubernetes集群更加安全


D

ClusterRoleBinding


ClusterRoleBinding允许manager组下的任何用户都可以读取任意命名空间下的任何secret:


使用RBAC特性让您的Kubernetes集群更加安全



6
 总结

Kubernetes使得所有操作都很容易,RBAC使用户能够访问这些Kubernetes API资源。他还允许用户动态的配置集群用户的权限,并定义他们可以交互的资源种类。


7
加入容器时代

(微信群已满,请添加k8stimes或者扫下面二维码添加好友,小助手会将您拉入群聊)


使用RBAC特性让您的Kubernetes集群更加安全




8
架构真经



以上是关于使用RBAC特性让您的Kubernetes集群更加安全的主要内容,如果未能解决你的问题,请参考以下文章

干货 | K8S 1.6新增特性之RBAC

Kubernetes集群RBAC资源安全框架(三十九)

kubeadm ansible快速部署kubernetes生产级高可用集群

Kubernetes访问控制之RBAC

kubernetes RBAC相遇--介绍常规用法集群默认

Kubernetes-一文详解ServiceAccount与RBAC权限控制