Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >谷歌统一权限系统Zanzibar

谷歌统一权限系统Zanzibar

作者头像
itliusir
发布于 2021-06-25 01:45:24
发布于 2021-06-25 01:45:24
2.7K00
代码可运行
举报
文章被收录于专栏:刘君君刘君君
运行总次数:0
代码可运行

摘要: Google Zanzibar 权限服务

Zanzibar

1. 介绍

Zanzibar 是一个用于存储和评估访问控制列表的全球系统。 Zanzibar 提供统一的数据模型和配置语言,用于表达来自 Google 数百个客户端服务的广泛访问控制策略,包括Calendar、Cloud、 Drive、Maps、Photos、YouTube。

  • Consistent 保证用户操作ACL的因果顺序,提供外部一致性。
  • Flexible 支持丰富的访问控制策略
  • Scalable 数以万亿计的 ACL 条目,百万check qps
  • Fast 95%请求小于10ms,99.9%请求小于100ms
  • Available 过去 3 年 可用率99.999%

2. 模型

2.1 Relation Tuples

ACL 表示为关系元组的对象-用户或对象-对象关系的集合。组只是具有成员资格语义的 ACL。关系元组具有高效的二进制编码,我们使用方便的文本符号表示它们:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*tuple*::=*object*⟩‘#’⟨*relation*⟩‘@’⟨*user*⟩ 

⟨*object*::=*namespace*⟩‘:’⟨*object id*⟩ 

⟨*user*::=*user id*|*userset*⟩ 

⟨*userset*::=*object*⟩‘#’⟨*relation*

Simple Example

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// user1 has access on dir1
dir1#access@user1
// Have a look on the subjects concept page if you don't know the empty relation.
dir1#parent@(file1#)
// Everyone with access to dir1 has access to file1. This would probably be defined
// through a subject set rewrite that defines this inherited relation globally.
// In this example, we define this tuple explicitly.
file1#access@(dir1#access)
// Direct access on file2 was granted.
file2#access@user1
// user2 is owner of file2
file2#owner@user2
// Owners of file2 have access to it; possibly defined through subject set rewrites.
file2#access@(file2#owner)

2.2 Consistency Model

Example Tuple

Semantics

doc:readme#owner@10

User 10 is an owner of doc:readme

group:eng#member@11

User 11 is a member of group:eng

doc:readme#viewer@group:eng#member

Members of group:eng are viewers of doc:readme

doc:readme#parent@folder:A#…

doc:readme is in folder:A

2.3 Relation Configs

为了减少关系元组在表达关系上会出现很多条的关系组,客户端通过关系配置中的用户集重写规则来定义对象不可知的关系。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name: "doc"
relation { name: "owner" }
relation {
 name: "editor"
 userset_rewrite {
  union {
   child { _this {} }
   child { computed_userset { relation: "owner" } }
}}}
relation {
 name: "viewer"
 userset_rewrite {
  union {
   child { _this {} }
   child { computed_userset { relation: "editor" } }
   child { tuple_to_userset {
     tupleset { relation: "parent" }
     computed_userset {
       object: $TUPLE_USERSET_OBJECT  # parent folder
relation: "viewer" }}}
}}}
child 节点
  • _this 返回所有用户集合,默认行为
  • computed_userset 计算出一个新的用户集合,例如使 viewer 用户引用 editor 用户。
  • tuple_to_userset 从输入对象中获取匹配的关系组,例如匹配其父级文件夹并继承其 viewer 权限

一个用户集表达式也可以由多个子表达式组成,通过并集、交集和排除等操作组合。

3. 架构

3.1 aclserver

aclservers 是主要的服务器类型。它们被组织成集群并响应 Check、Read、Expand 和 Write 请求。请求到达集群中的任何服务器,并且该服务器根据需要将工作分发到集群中的其他服务器。这些服务器可以依次联系其他服务器以计算中间结果。初始服务器收集最终结果并将其返回给客户端。

3.2 watchserver

watchservers 是一种特殊的服务器类型,可以响应 Watch 请求。他们跟踪更改日志并近乎实时地为客户端提供命名空间更改流。

3.2 Storage

  • Namespace Config Storage 命名空间配置存储在具有两个表的数据库中。一张表包含配置并以命名空间 ID 为键。另一个是配置更新的更改日志.
  • Relation Tuple Storage 每个命名空间的关系元组存储在一个单独的数据库中,其中每一行都由主键(分片 ID、对象 ID、关系、用户、提交时间戳)标识。主键的排序允许我们查找给定对象 ID 或(对象 ID,关系)对的所有关系元组。 我们的客户端根据其数据模式配置命名空间的分片。通常,分片 ID 仅由对象 ID 确定。在某些情况下,例如,当命名空间存储具有大量成员的组时,分片 ID 是根据对象 ID 和用户计算得出的。
  • change log 用于存储 Watch API 的元组更新历史记录。主键是(更改日志分片 ID、时间戳、唯一更新 ID),其中每次写入随机选择一个更改日志分片。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
