资源和权限体系

介绍Keystone的资源归属体系以及相应的权限体系

Keystone的资源和权限体系由项目角色权限这三类资源定义。项目是资源的归属,用户要使用资源,必须以特定的角色加入相应的项目。角色和策略(policy)关联,定义了用户的权限。

项目(Projects)

项目是资源的owner,所有虚拟资源都要归属于一个项目。用户或者用户的组加入项目后,在获得权限后才能授权访问资源。

项目一般用Project指代,但是为了和Keystone v2 API兼容,偶尔也用Tenant指代。

属性

字段说明
id项目ID
name项目名称
domain_id项目归属的域ID
project_domain项目归属域的名称

限制

v3.7之前,用户或者组只能加入同一个域下的项目,或者default域下的项目。Default域下的项目可以加入任意域的用户或者组,非Default域下的项目只能加入同域的用户或者组。v3.7之后,该限制解除,任意域的用或者组可以加入任意域下的项目。

项目下在其他服务有外部资源的无法删除。他服务的资源,默认每15分钟拉取一次, 通过参数设置:fetch_project_resource_count_interval_seconds。

包含用户和组的项目无法删除

system项目无法删除和修改

项目名字空间

项目的名字空间为全局,也就是项目的名称全局唯一

预置项目

系统初始化时,预置项目system,作为sysadmin的项目

角色(Roles)

角色是用户加入项目的角色。用户的角色确定了用户的权限。

属性

角色的属性如下:

字段说明
idID,不可修改
name名称,可修改
public_scope共享范围,可选择值为system(全局共享),domain(域共享)
policies该角色对应的各个级别的权限名称的列表
match_policies该角色对应的所有权限名称的列表

限制

一个域下的用户,只能使用项目所在域的角色或者共享的角色加入项目

一个被用户或者组使用的角色不能被删除

共享的角色不能被删除

admin角色不能被删除

角色名字空间

角色的名字空间为全局,也就是角色的名称全局唯一

预置角色

系统初始化时,预置了admin的角色,作为系统用户syadmin加入system项目的缺省角色

同时,在系统初始化完成后,安装程序会自动创建如下的共享项目,以方便用户:

角色名称是否共享含义使用场景
admin全局管理员系统管理员角色,最高权限的角色
sa运维管理员一般给运维人员分配
fa财务管理员一般给财务人员分配
domainfa域财务管理员一般给域内的财务人员分配
projectfa项目财务管理员一般给项目内的财务人员分配
project_owner项目主管一般给项目管理员分配
project_editor项目操作员一般给项目内管理员,但是缺少创建和删除资源的权限
project_viwer项目只读人员一般给项目的普通成员,只能查看,无法操作,创建和删除资源
domainadmin域管理员一般给域管理员分配
domaineditor域管理员一般给域管理员分配
domainviewer域管理员一般给域管理员分配

权限策略(Policies)

权限定义了权限的匹配规则,权限范围和权限定义

属性

权限策略的属性如下:

属性类型说明
idStringID
nameString名称
policyJSONObject策略定义,存储为json格式,可以yaml或者json方式呈现
scopeString策略的权限定义范围,project(项目范围权限), domain(域范围权限)或者system(系统/全局权限)
public_scopeString策略的共享范围,none (不共享), domain(共享到指定域),system(全局共享)
Domain_idString归属域的ID
Project_DomainString归属域的名称
Is_Systemboolean是否为系统定义的权限策略
enabledboolean该策略是否启用

权限策略定义

权限策略的Policy字段存储了定义,每个权限策略包含如下几个字段:

权限定义类型具体的权限定义,即对特定服务的特定资源的特定操作是否有权限
Servicestring适用的服务,例如:compute, identity
Resourcestring适用的资源类型,例如:servers
Operationstring适用的操作,支持的操作为
Resultstring策略的结果,只有两个值:Allow和Deny

Operation支持的操作如下:

操作说明
list列出所有资源
get获取指定资源的详情
create创建新的资源
update更新
delete删除
perform执行操作,例如对主机进行开机关机等操作

权限策略举例

  • 管理员权限
scope: system
policy:
  '*': allow
  • 项目内计算服务只读
scope: project
policy:
  compute:
    get: allow
    list: allow
    '*': deny
  • 域内计算服务操作者(不能创建和删除资源)
scope: domain
policy:
  compute:
    '*':
      create: deny
      delete: deny
      '*': allow

系统预置策略

为了方便使用,系统内预置了150多个权限策略,例如系统管理员 sysadmin,域管理 domainadmin,项目owner:projectadmin等。

其中,为了使用web控制台,用户需要具备一些特殊权限,预定义到了这几个预置权限策略中:sys-dashboard, domain-doshboard, project-dashboard,分别对应系统视图,域视图和项目视图的web控制台权限。如果一个角色需要访问web控制台,需要给该角色增加对应的权限策略。

角色与权限

角色需要和权限关联,关联关系定义在role_policy关联表,该关联关系具有如下属性,定义了角色和权限关联的条件:

属性类型是否必须字段说明
role_idstring角色ID
policy_idstring权限策略ID
project_idstring如果设置了项目,则只有用户以指定角色加入该项目,才具备对应的权限
authboolean是否需要认证,不需要认证
ipsstring如果设置了IPS,则只有用户通过匹配IP登录的才具备对应的权限

例如,sysadmin的权限和admin角色关联,project_id为system项目的ID,auth为true,则要求用户以admin角色加入system项目,才具备sysadmin的权限。

限制

启用(enabled=true)的权限无法删除 共享的权限无法删除

权限的名字空间

权限的名字空间为全局,也就是权限的名称全局唯一