kubernetes API 访问控制在阿里云容器服务(ACK)上的实践

简介: 提起K8s API的访问控制,很多同学应该都会想到RBAC,这是K8s用来做权限控制的方法,但是K8s对API的访问控制却不止于此,今天我们就来简单介绍下K8s的访问控制以及ACK如何利用这套方法提供便捷的访问控制管理 访问控制简要说明 控制流程如上图所示,我们今天关注点在前两步,也就是图中的Au.

提起K8s API的访问控制,很多同学应该都会想到RBAC,这是K8s用来做权限控制的方法,但是K8s对API的访问控制却不止于此,今天我们就来简单介绍下K8s的访问控制以及ACK如何利用这套方法提供便捷的访问控制管理

访问控制简要说明

访问控制
控制流程如上图所示,我们今天关注点在前两步,也就是图中的AuthenticationAuthorization

Authentication做的是身份校验,Authentication支持的方法包括X509 Client Certs、Password、Plain Tokens、Bootstrap Tokens 和 JWT Tokens,今天我们要实践的就是X509 Client Certs校验方式

API server启动时传入--client-ca-file=SOMEFILE即可启用证书校验,参数指定的文件中必须包含至少一个CA证书用于校验传入的客户端证书。
验证通过后,证书中的common name(CN)字段会作为请求的username,organization(O)字段作为请求的group

Authorization做的是授权鉴定,一个请求通过Authentication后,会带着一个user和group,Authorization做的就是判断请求的方法(verb)和对象(object)是否在user和group的权限范围内;从1.8版本之后,RBAC模式进入stable状态,也是ACK默认启用的鉴权方式,RBAC模块会通过role/clusterrole和rolebinding/clusterrolebinding来鉴定请求所关联的user和group是否有操作的权限

下面我们通过操作来看下ACK上是如何做这些事的

环境准备

kubernetes

可以通过容器服务管理控制台非常方便地快速创建 Kubernetes 集群。

一个授予集群权限的子账号

子账号绑定的操作请参考这里

验证

我们按照上面的步骤操作,给子账号绑定default空间下的开发人员角色rbac_1

登录子账号,在集群的详情页找到kubeconfig的信息,复制其中的user.client-certificate-data字段,执行下面的命令

echo $CERTIFICATE | base64 -D > test.crt
openssl x509 -in test.crt -noout -text

会看到类似下面的输出

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 980377 (0xef599)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: O=cb4541f68933d4927b445b1eec47ce8b6, OU=default, CN=cb4541f68933d4927b445b1eec47ce8b6
        Validity
            Not Before: Apr 24 08:19:00 2019 GMT
            Not After : Apr 23 08:24:49 2022 GMT
        Subject: O=system:users, OU=, CN=232157355171679750
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (1024 bit)
        ...

看证书的subject字段,O=system:users CN=232157355171679750,表示使用这个证书作为身份校验的请求,在服务端看来,user是232157355171679750,group是system:users

接下来我们继续看这个user和group在集群中被赋予的权限

~ kubectl get rolebinding
NAME                                     AGE
232157355171679750-default-rolebinding   10s

~ kubectl get rolebinding 232157355171679750-default-rolebinding -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  ...
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cs:ns:dev
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: "232157355171679750"

可以看到user 232157355171679750被绑定了cs:ns:dev这个集群角色,可以操作许多资源,但是都被限制在default这个namespace下(不能查看node,因为node是跨namespace的资源),因为给这个user绑定是通过rolebinding来做的,是受namespace的约束的(kubectl describe clusterrole cs:ns:dev即可看到这个子账号被授予的所有权限)

我们再给账号扩大一些权限,这次给他绑定整个集群的管理员角色rbac_2

然后我们就会发现刚才的rolebinding已经被删除了

~ kubectl get rolebinding
No resources found.

因为这次绑定是整个集群范围内的,所以产生的是clusterrolebinding

~ kubectl get clusterrolebinding
NAME                                                   AGE
232157355171679750-clusterrolebinding                  3s

可以用上面的方法继续查看集群管理员角色下的所有权限

但是集群管理员并不是权限最高的角色,权限最高的角色是自定义列表中的cluster-admin,这是kubernetes集群启动后内置的角色,也是主账号创建集群后生成的config文件中绑定的角色

角色和权限的选择

既然kubernetes中内置了许多的role和clusterrole,那我们该如何选择呢?又如何判断当前的角色是否满足了需求呢?

还好kubectl已经提供了对应的命令来帮助我们快速判断权限是否充分

kubectl auth can-i <verb> <resource> [<resourceName>]

我们还是以一个被绑定了集群管理员的角色为例,下面的kubectl命令均是使用了对应的config文件

~ kubectl auth can-i delete no
yes

~ kubectl auth can-i drain no
no - no RBAC policy matched

~ kubectl auth can-i taint no
no - no RBAC policy matched

~ kubectl auth can-i cordon no
no - no RBAC policy matched

