访问控制1

news2025/1/12 1:51:43

主要内容

  1. ServiceAccount
  2. Role和ClusterRole

预备知识

用户使用kubectl、客户端库或者rest请求访问kubernetes
API。人类用户和kubernetes服务账户都可以被鉴权访问API。当请求达到API时,它会经历多个阶段,如下图所示:

在这里插入图片描述

访问控制是一种机制,用于限制对系统、资源或数据的访问权限。它是信息安全的重要组成部分,可以确保只有经过授权的用户或系统可以访问敏感信息或执行特定操作。

访问控制通常涉及以下几个方面:

  1. 身份验证:验证用户的身份以确保他们是合法的用户。常见的身份验证方式包括用户名和密码、指纹识别、智能卡等。

  2. 授权:一旦用户通过身份验证,系统需要确定他们有权访问哪些资源或执行哪些操作。授权可以基于用户的角色、组织结构、访问策略等进行。

  3. 权限管理:权限管理确定了用户在系统中可以执行的具体操作。这些权限可以是读取、写入、修改、删除等。权限管理通常与角色管理和访问策略相结合,以确保用户只能执行他们被授权的操作。

  4. 审计和日志记录:审计和日志记录是跟踪和记录用户访问行为的过程。它可以用于监控系统的安全性,检测潜在的安全威胁,并提供法律证据。

访问控制在各种系统和领域中都有广泛的应用。例如,在计算机网络中,访问控制可以用于限制对网络资源的访问。在操作系统中,访问控制可以用于限制对文件和目录的访问。在数据库中,访问控制可以用于限制对敏感数据的访问。

访问控制的主要目标是确保系统的机密性、完整性和可用性。机密性确保只有授权用户可以访问敏感信息,完整性确保只有授权用户可以修改数据,可用性确保授权用户可以正常使用系统。

总之,访问控制是一种重要的安全机制,它可以保护系统和数据免受未经授权的访问和潜在的安全威胁。通过合理的身份验证、授权、权限管理和审计,可以建立一个安全可靠的访问控制系统。


一.ServiceAccount

Service account 是为了方便 Pod 里面的进程调用 Kubernetes API 或 其他外部服务而设计的。每个 namespace 都会自动创建一个 default service account.
Token controller 检测 service account 的创建,并为它们创建 secret(token)并与APIServer 进行交互。
在创建 Pod 时,如果没有指定服务账户,Pod 会被指定给命名空间中的 default 服务账户。container 启动后都会挂载该 service account 的 token 和 ca.crt 到如下位置:
/var/run/secrets/kubernetes.io/serviceaccount/ .
pod 和 apiserver 之间进行通信的账号称为 serviceAccountName.

ServiceAccount是Kubernetes中用于身份验证和授权的机制。它为Pod提供了一组凭据,用于与Kubernetes API服务器进行通信,并访问其他Kubernetes资源。

ServiceAccount是一种Kubernetes对象,可以在Kubernetes集群中创建和管理。每个ServiceAccount都有一个唯一的名称和一个与之关联的Secret,其中包含了用于身份验证和授权的凭据。Pod可以通过挂载ServiceAccount中的Secret来获取这些凭据,以便与Kubernetes API服务器进行通信。

ServiceAccount可以用于以下场景:

  1. 访问Kubernetes API:Pod可以使用ServiceAccount中的凭据来与Kubernetes API服务器进行通信,例如创建、删除、修改Kubernetes资源。

  2. 访问其他资源:Pod可以使用ServiceAccount中的凭据来访问其他Kubernetes资源,例如Secret、ConfigMap、PersistentVolumeClaim等。

  3. 访问外部资源:Pod可以使用ServiceAccount中的凭据来访问外部资源,例如云服务、数据库等。

