1.Go 每日一库之 casbin
2.Kubernetes 证书详解(鉴权)
3.云原生安全系列-RBAC配置不当风险
4.Kubernetes Cluster Architectureç¬è®°4-Cloud Controller Manager
5.K8S进阶—K8S认证与授权
6.Apache Ranger整合Hadoop、源码Hive、源码Spark实现权限管理
Go 每日一库之 casbin
权限管理是源码系统开发中不可或缺的部分。为避免重复开发,源码提高效率和降低成本,源码Casbin 库应运而生。源码今日头条小程序源码Casbin 是源码一款功能强大且高效的访问控制库,支持多种访问控制模型,源码包括 ACL/RBAC/ABAC 等,源码实现灵活的源码访问权限控制。该库兼容多种编程语言,源码如 Go、源码Java、源码Node、源码PHP、源码Python、.NET、Rust 等,一次学习即可跨项目应用。
使用 Casbin 极为便捷,我们以 Go 语言为例。首先,初始化代码并安装 Casbin 库。然后,权限管理的核心在于策略的定义与匹配。Casbin 将策略抽象为一个基于 PERM(Policy、Effect、Request、Matchers)模型的配置文件,通过修改配置文件即可轻松切换或更新授权机制。
权限管理包括三个主要元素:Policy(策略)、Request(请求)和 Matcher(匹配器)。Policy 定义了具体的规则,Request 是对访问请求的抽象,Matcher 会将请求与策略一一匹配,生成多个匹配结果,而 Effect 根据这些结果决定是否允许请求。
接下来,让我们通过实例深入理解 Casbin 的使用。首先,编写模型文件以定义权限要素,如主体、对象和动作。然后,npmax源码通过策略文件(如 policy.csv)定义具体权限,如主体对对象执行特定动作的授权情况。使用 Casbin 库时,只需创建一个 Enforcer 对象,加载模型文件和策略文件,然后通过 Enforce 方法检查权限。运行程序后,请求必须完全匹配某条策略才能通过。
实际应用中,主体、对象和动作的名称可以根据需要灵活调整,关键在于保持前后一致。此外,Casbin 支持 ACL 模型、RBAC 模型、ABAC 模型以及多层角色模型,满足不同场景的权限需求。
对于多角色系统,Casbin 支持多个 RBAC 系统并存,每个系统包含用户、角色和资源,权限控制更为灵活。同时,Casbin 支持角色的继承,如高级开发者可以继承普通开发者的所有权限,并额外定义特定权限。角色还可以是特定领域或租户的成员,实现更细粒度的权限管理。
ABAC 模型则适用于实现动态权限控制,如基于属性的访问控制(ABAC),允许在不同时间段对资源实施不同权限。Casbin 提供丰富的函数支持,包括内置的 URL 路径匹配函数、正则表达式匹配和 IP 地址匹配,以及自定义函数功能,灵活满足复杂权限管理需求。
Casbin 还支持在代码中动态初始化模型,而非仅依赖文件存储,并支持多种第三方存储方式,包括 MySQL、MongoDB、Redis 和 Etcd 等,实现高效的19)源码数据存储与管理。模型和策略文件的灵活存储与管理,使 Casbin 成为强大、高效且通用的访问控制库。
总结而言,Casbin 提供了一套简洁、强大的访问控制解决方案,适用于多种场景和编程语言,是值得深入学习和应用的工具。希望本文提供的内容能帮助您更好地理解 Casbin 的功能与使用方法,以及在实际项目中如何灵活应用。
Kubernetes 证书详解(鉴权)
Kubernetes中的证书在鉴权机制中扮演关键角色,通过理解其CN(Common Name)、O(Organization)等属性,来区分用户与组,实现访问控制。以Kube-apiserver为例,通过TLS + RBAC模式下的认证流程,允许用户以三种方式访问:直接使用TLS证书进行认证,以及RBAC鉴权实现权限管理。其中CN通常标识用户身份,如“system:node:master----”,而O则表示归属的组名如“system.nodes”。
Kubectl、Kube-scheduler、Kube-controller-manager等同样通过KubeConfig进行认证,并绑定到相应的用户组,如“system:masters”以赋予操作集群的权限。Kubelet作为集群节点的组件,其认证流程与Kube-apiserver基本相似,同样依赖CN与O的标识实现RBAC鉴权。值得一提的是,实际应用中,Kubelet的鉴权方式已基于Node Authorizer进行调整,确保其只能访问所在节点资源而无需全局权限。
ServiceAccount则允许Pod根据自身配置访问Kube-apiserver,其鉴权依据的不再是用户组,而是通过与之绑定的Role和RoleBinding来实现资源访问权限的控制。通过这种方式,Kubernetes能够灵活地管理访问权限,为不同的组件与服务提供相应的资源访问控制。
综上所述,Kubernetes通过CN、O等字段标识用户与组,RemDebug源码结合TLS认证与RBAC机制,实现多层次的安全访问控制,确保集群内部组件能够以恰当的权限访问资源。掌握证书内容与RBAC原理是理解Kubernetes安全架构的关键,通过实践部署Kubernetes集群,结合手动签发证书,可以深化对此知识体系的理解。
云原生安全系列-RBAC配置不当风险
云原生安全系列:深入理解RBAC配置不当的风险 RBAC(基于角色的访问控制)是一种核心安全机制,旨在确保用户只能访问与其角色相符的资源。然而,不当的配置可能导致潜在风险。本文将探讨RBAC的基本原理,以及在Kubernetes(K8s)中如何应用,同时揭示一些常见的配置漏洞,以增强对安全性的认识。 在企业环境中,如大型公司内部管理系统,通过创建如HR、财务和项目经理等角色,分配相应的权限给员工,以限制访问。尽管这是确保信息安全的基础,但若权限设置不当,攻击者可能借此突破。例如,一个拥有创建Pod权限的Pod若配置不严,可能被滥用创建危险容器,导致逃逸攻击或整个集群控制。 K8s中,ServiceAccount与Pod的结合至关重要。攻击者可能通过Web应用获取权限,如果没有正确限制,他们能查看或操作敏感数据。比如,如果Pod有获取secrets权限,攻击者可以窃取高权限令牌,执行恶意操作。此外,impersonate权限允许模拟其他用户,可能导致权限滥用。 实践中,应警惕以下几种常见错误配置:创建Pod权限可能导致反弹shell攻击,通过特权容器逃逸到Node。skynet 源码'
list secrets权限允许获取其他敏感token,可执行危险操作。
impersonate权限可能被滥用,切换到高权限用户。
get secrets权限虽然限制了列表,但通过知道完整名称仍可访问敏感信息。
理解并正确配置RBAC是保障K8s集群安全的关键。务必谨慎处理权限,确保每个角色和用户只能在限定范围内操作,以防止潜在的安全漏洞。Kubernetes Cluster Architectureç¬è®°4-Cloud Controller Manager
使ç¨äºåºç¡è®¾æ½ææ¯ï¼ä½ å¯ä»¥å¨å ¬æäºãç§æäºæè æ··åäºç¯å¢ä¸è¿è¡ Kubernetesã Kubernetes çä¿¡æ¡æ¯åºäºèªå¨åçãAPI 驱å¨çåºç¡è®¾æ½ï¼åæ¶é¿å ç»ä»¶é´ç´§å¯è¦åãç»ä»¶ cloud-controller-manager æ¯æäºæ§å¶å¨ç®¡çå¨ï¼ äºæ§å¶å¨ç®¡çå¨æ¯æåµå ¥ç¹å®äºçæ§å¶é»è¾çæ§å¶å¹³é¢ç»ä»¶ã äºæ§å¶å¨ç®¡çå¨ä½¿å¾ä½ å¯ä»¥å°ä½ çé群è¿æ¥å°äºæä¾åç API ä¹ä¸ï¼ 并å°ä¸è¯¥äºå¹³å°äº¤äºçç»ä»¶åä¸ä½ çé群交äºçç»ä»¶å离å¼æ¥ã
éè¿å离 Kubernetes ååºå±äºåºç¡è®¾ç½®ä¹é´çäºæä½æ§é»è¾ï¼ äºæ§å¶å¨ç®¡çå¨ç»ä»¶ä½¿äºæä¾åè½å¤ä»¥ä¸åäº Kubernetes 主项ç®çæ¥è°åå¸æ°ç¹å¾ã
cloud-controller-manager ç»ä»¶æ¯åºäºä¸ç§æ件æºå¶æ¥æé çï¼ è¿ç§æºå¶ä½¿å¾ä¸åçäºååé½è½å°å ¶å¹³å°ä¸ Kubernetes éæã
äºæ§å¶å¨ç®¡çå¨ä»¥ä¸ç»å¤å¯æ¬çè¿ç¨éåçå½¢å¼è¿è¡å¨æ§å¶é¢ä¸ï¼é常表ç°ä¸º Pod ä¸ç容å¨ãæ¯ä¸ª cloud-controller-manager å¨åä¸è¿ç¨ä¸å®ç°å¤ä¸ªæ§å¶å¨ã
说æï¼ä½ ä¹å¯ä»¥ç¨ Kubernetesæ件çå½¢å¼èä¸æ¯æ§å¶é¢ä¸çä¸é¨åæ¥è¿è¡äºæ§å¶å¨ç®¡çå¨ã
äºæ§å¶å¨ç®¡çå¨ä¸çæ§å¶å¨å æ¬ï¼
èç¹æ§å¶å¨è´è´£å¨äºåºç¡è®¾æ½ä¸å建äºæ°æå¡å¨æ¶ä¸ºä¹æ´æ°èç¹ï¼Nodeï¼å¯¹è±¡ã èç¹æ§å¶å¨ä»äºæä¾åè·åå½åç§æ·ä¸ä¸»æºçä¿¡æ¯ãèç¹æ§å¶å¨æ§è¡ä»¥ä¸åè½ï¼
æäºäºé©±å¨å®ç°ä¸ï¼è¿äºä»»å¡è¢«ååå°ä¸ä¸ªèç¹æ§å¶å¨åä¸ä¸ªèç¹çå½å¨ææ§å¶å¨ä¸ã
Route æ§å¶å¨è´è´£éå½å°é ç½®äºå¹³å°ä¸çè·¯ç±ï¼ä»¥ä¾¿ Kubernetes é群ä¸ä¸åèç¹ä¸ç 容å¨ä¹é´å¯ä»¥ç¸äºéä¿¡ã
åå³äºäºé©±å¨æ¬èº«ï¼è·¯ç±æ§å¶å¨å¯è½ä¹ä¼ä¸º Pod ç½ç»åé IP å°ååã
æå¡ï¼Serviceï¼ä¸åæ§çè´è½½åè¡¡å¨ã IP å°åãç½ç»å è¿æ»¤ãç®æ å¥åº·æ£æ¥çäºåºç¡è®¾æ½ç»ä»¶éæã æå¡æ§å¶å¨ä¸äºé©±å¨ç API 交äºï¼ä»¥é ç½®è´è½½åè¡¡å¨åå ¶ä»åºç¡è®¾æ½ç»ä»¶ã ä½ æå建ç Service èµæºä¼éè¦è¿äºç»ä»¶æå¡ã
æ¬èåå«è®²è¿°äºæ§å¶å¨ç®¡çå¨ä¸ºäºå®æèªèº«å·¥ä½è产çç对åç±» API 对象ç访é®éæ±ã
èç¹æ§å¶å¨åªæä½ Node 对象ãå®éè¦è¯»ååä¿®æ¹ Node 对象çå®å ¨è®¿é®æéã
v1/Node :
è·¯ç±æ§å¶å¨ä¼çå¬ Node 对象çå建äºä»¶ï¼å¹¶æ®æ¤é 置路ç±è®¾æ½ã å®éè¦è¯»å Node 对象ç Get æéã
v1/Node :
æå¡æ§å¶å¨çæµ Service 对象ç CreateãUpdate å Delete äºä»¶ï¼å¹¶é ç½® 对åºæå¡ç Endpoints 对象ã 为äºè®¿é® Service 对象ï¼å®éè¦ ListãWatch 访é®æéï¼ä¸ºäºæ´æ° Service 对象 å®éè¦ Patch å Update 访é®æéã 为äºè½å¤é ç½® Service 对åºç Endpoints èµæºï¼å®éè¦ CreateãListãGetãWatch å Update ç访é®æéã
v1/Service :
äºæ§å¶å¨ç®¡çå¨çå®ç°ä¸ï¼å ¶æ ¸å¿é¨åéè¦å建 Event 对象ç访é®æé以å å建 ServiceAccount èµæºä»¥ä¿è¯æä½å®å ¨æ§çæéã
v1/Event :
v1/ServiceAccount :
ç¨äºäºæ§å¶å¨ç®¡çå¨ RBACç ClusterRole å¦ä¸ä¾æ示ï¼
K8S进阶—K8S认证与授权
Kubernetes作为现代容器编排系统,其安全机制至关重要。本文将深入探讨Kubernetes中的认证、授权以及准入控制机制。 **Kubernetes的安全控制主要由三部分组成:身份认证(Authentication)、鉴权(Authorization)以及准入控制(Admission Control)。** **准入控制** 是一种集群级别的安全控制机制,用于拦截请求并进行权限检查,确保只有经过验证的请求才能访问Kubernetes资源。 **为什么需要准入控制?** 以**NodeRestriction**为例,它限制了节点之间以及节点与非节点资源之间的通信,保障了集群的安全性。 **如何使用准入控制?** 通过在API Server上启用特定的准入控制器,如NodeRestriction插件,可以实现对节点间的访问限制。二、kubectl的认证与授权
**kubectl** 是Kubernetes的命令行界面工具,其认证与授权过程紧密关联。**如何配置kubeconfig文件**?文件中的信息是kubectl与Kubernetes集群进行通信的基础,通常在运行`kubeadm init`后自动生成。 **kubectl的认证过程**:认证成功后,会提取出用户所属的组和用户名,这些信息将用于后续的授权阶段。 **RBAC的引入**:通过设置`--authorization-mode=RBAC`,Kubernetes API Server启用基于角色的访问控制。RBAC提供了一种更细粒度的权限管理方式,包括角色、绑定以及资源类型。三、RBAC的详细解析
在RBAC中,**role** 与 **clusterrole** 代表了不同级别的权限,而 **rolebinding** 和 **clusterrolebinding** 则用于将权限绑定到用户或集群。 **RBAC模式的开启**:通过在Kubernetes集群的配置中添加特定参数,可以启用RBAC模式,提供更灵活的权限管理。四、kubelet的认证与授权
**kubelet** 是运行在每个节点上的Kubernetes组件,其认证与授权机制确保了节点能够安全地与集群进行交互。**解析kubelet配置**,可以发现其中包含了认证与授权的关键信息。 **Node authorizer** 的引入:为kubelet提供了一种专门的授权模式,确保其具有执行基本操作所需的最小权限。五、Service Account与Kubernetes API调用
**Service Account** 是Kubernetes中用于访问API资源的一种机制,允许组件以特定用户的身份访问资源。**如何通过ServiceAccount与RBAC进行权限控制**? 每个**ServiceAccount**生成的**token**用于身份认证,而权限则通过**rolebinding**或其他RBAC资源进行分配。**访问pod资源**时,需确保ServiceAccount拥有相应的权限。六、认证、鉴权图鉴
**ServiceAccount** 与 **token** 的关联通过**volume挂载**实现,确保了部署控制器能够正确地将pod与token关联起来。七、创建用户认证授权的kubeconfig文件
为了使用特定命名空间的资源,用户需要创建具有相应权限的**kubeconfig文件**。**自定义kubeconfig文件的步骤**包括配置、验证以及为特定用户添加访问权限。 本文概述了Kubernetes中的认证、授权以及准入控制机制,这些机制共同保障了Kubernetes集群的安全性和可管理性。通过深入理解这些概念,用户可以更有效地管理Kubernetes资源,并确保集群环境的安全性。Apache Ranger整合Hadoop、Hive、Spark实现权限管理
在先前的文章《说说PB级生产上重要的Spark 3.x性能优化方向》中,提到了业务人员在处理数据时可能因误操作而造成数据损坏的问题。在许多场景中,数仓需要直接开放给业务分析人员使用,他们经常执行SQL进行场景分析和验证。为此,可以提供一个WebUI供他们使用,如Hue。然而,由于数仓数据庞大,不可能全部开放给业务人员,因此对外供数时必须提供权限控制。
权限控制方面,CDH上提供的Sentry是一个不错的选择,它基于RBAC进行授权,可以针对库、表等设置不同用户权限。CM的加入使得Sentry的配置变得简单,但Sentry在用户管理方面较为繁琐,且项目已进入Apache Attic,因此选择Sentry并非明智之举。
实际上,许多公司的生产环境都是外网隔离的,特别是涉及敏感数据的小猴公司。开发、运维人员进入生产环境需要经过严格的校验,接入公司的生产专用网络,并通过堡垒机,任何人都无法导出数据,且每个操作都有审计跟踪。尽管如此,业务人员仍需开放访问,尽管他们通过专门的跳板机访问,但依然存在风险。
Apache Ranger只要有大数据集群的地方就都需要。本文解决了Ranger不支持Spark SQL的问题,实现了库、表、行、列级别的细粒度权限控制。由于官方文档和百度文档有限,本文将分享相关信息,希望能帮助到大家。
Apache Ranger是一个用于Hadoop平台上的权限框架,旨在服务于整个大数据生态圈。随着Hadoop在数据湖领域方案的成熟,对数据权限控制的要求也日益提高。Ranger现在提供了更多对大数据生态组件的支持。
Hadoop中的数据访问多样化,如存储在HDFS的数据可以被Hive、Spark或Presto访问。这么多组件访问数据,若不进行集中权限控制,数据安全性将面临严重问题。因此,大数据平台通常需要一个集中管理权限的组件或框架,Ranger正是这样的组件。
当前Ranger版本为2.1,官方提供的版本为2.1。编译测试基于Ranger 2.1版本。官方未提供安装包,需要手动下载Ranger源码包进行编译。编译环境要求提前安装,具体可参考官方网站。
编译成功后,将tar.gz包拷贝到本地。部署Ranger Admin的安装方式与Ranger类似:安装Ranger admin、创建ranger用户并设置密码、上传解压安装包、拷贝MySQL JDBC库、在MySQL中创建ranger库和用户、初始化配置、初始化Ranger admin。若显示成功,则表示初始化成功。在MySQL中可以看到ranger数据库中已创建大量表。
配置Ranger设置数据库密码、配置环境变量、启动Ranger admin访问web UI。登录后,主界面显示如下。点击右上角的“Swith to latest UI”可以切换到最新的UI展示。若安装过程中出现问题,请检查日志。
安装Ranger usersync配置admin认证模式。Ranger中admin的认证方式有三种:Unix、Active Directory、Kerberos。此处使用Unix方式进行认证,意味着后续Ranger admin登录会按照Linux中的认证同步。上传解压Ranger usersync组件、修改初始化配置、初始化配置、配置Linux系统用户组同步配置环境变量、启动usersync服务、修改Ranger admin的认证方式、重新启动Ranger admin。在ranger-admin中可以看到所有Linux中的所有用户。
安装Ranger HDFS插件。注意,HDFS插件需要安装在NameNode对应的节点中,YARN插件需要安装在ResourceManager对应的节点上。解压HDFS插件、初始化配置、启用hdfs插件。Ranger HDFS插件会将当前的配置文件保存备份。可以查看ranger对这些配置文件的更改。
在PM中添加HDFS服务、配置HDFS服务权限策略、默认策略、策略配置、测试用户访问权限、在ranger中添加组合用户、基于角色授权、测试。我们发现,只要Ranger中的权限已更新,hdfs客户端就可以实现更新。
按照之前的配置,审计日志信息保存在指定目录。找到一条审计日志,查看其中的内容。审计日志中包含操作时间、路径、资源类型、对应Ranger中的策略等信息。一旦出现安全类问题,通过审计日志可以检查到进行了哪些操作。
部署Ranger HDFS HA。在HDFS的HA集群上,NameNode可能会发生failover,因此非常有必要在每个HDFS的NameNode上部署一个HDFS插件,以确保在HA切换时能够正常控制权限。部署hdfs plugin到每个NameNode节点、初始化NameNode、测试NameNode节点权限。测试lisi用户在/tmp目录的写入权限,发现当前lisi没有写入权限。在Ranger中启用sales角色的用户具备/tmp目录可写权限。重新执行写入操作,NameNode接入Ranger权限控制成功。
部署Ranger框架整合Hive、上传解压Hive插件、初始化配置、启动Hive插件。Ranger会对Hive的配置文件进行处理,生成hiveserver2-site.xml、ranger-hive-audit.xml、ranger-hive-security.xml等文件。重新启动Hive、beeline登录到hive、在PM中添加Hive服务、添加Hive Service、查看权限策略、查看默认hive导入的权限、使用hive查看数据、给hadoop组用户授权、检查spark用户操作权限、授权hadoop组、对某个库、表、列设置细粒度权限、测试数据打码处理、测试Ranger Admin crash对Hive的影响、部署Ranger Spark SQL、编译Apache submarine spark-security模块、配置、配置Spark SQL、测试Thrift Server、测试Spark SQL SHELL、到此Ranger整合Spark SQL完成、查看spark sql审计日志、报错信息处理、找不到AllocationFileLoaderService$Listener、异常信息、解决办法、参考文献。