首页 > 其他分享 >kubernetes API服务器的安全防护

kubernetes API服务器的安全防护

时间:2023-04-07 09:01:02浏览次数:47  
标签:kubectl 44h kubernetes ServiceAccount system API io 服务器 pod

kubernetes API服务器的安全防护

  posted @ 2019-08-11 14:54  姚红  阅读(998)  评论(0)  编辑  收藏  举报 分类: 云计算-k8s undefined

目录

  • 12.1.了解认证机制
    • 12.1.2 ServiceAccount介绍
    • 12.1.3创建ServiceAccount
    • 12.1.4将ServiceAccount分配给pod
  • 12.2通过基于角色的权限控制加强集群安全
    • 12.2.1.介绍RBAC授权插件
    • 12.2.2介绍RBAC授权资源
    • 12.2.3使用Role和RoleBinding
    • 12.2.4使用ClusterRole和ClusterRoleBinding
    • 12.2.5了解默认的ClusterRole和ClusterRoleBinding

 

正文

回到顶部

12.1.了解认证机制

  启动API服务器时,通过命令行选项可以开启认证插件。

12.1.1.用户和组

了解用户:

  分为两种连接到api服务器的客户端:

  1.真实的人

  2.pod,使用一种称为ServiceAccount的机制

了解组:

  认证插件会连同用户名,和用户id返回组,组可以一次性给用户服务多个权限,不用单次赋予,

  system:unauthenticated组:用于所有认证插件都不会认证客户端身份的请求。

  system:authenticated组:会自动分配给一个成功通过认证的用户。

  system:serviceaccount组:包含 所有在系统中的serviceaccount。

  system:serviceaccount:<namespace>组:包含了所有在特定命名空间中的serviceAccount。

 

12.1.2 ServiceAccount介绍

  每个pod中都包含/var/run/secrets/kubernetes.io/serviceaccount/token文件,如下图所示,文件内容用于对身份进行验证,token文件持有serviceaccount的认证token。

  

  应用程序使用token去连接api服务器时,认证插件会对serviceaccount进行身份认证,并将serviceaccount的用户名传回到api服务器内部。

       serviceaccount的用户名格式如下:

  system:serviceaccount:<namespace>:<service account name>

  ServiceAccount是运行在pod中的应用程序,和api服务器身份认证的一中方式。

了解ServiceAccount资源

  ServiceAcount作用在单一命名空间,为每个命名空间创建默认的ServiceAccount。

       

  多个pod可以使用相同命名空间下的同一的ServiceAccount,

 ServiceAccount如何与授权文件绑定

   在pod的manifest文件中,可以指定账户名称的方式,将一个serviceAccount赋值给一个pod,如果不指定,将使用该命名空间下默认的ServiceAccount.

   可以 将不同的ServiceAccount赋值给pod,让pod访问不同的资源。

 

12.1.3创建ServiceAccount

  为了集群的安全性,可以手动创建ServiceAccount,可以限制只有允许的pod访问对应的资源。

        创建方法如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 $ kubectl get sa NAME      SECRETS   AGE default   1         21h     $ kubectl create serviceaccount yaohong serviceaccount/yaohong created     $ kubectl get sa NAME      SECRETS   AGE default   1         21h yaohong   1         3s

  使用describe来查看ServiceAccount。

1 2 3 4 5 6 7 8 9 $ kubectl describe sa yaohong Name:                yaohong Namespace:           default Labels:              <none> Annotations:         <none> Image pull secrets:  <none> Mountable secrets:   yaohong-token-qhbxn   //如果强制使用可挂载秘钥。那么使用这个serviceaccount的pod只能挂载这个秘钥 Tokens:              yaohong-token-qhbxn Events:              <none>

  查看该token,

1 2 3 4 5 6 7 8 9 10 11 12 13 14 $ kubectl describe secret yaohong-token-qhbxn Name:         yaohong-token-qhbxn Namespace:    default Labels:       <none> Annotations:  kubernetes.io/service-account.name: yaohong               kubernetes.io/service-account.uid: a3d0d2fe-bb43-11e9-ac1e-005056870b4d   Type:  kubernetes.io/service-account-token   Data ==== ca.crt:     1342 bytes namespace:  7 bytes token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Inlhb2hvbmctdG9rZW4tcWhieG4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoieWFvaG9uZyIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImEzZDBkMmZlLWJiNDMtMTFlOS1hYzFlLTAwNTA1Njg3MGI0ZCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0Onlhb2hvbmcifQ.BwmbZKoM95hTr39BuZhinRT_vHF-typH4anjkL0HQxdVZEt_eie5TjUECV9UbLRRYIqYamkSxmyYapV150AQh-PvdcLYPmwKQLJDe1-7VC4mO2IuVdMCI_BnZFQBJobRK9EdPdbZ9uxc9l0RL5I5WyWoIjiwbrQvtCUEIkjT_99_NngdrIr7QD9S5SxHurgE3HQbmzC6ItU911LjmxtSvBqS5NApJoJaztDv0cHKvlT67ZZbverJaStQdxr4yiRbpSycRNArHy-UZKbNQXuzaZczSjVouo5A5hzgSHEBBJkQpQ6Tb-Ko5XGjjCgV_b9uQvhmgdPAus8GdFTTFAbCBw

  