ServiceAccount的用法如下:

  1. 创建ServiceAccount:可以使用kubectl命令或YAML文件创建ServiceAccount对象。

  2. 分配ServiceAccount:可以将ServiceAccount分配给Pod,以便Pod可以使用其中的凭据进行身份验证和授权。可以使用PodSpec中的serviceAccountName字段指定要使用的ServiceAccount。

  3. 挂载ServiceAccount中的Secret:可以在Pod中通过挂载ServiceAccount中的Secret来获取其中的凭据。可以使用volumeMounts字段指定要挂载的Secret。

  4. 配置RBAC:可以使用Role-Based Access Control(RBAC)来控制哪些ServiceAccount可以访问哪些资源。可以使用Role、ClusterRole、RoleBinding和ClusterRoleBinding对象来定义和管理RBAC规则。

总之,ServiceAccount是Kubernetes中用于身份验证和授权的重要机制。它为Pod提供了一组凭据,用于与Kubernetes API服务器进行通信,并访问其他Kubernetes资源。通过合理使用ServiceAccount和RBAC,可以建立一个安全可靠的Kubernetes集群。

1.示例:在一个名为acctests的namespace中,创建一个名为udbs的serviceAccount

代码如下(示例):
kubectl create namespace acctest
kubectl -n acctest create serviceaccount udbs
kubectl -n acctest get serviceaccounts udbs

在这里插入图片描述

kubectl -n acctest describe serviceaccounts udbs

在这里插入图片描述

2.解释

以下是对每个命令的详细解释:

1. `kubectl create namespace acctest`:这个命令创建了一个名为"acctest"的命名空间。命名空间是Kubernetes中用于隔离和组织资源的一种机制。

2. `kubectl -n acctest create serviceaccount udbs`:这个命令在"acctest"命名空间中创建了一个名为"udbs"的ServiceAccount。ServiceAccount是Kubernetes中用于身份验证和授权的机制。

3. `kubectl -n acctest get serviceaccounts udbs`:这个命令在"acctest"命名空间中获取名为"udbs"的ServiceAccount的详细信息。它会显示ServiceAccount的名称、创建时间和相关的Secret。

4. `kubectl -n acctest describe serviceaccounts udbs`:这个命令在"acctest"命名空间中获取名为"udbs"的ServiceAccount的详细描述。它会显示ServiceAccount的名称、创建时间、相关的Secret以及与之关联的权限。

这些命令的目的是在"acctest"命名空间中创建一个名为"udbs"的ServiceAccount,并获取它的详细信息和描述。这样可以验证ServiceAccount是否成功创建,并查看与之关联的Secret和权限。

二.Role和ClusterRole

Role和ClusterRole是Kubernetes中用于定义权限的对象。它们用于控制ServiceAccount对特定资源的访问权限。

Role用于在单个命名空间中定义权限,而ClusterRole用于在整个集群范围内定义权限。Role和ClusterRole可以与RoleBinding和ClusterRoleBinding对象一起使用,来将权限分配给ServiceAccount。

以下是Role和ClusterRole的详细解释及用法:

  1. Role(角色):

    • Role是Kubernetes中的一种对象,用于在单个命名空间中定义权限。
    • Role定义了一组规则(rules),每个规则指定了对特定资源的访问权限(例如:创建、读取、更新、删除)。
    • Role只能在其所属的命名空间中生效。
    • 可以使用kubectl命令或YAML文件创建Role对象。
    • RoleBinding对象用于将Role与ServiceAccount关联起来,从而将权限分配给ServiceAccount。
  2. ClusterRole(集群角色):

    • ClusterRole是Kubernetes中的一种对象,用于在整个集群范围内定义权限。
    • ClusterRole定义了一组规则(rules),每个规则指定了对特定资源的访问权限(例如:创建、读取、更新、删除)。
    • ClusterRole可以在所有命名空间中生效。
    • 可以使用kubectl命令或YAML文件创建ClusterRole对象。
    • ClusterRoleBinding对象用于将ClusterRole与ServiceAccount关联起来,从而将权限分配给ServiceAccount。

