云厂商k8s认证鉴权流程介绍

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介:   基于RBAC的role base鉴权是对kubernetes集群内模型资源进行访问控制的标准做法,同时各主流云厂商通常都有一套自身的访问控制引擎,就像EKS,GKE的IAM,AKS的ARM,阿里云的RAM服务;而对于普通用户来说,如何理解二者的区别和边界并做出正确的授权配置就成了一个令人头疼的问题。

  基于RBAC的role base鉴权是对kubernetes集群内模型资源进行访问控制的标准做法,同时各主流云厂商通常都有一套自身的访问控制引擎,就像EKS,GKE的IAM,AKS的ARM,阿里云的RAM服务;而对于普通用户来说,如何理解二者的区别和边界并做出正确的授权配置就成了一个令人头疼的问题。
  下面让我们来了解一下各主流云厂商k8s服务的认证鉴权流程。

AuthN & AuthZ in EKS

  EKS没有做到IAM与RBAC的统一授权,且仅支持CLI方式的集群内RBAC授权。默认使用aws-iam-authenticator完成请求的认证过程,其认证鉴权流程如下图所示:

1560344988741-7e790d5e-29ab-43ff-a7e1-eba7f81eed62.png

 1 首先用户客户端的config凭证中需要通过exec字段配置用于认证的roleARN和集群id
 2 EKS apiserver配置了认证webhook,收到认证请求后发送至aws-iam-authenticator server,server端通过IAM sts:GetCallerIdentity接口返回与指定的角色arn进行匹配完成认证,同时通过configmap中指定的arn与用户的映射关系找到k8s对应的用户或组返回

mapUsers:
  - userARN: arn:aws:iam::012345678901:user/Jane
    username: jane
  - userARN: arn:aws:iam::012345678901:user/Joe
    username: joe

 3 如果认证失败,apiserver返回401至客户端
 4 认证成功后,apiserver根据返回的用户或组进行RBAC鉴权,注意这里的RBAC鉴权所需的角色和绑定模型仍需要用户通过cli手工完成配置。

AuthN & AuthZ in GKE

  GKE在IAM中预置了几种面向k8s集群内的角色模型,用户可以通过GCP IAM控制台的绑定操作获取集群内k8s模型资源的使用权限,同时支持用户账号邮箱作为IAM和K8S认证的统一身份,从而部分实现了IAM与RBAC的授权统一,下图是GKE几种预置k8s应用角色和RBAC预置clusterrole之间的权限映射关系,在GKE文档中有对几种k8s相关预置角色的详细说明。

1560334555216-13266e4f-acc9-4ab8-8df0-0983956fb2e8.png

  这里用户需要注意的是GKE的Kubernetes Engine Admin角色相当于RBAC的cluster-admin,对集群内所有模型具有全部权限,Developer对应RBAC edit,Viewer对应RBAC view角色;而Kubernetes Engine Cluster Admin反而没有k8s集群内资源的使用权限,只有GKE cluster资源层面的管理权限,这种集群管理平面和集群内应用数据平面的权限隔离往往是令客户感到困扰的地方。

  另外,在实际的生产环境中,如果某用户在IAM控制台内被授予了内置的Kubernetes Engine Developer角色,那么他将拥有集群所有namespace的写权限,这也包括kube-system ns, 由于GKE还不支持ns粒度的一步授权,这在某些多租场景下是无法接受的。通常根据权限最小化原则,管理员只会给普通用户一个全局Viewer的权限,再通过手工配置RBAC角色绑定完成更细粒度的授权。在整个授权流程中IAM授权是基础,而通过RBAC配置可以实现上层应用的精细化权限控制。

AuthN & AuthZ in AKS

  AKS提供了Azure AD与k8s之间的认证身份集成能力,具体请参见,用户可面向Azure AD中的账号邮箱或组id在k8s集群中进行相应的RBAC角色绑定,为此AKS提供了CLI形式的绑定命令,当然这个过程仍然和Azure Resource Manager中的集群管理平面RBAC授权是分裂的两步操作。

  值得一提的是Azure AD与AKS的认证集成利用k8s原生的oidc webhook认证模式很好的弥补k8s在用户账号管理能力上的不足,同时能够更好地支持吊销AD内用户访问k8s的集群凭证。

AuthN & AuthZ in ACK&AMK

  阿里云容器服务的访问控制授权同样需要划分为管理平面授权和数据平面的授权,其中管理平面授权面向的是阿里云资源的权限控制,比如子账号在控制台对集群的可见性,集群自动伸缩,下载证书等权限都是由阿里云RAM服务来统一控制的,这也和阿里云其他云服务资源的授权模式保持一致。而对于集群内k8s模型的权限控制,仍旧通过RBAC角色配置完成,整体授权流程如下图所示,注意同GKE类似,RAM授权仍旧是整个授权流程的基础,用户需要确保首先完成RAM授权获得集群可见权限的基础上,在上层完成集群内应用资源的RBAC授权。

