jjzjj

【微服务】Nacos 账号权限体系

卡布奇诺-海晨 2024-02-12 原文

 

目录

一、背景

1、账号体系

2、账号实体映射

二、方案

1、Nacos 资源模型

2、Nacos 授权 resource

2.1、授权 resource 组成

2.2、不同级别授权资源组成

3、Nacos 授权 Opers

4、Nacos 具体权限定义

4.1、Opers 组成

4.2、具体实例

4.3、工程实现

三、RBAC 设计实现

1、RBAC 账号权限组成

1.1、角色

1.2、默认账号

1.3、账号体系映射

2、身份识别

2.1、身份识别分类

2.2、账号区别

💖微服务实战

💖 Spring家族及微服务系列文章 


一、背景

为了 Nacos 提升安全能力,更好满足生产要求,需要设计账号权限体系,又要能兼容云上和阿里内部场景。避免后续代码无法融合。 这块的挑战是要做好抽象,不然没法和不同账号权限体系打通。默认我们提供⼀个简单的实现,当有类似于 RAM 这样的权限体系后,直接对接即可。

1、账号体系

目前用的比较多的是 ABAC 和 RBAC 体系。目前阿里云采用 ABAC 体系,阿里内部采用 RBAC体系。无论哪个体系,最终都是让账号有有限资源的权限,已达到访问控制的目的。不同的是关联的方法,相同的都是抽象好 Nacos 的 Resource 和 Opers 。鉴权模块可以抽象可插拔,实现两种都可以支持。

 

2、账号实体映射

实体阿里云账号阿里内 Dauth开源
公司公司账号⼀个 admin 账号
业务域(BU,
产品线)
用户组CMDB 打通做
封网
APP(程序和
负责人)
子账号(程序账号和人账号)Dauth 应用账
普通账号+角色
环境namespace同左同左
资源acs:config:region:namespace:group同左同左

二、方案

1、Nacos 资源模型

 

2、Nacos 授权 resource

namespace+group+dataId 组成某⼀个授权资源,是最细能做到的水准,但是这么细的授权粒度,会导致权限数据暴涨,有多少配置(100w),就会有多少授权数据,这样在分布式权限系统中是不能搞定的,因为要有 100w 授权数据,意味着我每个 nacos 节点要监听 100w 个权限数据。因此权限管控粒度在实际生产环境,只能控制到 group 级别。namespace+group。或者 namespace 级别。

2.1、授权 resource 组成

acs:config:region:namespace:group
acs: access controller system 缩写
config:产品名或者模块名
region:区域
namespace:命名空间
group:分组

2.2、不同级别授权资源组成

授权⼀个命名空间下所有数据权限
acs:config:region:namespace:* 授权多个命名空间下⼀个分组权限
acs:config:region:*:group

3、Nacos 授权 Opers

由于使用 nacos 本质是读写数据,监听也是⼀种为了读取的行为。因此对于具体某⼀个数据,只要区分到读或者写(w/r)即可。

4、Nacos 具体权限定义

4.1、Opers 组成

acs:config:region:namespace:group w/r

4.2、具体实例

账号
角色/策略Opers/Rule
app1app1Progressacs:config:region:namespace1:goup1 -> r
app1consoleapp1consoleProgressacs:config:region:namespace1:goup1 -> w
user1app1Devacs:config:region:namespace1:goup1 -> r
app2app2Progressacs:config:region:namespace2:goup2 -> r
app2consoleapp2consoleProgressacs:config:region:namespace2:goup2 -> w
user2app2Devacs:config:region:namespace2:goup2 -> r
user3app1Ops
app2Ops
acs:config:region:namespace1:goup1 -> w
acs:config:region:namespace2:goup2 -> w
 

4.3、工程实现

所有的数据请求,都走鉴权切面。 切面里面抽象好 spi,实现上面的鉴权行为。 不同权限模型,不同场景,插拔不同的 spi。

三、RBAC 设计实现

1、RBAC 账号权限组成

rbac 账号体系由 账号 角色 权限,三元组构成,下面介绍该体系模型下,nacos 权限模型的最佳实践。

1.1、角色

首先从角色讲起,以便把账号,权限做⼀个大致的区分。

角色实体映射⽤途权限
SystemRole系统运维工程师运维日常运维
查看系统 metrics
监控,处理报警
创建 AdminRole 的用户,或者提供开通
AdminRole 角色用户机制
AdminRole企业账号付费,创建员工账号
分配权限
自定义角色员工账号/应用账号使用产品特性使用权限范围特性

1.2、默认账号

默认账号名称角色账号ID
systemSystemRole
 
0
adminAdminRole1

1.3、账号体系映射

nacos阿里云内部
system
 