12.1.4将ServiceAccount分配给pod

  在pod中定义的spec.serviceAccountName字段上设置,此字段必须在pod创建时设置后续不能被修改。

  自定义pod的ServiceAccount的方法如下图

      

 

回到顶部

12.2通过基于角色的权限控制加强集群安全

12.2.1.介绍RBAC授权插件

  RBAC授权插件将用户角色作为决定用户能否执行操作的关机因素。

12.2.2介绍RBAC授权资源

  RBAC授权规则通过四种资源来进行配置的,他们可以分为两组:

    Role和ClusterRole,他们决定资源上可执行哪些动词。

         RoleBinding和ClusterRoleBinding,他们将上述角色绑定到特定的用户,组或者ServiceAccounts上。

  Role和RoleBinding是namespace级别资源

  ClusterRole和ClusterRoleBinding是集群级别资源

 

12.2.3使用Role和RoleBinding

   Role资源定义了哪些操作可以在哪些资源上执行,

创建Role

  service-reader.yml

1 2 3 4 5 6 7 8 9 apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata:   namespace: kube-system   name: service-reader rules: - apiGroups: [""]   verbs: ["get", "list"]   resources: ["services"]

  在kube-system中创建Role

1 #kubectl -n kube-system create -f service-reader.yml

  查看该namespace下的role

1 2 3 4 5 6 7 8 9 10 $ kubectl -n kube-system get role NAME                                             AGE extension-apiserver-authentication-reader        41h kube-state-metrics-resizer                       41h service-reader                                   2m17s system::leader-locking-kube-controller-manager   41h system::leader-locking-kube-scheduler            41h system:controller:bootstrap-signer               41h system:controller:cloud-provider                 41h system:controller:token-cleaner                  41h

绑定角色到ServiceAccount

   将service-reader角色绑定到default ServiceAccount

1 2 $ kubectl  create rolebinding test --role=service-reader rolebinding.rbac.authorization.k8s.io/test created

  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 $ kubectl  get rolebinding test -o yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata:   creationTimestamp: 2019-08-11T03:40:51Z   name: test   namespace: default   resourceVersion: "239323"   selfLink: /apis/rbac.authorization.k8s.io/v1/namespaces/default/rolebindings/test   uid: d0aff243-bbe9-11e9-ac1e-005056870b4d roleRef:   apiGroup: rbac.authorization.k8s.io   kind: Role   name: service-reader

  

12.2.4使用ClusterRole和ClusterRoleBinding

 查看集群ClusterRole

1 2 3 4 5 6 7 8 9 # kubectl get clusterrole NAME                                                                   AGE admin                                                                  42h cluster-admin                                                          42h edit                                                                   42h flannel                                                                42h kube-state-metrics                                                     42h system:aggregate-to-admin                                              42h ...

创建ClusterRole

1 kubectl create clusterrole flannel --verb=get,list -n kube-system 

查看yaml文件

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 # kubectl get  clusterrole flannel -o yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata:   annotations:     kubectl.kubernetes.io/last-applied-configuration: |       {"apiVersion":"rbac.authorization.k8s.io/v1","kind":"ClusterRole","metadata":{"annotations":{},"name":"flannel"},"rules":[{"apiGroups":[""],"resources":["pods"],"verbs":["get"]},{"apiGroups":[""],"resources":["nodes"],"verbs":["list","watch"]},{"apiGroups":[""],"resources":["nodes/status"],"verbs":["patch"]}]}   creationTimestamp: 2019-08-09T09:58:42Z   name: flannel   resourceVersion: "360"   selfLink: /apis/rbac.authorization.k8s.io/v1/clusterroles/flannel   uid: 45100f6f-ba8c-11e9-8f57-005056870608 rules: - apiGroups:   - ""   resources:   - pods   verbs:   - get - apiGroups:   - ""   resources:   - nodes   verbs:   - list   - watch - apiGroups:   - ""   resources:   - nodes/status   verbs:   - patch

 

创建clusterRoleBinding

1 2 $ kubectl  create clusterrolebinding  cluster-tetst  --clusterrole=pv-reader  --serviceaccount=kuebsystem:yaohong clusterrolebinding.rbac.authorization.k8s.io/cluster-tetst created

  

 

12.2.5了解默认的ClusterRole和ClusterRoleBinding

如下所示使用kubectl get clusterroles和kubectl get clusterrolesbinding可以获取k8s默认资源。

用edit ClusterRole允许对资源进行修改