~ kubectl auth can-i label no
no - no RBAC policy matched

~ kubectl auth can-i delete pv
yes

~ kubectl auth can-i delete pvc
yes

我们看到这个角色的可以删除nodepvpvc,但是不能对nodedraintaintcordonlabel,可以利用这个工具快速定位操作失败是否和权限有关

总结

ACK将阿里云上的子账号系统和kubernetes本身的访问控制非常平滑的连接在一起,对用户非常友好,不需要花太多的精力在RBAC的细节上,极大的降低了使用门槛

目录
相关文章
|
6月前
|
JSON 安全 Java
API 一键转换 MCP 服务!Higress 助今日投资快速上线 MCP 市场
今日投资的技术负责人介绍了如何通过Higress MCP 市场完善的解决方案,快捷地将丰富的金融数据 API 转化为 MCP 工具,帮助用户通过 MCP 的方式非常轻松地调用专业金融数据,自由快速地构建自己的金融大模型应用。
873 23
|
5月前
|
监控 供应链 搜索推荐
电商数据开发实践:深度剖析1688商品详情 API 的技术与应用
在电商数字化转型中,数据获取效率与准确性至关重要。本文介绍了一款高效商品详情API,具备全维度数据采集、价格库存管理、多媒体资源获取等功能,结合实际案例探讨其在电商开发中的应用价值与优势。
|
5月前
|
前端开发 Java API
利用 Spring WebFlux 技术打造高效非阻塞 API 的完整开发方案与实践技巧
本文介绍了如何使用Spring WebFlux构建高效、可扩展的非阻塞API,涵盖响应式编程核心概念、技术方案设计及具体实现示例,适用于高并发场景下的API开发。
482 0
|
6月前
|
JSON API UED
运营商二要素验证 API:核验身份的一致性技术实践(Python示例)
随着线上业务快速发展,远程身份核验需求激增。运营商二要素验证API通过对接三大运营商实名数据,实现姓名、手机号、身份证号的一致性校验,具备权威性高、实时性强的优势,广泛应用于金融、电商、政务等领域。该接口支持高并发、低延迟调用,结合Python示例可快速集成,有效提升身份认证的安全性与效率。
681 0
|
7月前
|
缓存 监控 搜索推荐
电商生态协同的关键:API接口在电商数据对接中的应用与实践
电商数据对接API接口是连接电商平台与外部系统的智慧桥梁,通过标准化协议实现商品管理、订单处理、支付结算、物流追踪及数据分析等全链路支持。本文从核心功能、对接流程、应用场景和优化策略四个方面解析其技术逻辑与实践路径。API接口助力店铺管理自动化、精准营销与跨境电商全链路管理,同时通过安全防护、性能调优与合规管理提升效能,推动电商行业向智能化、高效化发展。
|
6月前
|
自然语言处理 供应链 前端开发
深度解析与技术实践:高效调用淘宝商品评论API的策略与代码实现
本文深入解析淘宝开放平台商品评论接口(Taobao.item_review),涵盖接口功能、调用逻辑与实战代码,助力开发者高效获取用户评价数据,提升电商数据分析能力。
|
8月前
|
机器学习/深度学习 JSON 算法
京东拍立淘图片搜索 API 接入实践:从图像识别到商品匹配的技术实现
京东拍立淘图片搜索 API 是基于先进图像识别技术的购物搜索接口,支持通过上传图片、URL 或拍摄实物搜索相似商品。它利用机器学习和大数据分析,精准匹配商品特征,提供高效、便捷的搜索体验。接口覆盖京东海量商品资源,不仅支持外观、颜色等多维度比对,还结合用户行为数据实现智能推荐。请求参数包括图片 URL 或 Base64 编码,返回 JSON 格式的商品信息,如 ID、价格、链接等,助力消费者快速找到心仪商品,满足个性化需求。
594 18
|
7月前
|
人工智能 自然语言处理 API
电商API技术文档编写规范白皮书:方法论与行业实践
本文系统阐述电商API接口文档的编写规范与最佳实践,涵盖结构设计、技术语言、开发者体验、版本控制及质量保障等方面,助力企业提升开发效率,构建开放共赢的电商生态。
|
4月前
|
供应链 安全 API
唯品会:利用银行转账API实现企业采购对公支付的技术实践
企业采购支付面临合规、效率与对账难题。唯品会通过银行API实现银企直连,构建安全高效对公支付系统,支持ISO 20022标准与多重风控,支付耗时从72小时降至90秒,错误率下降98%,推动供应链数字化升级。(236字)
452 1
|
4月前
|
算法 API 数据安全/隐私保护
深度解析京东图片搜索API:从图像识别到商品匹配的算法实践
京东图片搜索API基于图像识别技术,支持通过上传图片或图片URL搜索相似商品,提供智能匹配、结果筛选、分页查询等功能。适用于比价、竞品分析、推荐系统等场景。支持Python等开发语言,提供详细请求示例与文档。

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版
  • 推荐镜像

    更多