你有了解过Kubernetes的认证授权链路吗?是否对TKE的权限控制CAM策略、服务角色傻傻分不清楚?本文将会向你介绍
腾讯云TKE平台侧的访问控制
、Kubernetes访问控制链路
,以及演示如何将平台侧账号对接到Kubernetes内。
当你在使用腾讯云容器服务TKE(Tencent Kubernetes Engine)的时候,如果多人共用一个账号的情况下,是否有遇到以下问题呢?
- 密钥由多人共享,泄密风险高。
- 无法限制其他人的访问权限,其他人误操作易造成安全风险。
为了解决以上问题,腾讯云CAM(Cloud Access Management)提供了主账号和子账号的认证体系以及基于角色的权限控制。
而不同的子账号对于TKE平台侧资源的控制粒度比较粗(cluster实例级别),又会遇到以下问题:
- 同一个集群由多子账号可访问,无法保证集群资源级别、命名空间级别的读写控制。
- 集群的高权限子账户无法对低权限子账户进行授权管理。
为了解决以上两个问题,TKE针对平台侧资源
、Kubernetes资源
分别进行相应的访问控制管理。
平台侧访问控制
首先介绍下什么是平台侧资源,平台侧资源即Cluster资源
、CVM资源
、CLB资源
、VPC资源
等腾讯云资源,而访问的用户主要分为用户
和服务角色载体
。
用户
就是我们平时登录控制台的主账号、子账号或者协作者账号服务角色
是一种定义好带有某些权限的角色,可以将这个角色赋予某个载体
,可以是某个其他账户,也可以是腾讯云下一个产品的服务提供者,CAM会默认为产品提供一个预设的载体和默认的角色,例如TKE的默认角色就是TKE_QCSRole,而载体就是ccs.qcloud.com
。
而这个角色有什么用处呢?举个TKE的例子,比如TKE的service-controller会Watch集群内的Service资源,如果需要创建LoadBalance类型的Service,会通过云API购买并创建CLB资源
,而service-controller是TKE平台为用户部署的,去访问云API需要有身份,这个身份就是ccs.qcloud.com
载体,而权限则需要用户给载体授予一个角色,即TKE_QCSRole。只有用户在授权TKE载体之后,TKE才可以通过服务扮演的方式代替用户购买CLB。
下面我会简单为你介绍如何给用户
授权,以及如何给TKE平台授予角色
。
定制策略
TKE通过接入CAM,对集群的API接口级别进行权限细分,需要您在CAM控制台对子账户进行不同的权限授予。同时TKE也在CAM侧提供了预设的权限,提供您默认选择,例如:
也可以自定义策略,具体策略定制请参考CAM产品介绍文档
例如拥有只读权限的子账户尝试修改集群名称,将会在API接口时校验CAM权限失败
划分用户组
可以依据团队的职责划分好用户组,将之前规划好的自定义策略绑定到一个用户组上,来方便的进行权限管理。
例如:有新同学入职时可方便的加入指定用户组(如运维组),就可以获取到该用户组的权限,避免了繁琐的权限配置操作。
授予TKE角色权限
使用TKE容器服务需要授予TKE平台为您操作CVM\CLB\VPC\CBS等权限,所以首次访问TKE控制台需要确保同意授权,即创建预设角色TKE_QCSRole,此角色默认授予TKE载体,该载体会通过CAM获取操作您集群的临时密钥,来进行相应的云API操作。
更多
更多丰富的平台侧访问控制用法请访问CAM产品说明文档
Kubernetes访问控制
介绍完平台侧资源的访问控制,我们再来看看TKE集群内的资源如何进行权限管理。当不同的子账户都拥有访问同一个TKE Kubernetes集群权限之后,如何保证不同的子账户,对于集群内资源拥有不同的角色和权限呢?让我们首先从社区的Kubernetes访问链路来分析整个过程,从而向您介绍TKE是如何实现容器服务子账户对接Kubernetes认证授权体系的。
Overview
首先从宏观的角度看下Kubernetes的请求链路是如何进行的。图片来源于k8s社区官网。
可以大概了解到一个请求的链路是