RBAC 和 Keto(Go RBAC 框架)
RBAC(Role-Based Access Control)是最通用的权限访问控制系统。其思想是,不直接授予具体用户各种权限,而是在用户集合和权限集合之间建立角色集合。每种角色对应一组相应的权限,一旦用户被分配适当的角色,他就拥有此角色的所有权限。这样做的好处是,不必在每次创建用户时都分配权限,只要给用户分配相应的角色即可,并且角色的权限变更比用户的权限变更要少得多,这将简化用户的权限管理,减少系统开销。
小阑本阑
2023/06/15
1.1K0
RBAC 和 Keto(Go RBAC 框架)
四.linux文件权限
一个文件对应三种权限对象,分别文件的所有者user、所属组group和其他人other 每个权限对象对应三种权限,分别是读r、写w和执行x 权限数字对应关系
对弈
2019/09/04
4K0
通用权限系统的架构设计
最近在优化自己写的APPsite框架,其中一直以来没有妥善解决的权限模块可能是后面拓展出去的比较大的障碍。所以着手重写这个模块。 在现有的框架中ACCESS模块分为两大部分: 系统权限、单位权限两个。
雪碧君
2023/02/13
4900
linux用户和权限管理
用户名:密码:上次修改密码的天数:密码最短有效天数:提前多少天警告过期:过期多少天禁用:失效日期:保留字段
yuezhimi
2020/09/30
4.3K0
Hadoop Shell命令(基于linux操作系统上传下载文件到hdfs文件系统基本命令学习)
别先生
2018/01/02
3.3K0
Hadoop Shell命令(基于linux操作系统上传下载文件到hdfs文件系统基本命令学习)
Linux 温习(八): 文件权限
权限的意义在于允许某一个用户或某个用户组以规定的方式去访问某个文件。例如,Apache 服务进程默认由 Apache 用户访问,除了 root 用户以外,其他用户均不能访问相关进程,这样就能通过在文件上设置用户或用户组的访问方式达到限制目的。
陈大剩博客
2023/02/17
7610
Linux 温习(八): 文件权限
Hadoop 命令操作大全
文件系统(FS)Shell 包括各种类似于Shell 的命令,这些命令可直接与Hadoop分布式文件系统(HDFS)以及Hadoop支持的其他文件系统(例如本地FS,HFTP FS,S3 FS等)进行交互。 FS Shell通过以下方式调用:
静谧星空TEL
2021/04/27
1.6K0
Linux基础教程之linux文件权限深度解读
基本命令—— 1.cut : cat /etc/passwd | cut -d’:’ -f7| uniq -c| sort -nr
马哥linux运维
2018/11/16
1.2K0
Linux基础教程之linux文件权限深度解读
Linux系统文件权限管理
Linux操作系统是多任务(Multi-tasks)多用户(Multi-users)分时操作系统,linux操作系统的用户就是让我们登录到linux的权限,每当我们使用用户名登录操作系统时,linux都会对该用户进行认证、授权审计等操作,本章主要内容就是围绕着权限来讲解的,我会讲解Linux系统中的所有常用权限包括,普通权限/隐藏权限/特殊权限/ACL/SUDO/SELinux,等的设置与使用技巧.
王 瑞
2022/12/28
4.9K0
Hadoop HDFS 实现原理图文详解
Hadoop分布式文件系统 (HDFS) 是运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File System)。
一个会写诗的程序员
2021/12/16
1.5K0
Hadoop HDFS 实现原理图文详解
Postgresql源码(38)aclchk鉴权流程分析
1、aclmask遍历acl信息中,第二轮查到了{ai_grantee = 16385, ai_grantor = 16384, ai_privs = 2}
mingjie
2022/05/12
2950
Linux系统安全 | Linux下的用户、组和权限
注:一般来说,只有 root 用户的 uid 是为0的。如果黑客把一个普通用户的 uid 修改为0的话,那么他只要以普通用户的用户名和密码登录,系统就会自动切换到root用户。所以,系统加固的时候一定要过滤出有哪些用户的UID为0
谢公子
2022/01/19
3.2K0
Linux系统安全 | Linux下的用户、组和权限
权限控制的解决方式(科普向)
目录 1 权限控制是什么   1.1 ACL   1.2 RBAC     1.2.1 名词术语     1.2.2 RBAC定义     1.2.3 RBAC分类       1.2.3.1 RBAC0       1.2.3.2 RBAC1       1.2.3.3 RBAC2     1.2.4 RBAC 接口 2 垂直权限(功能权限) 3 水平权限(数据权限) 4 OAuth   4.1 授权码模式(authorization code)   4.2 简化模式(implicit)   4.3 密码
butterfly100
2018/04/17
4.6K0
权限控制的解决方式(科普向)
lustre集群中一致校验
-parent FID:每个OST上的对象存储了本对象FID的父MDT-Object,MDT-Object是以XATTR_NAME_FID扩展属性的方式存储在OST上的object。OST上的object的parent FID用来重构MDT上的MDT-Object上的LOV的扩展属性
用户4700054
2022/08/17
9330
lustre集群中一致校验
hive中操作hdfs命令
– 查看dfs帮助信息 [root@hadp-master sbin]# dfs Usage: dfs [generic options] [-appendToFile … ] [-cat [-ignoreCrc] …] [-checksum …] [-chgrp [-R] GROUP PATH…] [-chmod [-R] <MODE[,MODE]… | OCTALMODE> PATH…] [-chown [-R] [OWNER][:[GROUP]] PATH…] [-copyFromLocal [-f] [-p] [-l] … ] [-copyToLocal [-p] [-ignoreCrc] [-crc] … ] [-count [-q] [-h] …] [-cp [-f] [-p | -p[topax]] … ] [-createSnapshot []] [-deleteSnapshot ] [-df [-h] [ …]] [-du [-s] [-h] …] [-expunge] [-find … …] [-get [-p] [-ignoreCrc] [-crc] … ] [-getfacl [-R] ] [-getfattr [-R] {-n name | -d} [-e en] ] [-getmerge [-nl] ] [-help [cmd …]] [-ls [-d] [-h] [-R] [ …]] [-mkdir [-p] …] [-moveFromLocal … ] [-moveToLocal ] [-mv … ] [-put [-f] [-p] [-l] … ] [-renameSnapshot ] [-rm [-f] [-r|-R] [-skipTrash] …] [-rmdir [–ignore-fail-on-non-empty]
全栈程序员站长
2022/11/10
1K0
文件基本权限与特殊权限
默认权限需要换算成字母再相减,所有建立文件之后的默认权限,为666减去umask的值
全栈工程师修炼指南
2022/09/28
5.1K0
文件基本权限与特殊权限
谈谈用户权限系统
登录这事之于一个需要识别用户身份的产品,就仿佛cs101之于computer science。感谢各种语言里各种优秀的登录模块(比如nodejs的passport),绝大多数产品,把它们拿来配置一下,闭着眼睛,花点功夫,就完成了一个从用户注册到登录一条龙的服务。很好很强大,不需要较真,也没人较真。 可登录还真是一件即便你半天就搞定还是需要好好较一下真的问题。本文回归本源,谈谈登录中那些极其重要又被人忽视的思想。 首先需要回答的一个问题是:要求用户登录的目的何在? 这个问题的答案是不言而喻的。服务器上的资源并
tyrchen
2018/03/28
1.4K0
谈谈用户权限系统
Linux权限管理
之前在用户管理中提到用户和组的概念,服务器添加多账户的作用之一是可以针对不同用户分配不同的权限,从而根据不同权限限制用户可以访问到的系统资源。那么这次就来说一下Linux权限管理的相关内容,这部分也是非常重要的。如下。
reload
2024/02/04
4550
Linux权限管理
对象存储基础概念
对象存储诞生之初 谈到为什么要有对象存储,必须聊聊对象存储诞生之前的两大存储模型:块存储和文件存储。 块存储主要是将存储介质的空间整个映射给主机使用的,主机如果需要对这些空间进行读写IO操作,需要先进行分区和格式化处理,形成可以被操作系统识别的逻辑命名空间,之后主机才能通过操作系统对这些存储介质进行读写操作。常见的块存储有磁盘,SSD,NAS、SAN等,这些物理设备都或多或少存在物理上的极限,比如存储空间、性能等都存在物理极限。 文件存储立足于物理存储介质之上,是操作系统对数据管理操作的抽象,这些抽象最终汇
用户1260683
2018/03/26
5.8K0
对象存储基础概念
EMR入门学习之HDFS上的一些常见Shell命令(五)
文件系统(FS)shell包括各种类似shell的命令,这些命令直接与Hadoop分布式文件系统(HDFS)以及Hadoop支持的其他文件系统交互,例如本地FS,HFTP FS,S3 FS等。HDFS文件系统相关操作,主要使用以下2个命令:
披荆斩棘
2019/11/13
1.6K0
相关推荐
RBAC 和 Keto(Go RBAC 框架)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验