云产品账号
admin主账号
员工账号,可多个子账号(Ram 分配用户名密码)员工账号
程序账号子账号(Ram 分配 ak/sk)Dauth 分配账号及 ak/sk

2、身份识别

2.1、身份识别分类

账号类型⽤途身份识别
用户账号用于分配人管理资源用户名/密码
应用账号用于分配程序访问资源ak/sk

2.2、账号区别

应用账号与应用负责人能用⼀个账号吗?
不可以,因为人会流动,权限变动比较大。 因此⼀个应用的权限和应用开发负责人权限是分开的, 用不同的账号。 应用有开发,测试,owner,其实他们有对应应用使用资源的不同权限。因此应用 负责人与应用的权限也不对等,不能共用⼀个账号。

💖微服务实战

【微服务】SpringCloud的OpenFeign与Ribbon配置

集Oauth2+Jwt实现单点登录

Spring Cloud Alibaba微服务第29章之Rancher

Spring Cloud Alibaba微服务第27章之Jenkins

Spring Cloud Alibaba微服务第24章之Docker部署

Spring Cloud Alibaba微服务第23章之Oauth2授权码模式

Spring Cloud Alibaba微服务第22章之Oauth2

Spring Cloud Alibaba微服务第21章之分布式事务

Spring Cloud Alibaba微服务第18章之消息服务

Spring Cloud Alibaba微服务第16章之服务容错

Spring Cloud Alibaba微服务第14章之分库分表

Spring Cloud Alibaba微服务第11章之MyBatis-plus

Spring Cloud Alibaba微服务第8章之OpenFeign

Spring Cloud Alibaba微服务第7章之负载均衡Ribbon

SpringCloud Alibaba微服务第6章之Gateway

SpringCloud Alibaba微服务第4章之Nacos

SpringCloud Alibaba微服务开篇

💖 Spring家族及微服务系列文章 

【Spring】一文带你吃透IOC容器技术

【微服务】SpringCloud中OpenFeign请求处理及负载均衡流程

【微服务】SpringCloud中Ribbon的WeightedResponseTimeRule策略

【微服务】SpringCloud中Ribbon的轮询(RoundRobinRule)与重试(RetryRule)策略

【微服务】SpringCloud中Ribbon集成Eureka实现负载均衡

【微服务】SpringCloud轮询拉取注册表及服务发现源码解析

【微服务】SpringCloud微服务续约源码解析

【微服务】SpringCloud微服务注册源码解析

【微服务】Nacos2.x服务发现?RPC调用?重试机制?

【微服务】Nacos通知客户端服务变更以及重试机制

【微服务】Nacos服务发现源码分析

【微服务】SpringBoot监听器机制以及在Nacos中的应用

【微服务】Nacos服务端完成微服务注册以及健康检查流程

【微服务】Nacos客户端微服务注册原理流程

【微服务】SpringCloud中使用Ribbon实现负载均衡的原理

【微服务】SpringBoot启动流程注册FeignClient

【微服务】SpringBoot启动流程初始化OpenFeign的入口

Spring Bean的生命周期

Spring事务原理

SpringBoot自动装配原理机制及过程

SpringBoot获取处理器流程

SpringBoot中处理器映射关系注册流程

Spring5.x中Bean初始化流程

Spring中Bean定义的注册流程

Spring的处理器映射器与适配器的架构设计

SpringMVC执行流程图解及源码