用法示例:

  1. 创建Role:
 apiVersion: rbac.authorization.k8s.io/v1
   kind: Role
   metadata:
     name: my-role
     namespace: my-namespace
   rules:
   - apiGroups: [""]
     resources: ["pods"]
     verbs: ["get", "list", "create", "delete"]

  1. 创建ClusterRole:
  apiVersion: rbac.authorization.k8s.io/v1
   kind: ClusterRole
   metadata:
     name: my-cluster-role
   rules:
   - apiGroups: [""]
     resources: ["pods"]
     verbs: ["get", "list", "create", "delete"]
  1. 创建RoleBinding:
 apiVersion: rbac.authorization.k8s.io/v1
   kind: RoleBinding
   metadata:
     name: my-role-binding
     namespace: my-namespace
   roleRef:
     kind: Role
     name: my-role
     apiGroup: rbac.authorization.k8s.io
   subjects:
   - kind: ServiceAccount
     name: my-service-account
     namespace: my-namespace
  1. 创建ClusterRoleBinding:
  apiVersion: rbac.authorization.k8s.io/v1
   kind: ClusterRoleBinding
   metadata:
     name: my-cluster-role-binding
   roleRef:
     kind: ClusterRole
     name: my-cluster-role
     apiGroup: rbac.authorization.k8s.io
   subjects:
   - kind: ServiceAccount
     name: my-service-account
     namespace: my-namespace

这些示例展示了如何创建Role、ClusterRole、RoleBinding和ClusterRoleBinding对象,并将权限分配给ServiceAccount。通过合理使用Role和ClusterRole,可以实现对Kubernetes资源的精确控制和权限管理。

1.在名为test的namespace中创建一个名为test-role的角色,以及创建一个名为test-clusterrole的集群角色。

代码如下(示例):
kubectl -n test create role --resource=pod --verb=get test-role
kubectl -n test delete role test-role

在这里插入图片描述

2.YAML方法

代码如下(示例):
cat > role.yml <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
 name: test-role
 namespace: test
rules:
- apiGroups:
 - ""
 resources:
 - pods
 verbs:
 - get
EOF
kubectl create -f role.yml
kubectl describe role -n test test-role

在这里插入图片描述

3.将创建的test-role角色绑定到serviceaccount的服务账号udbs

代码如下(示例):
kubectl -n test create rolebinding --role=test-role --serviceaccount=test:udbs udbs-binding
kubectl -n test describe rolebinding udbs-binding

在这里插入图片描述

4.测试权限

代码如下(示例):
kubectl -n test auth can-i create pods --as=system:serviceaccount:test:udbs
kubectl -n test auth can-i get pods --as=system:serviceaccount:test:udbs

在这里插入图片描述

5.解释

1. `kubectl -n test create role --resource=pod --verb=get test-role`:这个命令在"test"命名空间中创建一个名为"test-role"的Role对象。该Role对象的规则指定了对"pods"资源的"get"权限。

2. `kubectl -n test delete role test-role`:这个命令在"test"命名空间中删除名为"test-role"的Role对象。

3. `kubectl -n test create rolebinding --role=test-role --serviceaccount=test:udbs udbs-binding`:这个命令在"test"命名空间中创建一个名为"udbs-binding"的RoleBinding对象。该RoleBinding对象将"test-role"角色与"test:udbs" ServiceAccount关联起来。

4. `kubectl -n test describe rolebinding udbs-binding`:这个命令在"test"命名空间中获取名为"udbs-binding"的RoleBinding对象的详细描述信息。它会显示RoleBinding对象的名称、关联的Role、关联的ServiceAccount等信息。

5. `kubectl -n test auth can-i create pods --as=system:serviceaccount:test:udbs`:这个命令用于检查"test:udbs" ServiceAccount是否具有在"test"命名空间中创建pods的权限。它会返回一个布尔值,指示是否具有该权限。

6. `kubectl -n test auth can-i get pods --as=system:serviceaccount:test:udbs`:这个命令用于检查"test:udbs" ServiceAccount是否具有在"test"命名空间中获取pods的权限。它会返回一个布尔值,指示是否具有该权限。