用admin ClusterRole赋予一个命名空间全部的权限

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 $ kubectl get clusterroles NAME                                                                   AGE admin                                                                  44h cluster-admin                                                          44h edit                                                                   44h flannel                                                                44h kube-state-metrics                                                     44h system:aggregate-to-admin                                              44h system:aggregate-to-edit                                               44h system:aggregate-to-view                                               44h system:auth-delegator                                                  44h system:aws-cloud-provider                                              44h system:basic-user                                                      44h system:certificates.k8s.io:certificatesigningrequests:nodeclient       44h system:certificates.k8s.io:certificatesigningrequests:selfnodeclient   44h system:controller:attachdetach-controller                              44h system:controller:certificate-controller                               44h system:controller:clusterrole-aggregation-controller                   44h 。。。

  

1 2 3 4 5 6 7 8 9 10 11 12 13 $ kubectl get clusterrolebindings NAME                                                   AGE clust-tetst                                            17m cluster-admin                                          44h cluster-tetst                                          13m flannel                                                44h kube-state-metrics                                     44h kubelet-bootstrap                                      44h system:aws-cloud-provider                              44h system:basic-user                                      44h system:controller:attachdetach-controller              44h system:controller:certificate-controller               44h 。。。

标签:kubectl,44h,kubernetes,ServiceAccount,system,API,io,服务器,pod
From: https://www.cnblogs.com/hwj4191/p/17278157.html

相关文章

  • frp内网穿透,linux服务器,windows客户端
    一、配置前准备1、下载frp,可以从github上下载下载地址:https://github.com/fatedier/frp/releases2、服务器端(点击名称下载)frp_0.48.0_linux_amd64.tar.gz3、客户端(点击名称下载)frp_0.48.0_windows_amd64.zip 二、将下载的frp文件,上传至linux服务器#进入指定文件夹cd/......
  • 常见API,对象克隆
    目录学习目标1Math类1.1概述1.2常见方法1.3算法小题(质数)1.4算法小题(自幂数)1.5课后练习2System类2.1概述2.2常见方法3Runtime3.1概述3.2常见方法3.3恶搞好基友4Object类4.1概述4.2常见方法5Objects类5.1概述5.2常见方法6BigInteger类6.1引入6.2概述6.3......
  • udp协议的时间服务器
    #include<stdio.h>#include<stdlib.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<errno.h>#include<string.h>#include<time.h>constintmaxline=4096;char*sock_nt......
  • 47 openEuler搭建Nginx服务器-配置文件说明和管理模块
    47openEuler搭建Nginx服务器-配置文件说明和管理模块47.1Nginx配置文件说明当nginx服启动后,默认情况下它会读取如表2所示的配置文件。表2配置文件说明文件说明/etc/nginx/nginx.conf主要的配置文件/etc/nginx/conf.d配置文件的辅助目录,这些配置文件也被包含......
  • .net webapi 客户端缓存 服务端缓存
    客户端缓存-ResponseCacheAttribute通过设置HTTP的响应头Cache-Control来完成页面存储到浏览器缓存中,如果请求在缓存有效期间就直接从浏览器缓存中取出数据。只需要在接口上方添加ResponseCacheAttribute特性即可设置客户端缓存。ResponseCacheAttribute可应用于:Razor......
  • 如何获得OpenAI API Key及OpenAI绑卡充值教程
    原帖地址:如何获得OpenAIAPIKey及OpenAI绑卡充值教程参考:使用虚拟信用卡升级ChatGPTPlus及OpenAI付款设置教程如果您想使用OpeanAIAPI开发一个聊天机器人或者使用OpenAIAPI进行自动化办公,您首先要创建一个OpenAIAPIKey,方法如下:打开platform.openai.com,输入你的OpenAI帐号......
  • 管理WEB服务器文件的WebDAV协议&HTTP大跃进--QUIC与HTTP30&WEB安全攻击概述
    管理WEB服务器文件的WebDAV协议WebADV协议    WEBDAV追加方法  WeDAV请求示例  HTTP大跃进--QUIC与HTTP30 QUIC&HTTP3.0   HTTP2.0的问题队头阻塞建立连接的握手延迟大QUIC的特性0RTT   没有队头阻塞的多路复用 ......
  • 调用kibana API操作,导入导出仪表板和索引
    导出导出ChatGPT:Java1importjava.io.*;2importjava.net.*;3importorg.apache.commons.io.IOUtils;4importorg.json.JSONObject;56publicclassExportAndImportKibanaDashboardAndIndex{7publicstaticvoidmain(String[]args)throwsExcepti......
  • RPC服务器不可用
    1、使用netshinterfaceipadd添加IP的时候出现下面的提示,RPC服务器不可用。2、打开运行框;输入services.msc命令。3、来到服务器管理器,确认一下RPC服务是否开启状态,remoteprocedurecall(rpc)。4、然后确认一下DCOM服务器是否开启状态,DCOMServerProcessLauncher。5、然后再......
  • 洛谷P1552 [APIO2012] 派遣 题解 左偏树
    题目链接:https://www.luogu.com.cn/problem/P1552题目大意:每次求子树中薪水和不超过\(M\)的最大节点数。解题思路:使用左偏树维护一个大根堆。首先定义一个Node的结构体:structNode{ints[2],c,sz,dis;longlongsum;Node(){};Node(int_c){s......