最好的K8S 安全机制介绍——授权概述
授权
K8S 的授权模式
-
ABAC 授权——基于属性的访问控制(ABAC)定义了一种访问控制范式,通过将属性组合在一起的策略将访问权限授予用户。策略可以使用任何类型的属性(用户属性、资源属性、对象、环境属性等)。有关使用ABAC模式的更多信息,请参见ABAC模式。
-
RBAC 授权——基于角色的访问控制(RBAC)是一种基于企业中单个用户的角色来调节对计算机或网络资源的访问的方法。在此上下文中,访问是单个用户执行特定任务的能力,例如查看、创建或修改文件。要了解关于使用RBAC模式的更多信息,请参见RBAC模
- 当指定RBAC(基于角色的访问控制)时,使用RBAC.authority .k8s.io API组驱动授权决策,允许管理员通过Kubernetes API动态配置权限策略。
-
NODE 授权——一个特殊用途的授权器,根据调度到kubelet所在节点的pod向kubelet授予权限。有关使用节点授权模式的更多信息,请参见节点授权。
-
WEBHOOK 授权——WebHook是当某个事件发生时触发一个HTTP POST的回调;实现webhook的web应用程序将向URL发送一条消息。有关使用Webhook模式的更多信息,请参见Webhook模式。
-
允许所有访问
-
拒绝所有访问
授权模式的设置方法
在启动API SERVER时添加如下参数之一
--authorization-mode=ABAC
--authorization-mode=RBAC
--authorization-mode=Webhook
--authorization-mode=Node
--authorization-mode=AlwaysDeny
--authorization-mode=AlwaysAllow
Kubernetes只对以下API请求属性进行审查
-
user — 身份验证期间提供的用户字符串。
-
group — 已验证用户所属的组名称列表。
-
extra — 由身份验证层提供的任意字符串键到字符串值的映射。
-
API — 指示请求是否为API资源。
-
request path — 到其他非资源端点(如/api或/healthz)的路径。
-
API request verb(动词)—API verb(动词) , get、list、create、update、patch、watch、proxy、redirect、delete和deletecollection用于资源请求。要确定资源API端点的请求谓词,请参见 Determine the request verb.。
-
HTTP请求动词—HTTP动词get、post、put和delete用于非资源请求。
-
resource—正在访问的资源的ID或名称(仅用于资源请求)——对于使用get、update、patch和delete谓词的资源请求,您必须提供资源名称。
-
子资源——正在访问的子资源(仅用于资源请求)。
-
Namespace——正在访问的对象的名称空间(仅用于名称空间大小的资源请求)。
-
API group——正在访问的API组(仅用于资源请求)。空字符串指定核心API组
补充一下关于K8S api的一些知识, K8S api 遵守openapi规范. 在K8S的API 设计中,最重要的几个概念就是 api version, api group, resource type , meta, 以及 spec
-
apiVersion—您使用Kubernetes API的哪个版本来创建这个对象
-
kind—创建什么样的对象
-
meta——帮助惟一标识对象的数据,包括名称字符串、UID和可选名称空间
举个例子解释下
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 这里 app 就是API GROUP, v1 就是 api version
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
所有的K8S API 组及说明都在 api reference 里能够查到
如果文章对您有帮助,请点一下下面的 "喜欢"