这些命令的目的是创建和管理Role、RoleBinding对象,并验证ServiceAccount是否具有特定资源的特定权限。通过这些命令,可以实现对ServiceAccount的权限分配和权限验证。

总结

以上是今天要讲的内容,学到了访问控制,包括 ServiceAccount,Role和ClusterRole。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1128075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3+ts父子组件以及单页面刷新的方法

父子组件刷新页面&#xff1a; 父组件定义函数reset&#xff0c;子组件props接收 示例一&#xff1a; 父组件 //ts删减部分&#xff1a; import { deleteCompanyById, findAllCompanys } from /api/company import { usePureFetch } from /nexus/useFetch import type Compa…

2023 | 组蛋白乳酸化如何影响免疫、自噬最新发现!

乳 酸 乳酸是人体循环系统最丰富的代谢产物之一。乳酸由糖酵解的终产物丙酮酸盐通过乳酸脱氢酶&#xff08;LDH&#xff09;产生。有氧条件下&#xff0c;丙酮酸盐可以穿梭进入线粒体&#xff0c;以促进生物合成途径和ATP产生。当氧气不足时&#xff0c;丙酮酸转化为乳酸&…

asp.net文档管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net文档管理系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言开发 asp.net文档管理系统 二、功能介绍 (1…

如何系列 如何玩转远程调用之OpenFegin+SpringBoot(非Cloud)

文章目录 简介原生Fegin示例基础契约日志重试编码器/解码器自定义解码器 请求拦截器响应拦截器表单文件上传支持错误解码器断路器指标metrics客户端 配合SpringBoot&#xff08;阶段一&#xff09;配合SpringBoot&#xff08;阶段二&#xff09;1.EnableLakerFeignClients2.Lak…

spring cloud Eureka集群模式搭建(IDEA中运行)《一》

spring cloud Eureka集群模式搭建&#xff08;IDEA中运行&#xff09; 新建springboot 工程工程整体目录配置文件IDEA中部署以jar包形式启动总结 新建springboot 工程 新建一个springboot 工程&#xff0c;命名为&#xff1a;eureka_server。 其中pom.xml文件为&#xff1a; …

Mask Free VIS笔记(CVPR2023 不需要mask标注的实例分割)

paper: Mask-Free Video Instance Segmentation github 一般模型学instance segmentation都是要有mask标注的&#xff0c; 不过mask标注既耗时又枯燥&#xff0c;所以paper中仅用目标框的标注来实现实例分割。 主要针对视频的实例分割。 之前也有box-supervised实例分割&…

去除QPushButton边框上的白点

使用border:3px solid #35FFFAF0; 出现上面一行border上白点。 使用border:3px solid rgb(89,87,84); 没有白点。

1.java环境搭建与eclipse安装和配置

JDK&#xff08;JAVA开发工具包&#xff09;&#xff1a;提供给java开发人员使用的&#xff0c;其中包含了java的开发工具&#xff0c;也包括了JRE所以安装了JDK,就不用单独安装JTE了&#xff0c;其中的开发工具&#xff1a;编译工具(javac.exe) 打包工具(jar.exe)等JRE(JAVA运…

什么年代了还在手工写接口测试文档吗?

01 前言 接口文档&#xff0c;顾名思义就是对接口说明的文档。好的接口文档包含了对接口URL&#xff0c;参数以及输出内容的说明&#xff0c;我们参照接口文档就能编写出一个个的测试用例。而且接口文档详细的话&#xff0c;测试用例编写起来就会比较简单&#xff0c;不容易…

MES 漫谈123

我们从Know-How出发 Know&#xff1a;什么是 MES 制造执行系统MES是一套工具&#xff0c;旨在支持产品达到预期的质量、安全和合规水平&#xff0c;以及生产的预期性能水平。MES是支持工厂质量标准和企业卓越运营计划的关键要素。在工厂层面&#xff0c;MES不是通过“最后一天…

Telegram 引入了国产小程序容器技术

Telegram 宣布为其开发者提供了一项“能够在 App 中运行迷你应用”的新功能&#xff08; 迷你应用即 Mini App&#xff0c;下文中以“小程序”代替&#xff09;。 在一篇博客文章中&#xff0c;Telegram 的开发者写到“小程序提供了可替代互联网网站的灵活界面&#xff08;cre…

DataX 数据迁移

1、前期准备 Linux系统 Python&#xff08;最好是2&#xff09; Jdk 1.8以上 2、安装Python2 --更新软件包 sudo apt update --安装python2 sudo apt install python2 --查看python版本 python2 --version 3、下载DataX Linux下载DataX wget http://datax-opensource.o…

攻防世界-Ph0en1x-100

第一次独立使用frida解安卓题&#xff0c;没分析代码 Steps 使用jadx打开apk分析主要代码 最主要的就是这个if判断了&#xff0c;安装apk后&#xff0c;有一个输入框和一个check按钮&#xff0c;会根据输入的结果Toast&#xff1a;Success or Failed。 getSecret(getFlag()).eq…

深入了解JavaScript中的AJAX和HTTP请求

在现代Web开发中&#xff0c;AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;和HTTP请求被广泛应用于实现动态交互式网页。本文将深入探讨AJAX的概念、工作原理以及使用方法。 什么是AJAX&#xff1f; AJAX是一种利用JavaScript和HTTP请求与服务器进行异步通信的…

基于公开数据集,5 分钟生成个性可视化数据报告

云布道师 简介&#xff1a; 本次活动将基于内置电商、广告、出行、汽车、国内生产总值等公开数据集&#xff0c;通过DataWorks 与 MaxCompute 搭建可视化数据报告。 活动时间 2023 年 10 月 8 日-2023 年 11 月 10 日 参赛者首先前往参赛页面领取产品免费资源&#xff0c;依…

Redis基于布隆过滤器解决缓存穿透问题(15)

Redis基于布隆过滤器解决缓存穿透问题 1.布隆过滤器基本介绍2.布隆过滤器的优缺点3.布隆过滤器的原理4.缓存穿透问题5.解决Redis缓存穿透问题 1.布隆过滤器基本介绍 布隆过滤器适用于判断某个数据是否在集合中存在&#xff0c;可能存在一定的误判&#xff0c; Bloom Filter基本…

教育行业如何通过互联网推广品牌?媒介盒子告诉你

近年来&#xff0c;国民对教育的重视程度日趋上升&#xff0c;教育行业也日益壮大&#xff0c;数字化时代的来临也使教育行业推广品牌的方式更加多样化&#xff0c;接下来媒介盒子就和大家分享&#xff1a;教育行业如何通过互联网推广品牌。 一、 发布软文进行品牌推广 数字…

docker-compose安装ES7.14和Kibana7.14(有账号密码)

一、docker-compose安装ES7.14.0和kibana7.14.0 1、下载镜像 1.1、ES镜像 docker pull elasticsearch:7.14.0 1.2、kibana镜像 docker pull kibana:7.14.0 2、docker-compose安装ES和kibana 2.1、创建配置文件目录和文件 #创建目录 mkdir -p /home/es-kibana/config mkdir…

“它经济”盛行,宠物食品行业如何做好口碑营销

口碑营销能够为企业带来潜在优势&#xff0c;让企业实现可持续发展&#xff0c;好的口碑能够提升品牌的传播速度&#xff0c;作为宠物食品行业&#xff0c;更需要营造良好口碑&#xff0c;才能获得源源不断的客户&#xff0c;那么如何打造口碑呢&#xff1f;数字化时代下&#…

前端请求后台接口失败处理逻辑

前后分离项目&#xff0c;前端为uni-app&#xff08;vue2&#xff09;&#xff0c;后台为java 后台api设置存在问题&#xff0c;部分公共接口为开放非登录用户访问权限 导致前台打开首页后立即跳转到登录提示页 怀疑是开了uni-app开发代理服务器&#xff0c;导致访问的代理服务…