有关【微服务】Nacos 账号权限体系的更多相关文章

  1. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  2. ruby - rbenv 安装权限被拒绝 - 2

    大家好,我正在尝试设置一个开发环境,并且我一直在关注以下教程:Linktotutorial我做得不是很好,除了最基本的版本控制内容外,我对终端命令没有任何实际经验。我点击了第一个链接并尝试运行source~/.bash_profile我得到了错误;mkdir:/usr/local/rbenv/shims:权限被拒绝mkdir:/usr/local/rbenv/versions:权限被拒绝现在每次我加载终端时都会出现错误。bash_profile的内容;exportPATH=/usr/local/rbenv/bin:$PATHexportRBENV_ROOT=/usr/local/rbe

  3. ruby-on-rails - 为什么用户必须输入 7 位数的 Twitter PIN 才能授予我的应用程序访问权限? - 2

    我正在为我的用户实现一些ruby​​onrails代码推特内容。我正在创建正确的oauth链接...类似http://twitter.com/oauth/authorize?oauth_token=y2RkuftYAEkbEuIF7zKMuzWN30O2XxM8U9j0egtzKv但在我的测试帐户授予对twitter的访问权限后,它会弹出一个页面,上面写着“您已成功授予对.我不知道用户应该在哪里输入此PIN以及他们为什么必须这样做。我认为这不是必要的步骤。Twitter应该将用户重定向到我在应用程序设置中提供的回调URL。有谁知道为什么会这样?更新我找到了thisarticle声明我需

  4. ruby - rbenv:权限被拒绝 - 2

    我正在关注Ryan的RailsCast第339集。我已经安装了rbenv并且可以运行ruby-v。我退出了我的session,当我试图返回时(通过root的sudeployer,我得到了这个错误/home/deployer/.rbenv/bin/rbenv:line20:cd:/root:Permissiondenied这是rbenv文件:#!/usr/bin/envbashset-e[-n"$RBENV_DEBUG"]&&set-xresolve_link(){$(type-pgreadlinkreadlink|head-1)"$1"}abs_dirname(){localcwd="

  5. ruby-on-rails -/usr/local/lib/libz.1.dylib,文件是为 i386 构建的,它不是被链接的体系结构 (x86_64) - 2

    在我的mac上安装几个东西时遇到这个问题,我认为这个问题来自将我的豹子升级到雪豹。我认为这个问题也与macports有关。/usr/local/lib/libz.1.dylib,filewasbuiltfori386whichisnotthearchitecturebeinglinked(x86_64)有什么想法吗?更新更具体地说,这发生在安装nokogirigem时日志看起来像:xslt_stylesheet.c:127:warning:passingargument1of‘Nokogiri_wrap_xml_document’withdifferentwidthduetoproto

  6. ruby-on-rails - 在服务器上没有互联网访问权限的 Capistrano 部署 - 2

    如何使用Capistrano将Rails应用程序部署到无法访问外部网络或存储库的生产或暂存服务器?我已经设法完成部署的一半,并意识到Capistrano没有在我的本地机器上下载gitrepo,但它首先连接到远程服务器并尝试在那里下载Git存储库。我希望有一个类似Javaee的构建系统,其中创建可交付成果并将该可交付成果发送到服务器。就像您构建.ear文件并将其部署到您想要的任何服务器上一样。显然在RoR中,你被迫(据我所知)在该服务器上构建应用程序,在那里创建一个gem存储库,在那里克隆最新的分支等等。有什么方法可以将准备运行的包发送到远程服务器吗? 最佳答

  7. ruby-on-rails - 使用 Ruby on Rails 处理回形针文件夹和文件权限 - 2

    我在运行Ubuntu10.04LTS的远程VPS机器上以生产模式运行RubyonRails3.0.9(在开发模式下,我在MACOSSnow上使用RoRLeopard),我想知道如何管理以下场景。我使用Apache2和PhusionPassenger并且我将虚拟主机设置为如下所示:ServerNameproject_name.comDocumentRoot/srv/www/project_name.com/publicAllowOverrideallOptions-MultiViews此外,我使用Paperclipgem,由于网上很多人在生产模式下使用它,我在处理(图像)文件时遇到以下错

  8. ruby - RVM:在系统范围安装中从 .rvmrc 文件加载 gemset 时权限被拒绝 - 2

    我创建了一个包含自定义gemset的项目特定.rvmrc文件(使用命令rvm--rvmrc--create1.9.2@registration):#excerptof.rvmrc...environment_id="ruby-1.9.2@registration"if[[-d"${rvm_path:-$HOME/.rvm}/environments"\&&-s"${rvm_path:-$HOME/.rvm}/environments/$environment_id"]]then\."${rvm_path:-$HOME/.rvm}/environments/$environment_id

  9. ruby-on-rails - 尝试安装 Rails (OSX) 时出现权限错误 - 2

    我是编程新手,正在尝试在我的终端上安装Rails。我一直按照friend的指示安装xcode命令行工具、自制软件、git、rbenv、ruby-build、rubygems、ruby和postgres。但是每当我尝试$geminstallrails时,我都会得到以下信息:Russell-Silvers-MacBook-Pro:~Russell_Silver$geminstallrailsERROR:Whileexecutinggem...(Errno::EACCES)Permissiondenied@rb_sysopen-/Users/Russell_Silver/.rbenv/ver

  10. ruby-on-rails - Errno::EACCES:权限被拒绝@dir_s_mkdir - 2

    我是Ruby的新手..正在按照TeamTreehouse上的说明在OSX(Yosemite)上安装Ruby开发环境。当我到达创建测试应用程序的步骤时。它最终失败了。权限被拒绝。:(不确定我做错了什么,我确实尝试运行geminstalldebuginspector和bundleexecspringbinstubball但它们都失败了。[]railsnewtestappcreatecreateREADME.rdoccreateRakefilecreateconfig.rucreate.gitignorecreateGemfilecreateappcreateapp/assets/javas

随机推荐