
目录
为了 Nacos 提升安全能力,更好满足生产要求,需要设计账号权限体系,又要能兼容云上和阿里内部场景。避免后续代码无法融合。 这块的挑战是要做好抽象,不然没法和不同账号权限体系打通。默认我们提供⼀个简单的实现,当有类似于 RAM 这样的权限体系后,直接对接即可。
目前用的比较多的是 ABAC 和 RBAC 体系。目前阿里云采用 ABAC 体系,阿里内部采用 RBAC体系。无论哪个体系,最终都是让账号有有限资源的权限,已达到访问控制的目的。不同的是关联的方法,相同的都是抽象好 Nacos 的 Resource 和 Opers 。鉴权模块可以抽象可插拔,实现两种都可以支持。
实体 阿里云账号 阿里内 Dauth 开源 公司 公司账号 ⼀个 admin 账号 业务域(BU,
产品线)用户组 CMDB 打通做
封网APP(程序和
负责人)子账号(程序账号和人账号) Dauth 应用账
号普通账号+角色 环境 namespace 同左 同左 资源 acs:config:region:namespace:group 同左 同左
namespace+group+dataId 组成某⼀个授权资源,是最细能做到的水准,但是这么细的授权粒度,会导致权限数据暴涨,有多少配置(100w),就会有多少授权数据,这样在分布式权限系统中是不能搞定的,因为要有 100w 授权数据,意味着我每个 nacos 节点要监听 100w 个权限数据。因此权限管控粒度在实际生产环境,只能控制到 group 级别。namespace+group。或者 namespace 级别。
acs:config:region:namespace:group
acs: access controller system 缩写
config:产品名或者模块名
region:区域
namespace:命名空间
group:分组
授权⼀个命名空间下所有数据权限
acs:config:region:namespace:* 授权多个命名空间下⼀个分组权限
acs:config:region:*:group
由于使用 nacos 本质是读写数据,监听也是⼀种为了读取的行为。因此对于具体某⼀个数据,只要区分到读或者写(w/r)即可。
acs:config:region:namespace:group w/r
账号 角色/策略 Opers/Rule app1 app1Progress acs:config:region:namespace1:goup1 -> r app1console app1consoleProgress acs:config:region:namespace1:goup1 -> w user1 app1Dev acs:config:region:namespace1:goup1 -> r app2 app2Progress acs:config:region:namespace2:goup2 -> r app2console app2consoleProgress acs:config:region:namespace2:goup2 -> w user2 app2Dev acs:config:region:namespace2:goup2 -> r user3 app1Ops
app2Opsacs:config:region:namespace1:goup1 -> w
acs:config:region:namespace2:goup2 -> w
所有的数据请求,都走鉴权切面。 切面里面抽象好 spi,实现上面的鉴权行为。 不同权限模型,不同场景,插拔不同的 spi。
rbac 账号体系由 账号 角色 权限,三元组构成,下面介绍该体系模型下,nacos 权限模型的最佳实践。
首先从角色讲起,以便把账号,权限做⼀个大致的区分。
角色 实体映射 ⽤途 权限 SystemRole 系统运维工程师 运维 日常运维
查看系统 metrics
监控,处理报警
创建 AdminRole 的用户,或者提供开通
AdminRole 角色用户机制AdminRole 企业账号 付费, 创建员工账号
分配权限自定义角色 员工账号/应用账号 使用产品特性 使用权限范围特性
默认账号名称 角色 账号ID system SystemRole
0 admin AdminRole 1
nacos 阿里云 内部 system
云产品账号 无 admin 主账号 无 员工账号,可多个 子账号(Ram 分配用户名密码) 员工账号 程序账号 子账号(Ram 分配 ak/sk) Dauth 分配账号及 ak/sk
账号类型 ⽤途 身份识别 用户账号 用于分配人管理资源 用户名/密码 应用账号 用于分配程序访问资源 ak/sk
应用账号与应用负责人能用⼀个账号吗? 不可以,因为人会流动,权限变动比较大。 因此⼀个应用的权限和应用开发负责人权限是分开的, 用不同的账号。 应用有开发,测试,owner,其实他们有对应应用使用资源的不同权限。因此应用 负责人与应用的权限也不对等,不能共用⼀个账号。
✨【微服务】SpringCloud的OpenFeign与Ribbon配置
✨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中OpenFeign请求处理及负载均衡流程
✨【微服务】SpringCloud中Ribbon的WeightedResponseTimeRule策略
✨【微服务】SpringCloud中Ribbon的轮询(RoundRobinRule)与重试(RetryRule)策略
✨【微服务】SpringCloud中Ribbon集成Eureka实现负载均衡
✨【微服务】SpringCloud轮询拉取注册表及服务发现源码解析
✨【微服务】Nacos2.x服务发现?RPC调用?重试机制?
✨【微服务】SpringBoot监听器机制以及在Nacos中的应用
✨【微服务】SpringCloud中使用Ribbon实现负载均衡的原理
✨【微服务】SpringBoot启动流程注册FeignClient
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
大家好,我正在尝试设置一个开发环境,并且我一直在关注以下教程: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
我正在为我的用户实现一些rubyonrails代码推特内容。我正在创建正确的oauth链接...类似http://twitter.com/oauth/authorize?oauth_token=y2RkuftYAEkbEuIF7zKMuzWN30O2XxM8U9j0egtzKv但在我的测试帐户授予对twitter的访问权限后,它会弹出一个页面,上面写着“您已成功授予对.我不知道用户应该在哪里输入此PIN以及他们为什么必须这样做。我认为这不是必要的步骤。Twitter应该将用户重定向到我在应用程序设置中提供的回调URL。有谁知道为什么会这样?更新我找到了thisarticle声明我需
我正在关注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="
在我的mac上安装几个东西时遇到这个问题,我认为这个问题来自将我的豹子升级到雪豹。我认为这个问题也与macports有关。/usr/local/lib/libz.1.dylib,filewasbuiltfori386whichisnotthearchitecturebeinglinked(x86_64)有什么想法吗?更新更具体地说,这发生在安装nokogirigem时日志看起来像:xslt_stylesheet.c:127:warning:passingargument1of‘Nokogiri_wrap_xml_document’withdifferentwidthduetoproto
如何使用Capistrano将Rails应用程序部署到无法访问外部网络或存储库的生产或暂存服务器?我已经设法完成部署的一半,并意识到Capistrano没有在我的本地机器上下载gitrepo,但它首先连接到远程服务器并尝试在那里下载Git存储库。我希望有一个类似Javaee的构建系统,其中创建可交付成果并将该可交付成果发送到服务器。就像您构建.ear文件并将其部署到您想要的任何服务器上一样。显然在RoR中,你被迫(据我所知)在该服务器上构建应用程序,在那里创建一个gem存储库,在那里克隆最新的分支等等。有什么方法可以将准备运行的包发送到远程服务器吗? 最佳答
我在运行Ubuntu10.04LTS的远程VPS机器上以生产模式运行RubyonRails3.0.9(在开发模式下,我在MACOSSnow上使用RoRLeopard),我想知道如何管理以下场景。我使用Apache2和PhusionPassenger并且我将虚拟主机设置为如下所示:ServerNameproject_name.comDocumentRoot/srv/www/project_name.com/publicAllowOverrideallOptions-MultiViews此外,我使用Paperclipgem,由于网上很多人在生产模式下使用它,我在处理(图像)文件时遇到以下错
我创建了一个包含自定义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
我是编程新手,正在尝试在我的终端上安装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
我是Ruby的新手..正在按照TeamTreehouse上的说明在OSX(Yosemite)上安装Ruby开发环境。当我到达创建测试应用程序的步骤时。它最终失败了。权限被拒绝。:(不确定我做错了什么,我确实尝试运行geminstalldebuginspector和bundleexecspringbinstubball但它们都失败了。[]railsnewtestappcreatecreateREADME.rdoccreateRakefilecreateconfig.rucreate.gitignorecreateGemfilecreateappcreateapp/assets/javas