1560341322993-8250e130-b285-43c5-9ce7-f297c9352f37.png

  相较于其他云厂商的授权流程,阿里云容器服务控制台提供了可视化的授权管理页面,提供了如下能力:

  • 提供了四种常用预置RBAC角色模板的可视化增删配置,降低了权限管理员的rbac学习成本
  • 支持集群namespaces细粒度授权
  • 同时支持多个集群内用户自定义clusterrole的自动绑定能力
  • 支持RAM授权校验能力,同时可以根据当前授权配置帮助用户生成一个权限最小化的只读RAM策略模板方便管理员进行管理平面的RAM授权
  • 支持主账号和具有集群管理员角色子账号的分级授权配置
  • 支持所有集群维度的批量授权
  • 使用阿里云uid为RAM和RBAC授权的统一身份id,降低差异性;同时提供用户对应config凭证的一键下载能力
  • 提供了基于RAM的k8s集群联合认证支持工具

   管理平面的云平台资源授权和集群内应用资源的RBAC授权本来就是一个专业化和精细化的复杂操作,通过如上特性,阿里云容器服务希望能够帮助用户更好的理解二者的区别并降低整个授权流程的复杂度。

   在以上几个主流云厂商k8s集群已经具备的认证授权能力之外,下面的几个rbac相关的开源工具也是对整个授权流程的有效补充:

  • kubectl auth can-i - kubectl原生命令,查询指定用户是否有相应的请求权限
  • rakkess - 基于auth can-i,全局展示指定用户对资源的所有操作权限
  • kubectl-who-can - 用于查询哪些用户在该集群中有指定操作的权限
  • rbac-lookup - 查询指定用户的所有RBAC绑定权限
  • RBAC-manager - 通过CRD的方式管理用户对应的所有绑定,同时支持在满足label selectors的ns中自动配置绑定
相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
6月前
|
监控 安全 UED
通过OAuth实现企业监控管理软件的安全认证流程
企业监控管理软件在当前信息时代中扮演着至关重要的角色,但随之而来的安全隐患也日益突出。为了保护用户数据和确保系统的安全性,采用OAuth(开放授权)协议是一种理想的选择。OAuth提供了一种安全而灵活的身份验证方式,适用于各种网络应用和服务。本文将深入探讨如何通过OAuth实现企业监控管理软件的安全认证流程,并通过代码示例演示关键步骤。
285 1
《阿里云产品手册2022-2023 版》——应用身份服务 IDaaS
《阿里云产品手册2022-2023 版》——应用身份服务 IDaaS
168 0
|
安全 网络安全 数据安全/隐私保护
《阿里云云通信短信服务安全白皮书》——安全合规——二、 能力认证
《阿里云云通信短信服务安全白皮书》——安全合规——二、 能力认证
150 0
|
安全 API 网络安全
《阿里云云通信短信服务安全白皮书》——安全架构——八、账户安全
《阿里云云通信短信服务安全白皮书》——安全架构——八、账户安全
101 0
|
6月前
|
移动开发 JavaScript Java
钉钉账号免登体系(SSO)接入指南
如果你正在规划一个社区型产品、论坛、博客、或其他开放性Web站点,需要在登录用户之间形成互动性;或者正在对接政府机构、酒店大堂、药房门店等,需要访客先登记后进入;抑或正在设计企业内部系统,不想对接繁琐的iDaaS,但又需要记录和识别访问者的身份,那么,钉钉账号免登或许是你想要的东西,这篇文章应该正好也可以帮到你;本文尽量从初级开发者的角度来讲讲,钉钉账号免登体系的接入方法。
1851 0
钉钉账号免登体系(SSO)接入指南
企业支付宝授权认证操作步骤
本文档介绍企业支付宝授权认证操作步骤。
535 0
|
存储 运维 安全
如何做好统一身份认证账号管理及集成
传统统一身份认证系统的建设存在众多的问题,使设计实现复杂化,管理复杂化,集成复杂化。我们今天将详细讨论下统一身份认证账号设计的几个相关问题
2535 1
如何做好统一身份认证账号管理及集成
EMQ
|
存储 安全 物联网
灵活多样认证授权,零开发投入保障 IoT 安全
本文将通过对EMQX客户端认证与授权机制以及5.0版本中相关优化的详细解析,为读者展示EMQX进行物联网安全保障的原理机制,帮助大家更好地使用这一功能构建更加安全可靠的物联网平台与应用。
EMQ
280 0
灵活多样认证授权,零开发投入保障 IoT 安全
|
负载均衡 Kubernetes 容器
统一认证中心 Oauth2 认证坑
统一认证Oauth2的认证完美填坑
统一认证中心 Oauth2 认证坑

相关产品

  • 容器服务Kubernetes版