searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

openstack keystone组件概述

2023-05-29 02:13:20
57
0

Domain,project,user,role,token 的概念和关系

  • Domain:是project,user,group 的 namespace。 一个 domain 内,这些元素的名称不可以重复,但是在两个不同的domain内,它们的名称可以重复。因此,在确定这些元素时,需要同时使用它们的名称和它们的 domain 的 id 或者 name。

  • Project:是资源的集合,其中有一类特殊的project 是 admin project。通过指定 admin_project_domain_name 和 admin_project_name 来确定一个 admin project,然后该 admin project 中的 admin 用户即是 cloud admin。

  • Group:是一个 domain 部分 user 的集合,其目的是为了方便分配 role。给一个 group 分配 role,结果会给 group 内的所有 users 分配这个 role。

  • Role:

    • 是全局的,因此其名称必须唯一。role 的名称没有意义,其意义在于 policy.json 文件根据 role 的名称所指定的允许进行的操作。

    • 简单地,role 可以只有 admin 和 member 两个,前者表示管理员,后者表示普通用户。但是,结合 domain 和 project 的限定,admin 可以分为 cloud admin,domain admin 和 project admin。

    • policy.json 文件中定义了 role 对某种类型的资源所能进行的操作,比如允许 cloud admin 创建 domain,允许所有用户创建卷等。

  • Token:具有 scope 的概念,分为 unscoped token,domain-scoped token 和 project-scoped token。

用户管理

user不是一个全局的概念,它是属于domain下的资源,也就是说 user 一定要属于某一个 domain。这一点和 role 不同,role是全局的。

没有任何权限的user是没有意义的,而openstack权限控制模型是RBAC,因此,user需要被赋予某些角色,才能够获角色拥有的权限。user 被赋予role的这个操作,在openstack中被称为 role assignment,assign动作一般会指定一个域也就是domain或者project,因此也就衍生出了 token scope的问题,这个后面会讲。一个 role assignment 的例子:

openstack role add --project acme --user alice compute-user # 给 alice用户赋予了 compute-user 这个角色,域是project acme

简单来说就是:给alice在acme这个project下赋予了compute-user这个角色。

一个 user 在不同的 project 中有不同的角色。例如,Alice在拥有上述角色的同时,也可以是 project1 的 admin 角色,这并不冲突。甚至,user在相同的project下可以同时拥有很多角色。

权限控制

role 的所有权限信息,都定义在 /etc/[SERVICE_NAME]/policy.yaml 文件下。简单来说,这些文件描述了系统中的各个 role 能做什么。每一个服务基本上都会有一个这样的文件,因此系统中的所有 policy.yaml 文件描述了 各种 role 能对系统的各个服务所管理的资源做什么操作(请求什么api)。例如,/etc/nova/policy.yaml 指定了计算服务的准入策略、/etc/glance/policy.yaml 指定了镜像服务的准入策略。

openstack 系统中默认的角色只有两个 admin 和 member,尽管 keystone 支持创建角色,但是如果想要对该角色的权限做定义,那么还需要修改 policy.json 文件。可以通过一个例子理解一下openstack是如何通过角色进行权限控制的。首先,已知 /etc/cinder/policy.yaml 中有一条默认的权限策略如下:

"volume:create": "",

这条策略表示,所有的创建volume的操作都允许。假如,想要控制只有某个特定角色(假如是compute-user)的用户才能创建volume,面对这种需求,你需要这么做。第一:在keystone创建compute-user这个角色;第二:将cinder组件的 /etc/cinder/policy.yaml 文件修改如下:

"volume:create": "role:compute-user",

服务管理

keystone 还实现了服务发现和服务注册的功能,查看 keystone 中注册的服务

openstack service list

查看服务的 Endpoint

openstack endpoint list

 

用户组管理

用户组是用户的集合,一般用来快速给组内用户分配角色。因为如果给用户组赋予某个角色,那么该组下的所有用户都被赋予了相应的角色。

0条评论
作者已关闭评论
g****n
3文章数
0粉丝数
g****n
3 文章 | 0 粉丝
g****n
3文章数
0粉丝数
g****n
3 文章 | 0 粉丝
原创

openstack keystone组件概述

2023-05-29 02:13:20
57
0

Domain,project,user,role,token 的概念和关系

  • Domain:是project,user,group 的 namespace。 一个 domain 内,这些元素的名称不可以重复,但是在两个不同的domain内,它们的名称可以重复。因此,在确定这些元素时,需要同时使用它们的名称和它们的 domain 的 id 或者 name。

  • Project:是资源的集合,其中有一类特殊的project 是 admin project。通过指定 admin_project_domain_name 和 admin_project_name 来确定一个 admin project,然后该 admin project 中的 admin 用户即是 cloud admin。

  • Group:是一个 domain 部分 user 的集合,其目的是为了方便分配 role。给一个 group 分配 role,结果会给 group 内的所有 users 分配这个 role。

  • Role:

    • 是全局的,因此其名称必须唯一。role 的名称没有意义,其意义在于 policy.json 文件根据 role 的名称所指定的允许进行的操作。

    • 简单地,role 可以只有 admin 和 member 两个,前者表示管理员,后者表示普通用户。但是,结合 domain 和 project 的限定,admin 可以分为 cloud admin,domain admin 和 project admin。

    • policy.json 文件中定义了 role 对某种类型的资源所能进行的操作,比如允许 cloud admin 创建 domain,允许所有用户创建卷等。

  • Token:具有 scope 的概念,分为 unscoped token,domain-scoped token 和 project-scoped token。

用户管理

user不是一个全局的概念,它是属于domain下的资源,也就是说 user 一定要属于某一个 domain。这一点和 role 不同,role是全局的。

没有任何权限的user是没有意义的,而openstack权限控制模型是RBAC,因此,user需要被赋予某些角色,才能够获角色拥有的权限。user 被赋予role的这个操作,在openstack中被称为 role assignment,assign动作一般会指定一个域也就是domain或者project,因此也就衍生出了 token scope的问题,这个后面会讲。一个 role assignment 的例子:

openstack role add --project acme --user alice compute-user # 给 alice用户赋予了 compute-user 这个角色,域是project acme

简单来说就是:给alice在acme这个project下赋予了compute-user这个角色。

一个 user 在不同的 project 中有不同的角色。例如,Alice在拥有上述角色的同时,也可以是 project1 的 admin 角色,这并不冲突。甚至,user在相同的project下可以同时拥有很多角色。

权限控制

role 的所有权限信息,都定义在 /etc/[SERVICE_NAME]/policy.yaml 文件下。简单来说,这些文件描述了系统中的各个 role 能做什么。每一个服务基本上都会有一个这样的文件,因此系统中的所有 policy.yaml 文件描述了 各种 role 能对系统的各个服务所管理的资源做什么操作(请求什么api)。例如,/etc/nova/policy.yaml 指定了计算服务的准入策略、/etc/glance/policy.yaml 指定了镜像服务的准入策略。

openstack 系统中默认的角色只有两个 admin 和 member,尽管 keystone 支持创建角色,但是如果想要对该角色的权限做定义,那么还需要修改 policy.json 文件。可以通过一个例子理解一下openstack是如何通过角色进行权限控制的。首先,已知 /etc/cinder/policy.yaml 中有一条默认的权限策略如下:

"volume:create": "",

这条策略表示,所有的创建volume的操作都允许。假如,想要控制只有某个特定角色(假如是compute-user)的用户才能创建volume,面对这种需求,你需要这么做。第一:在keystone创建compute-user这个角色;第二:将cinder组件的 /etc/cinder/policy.yaml 文件修改如下:

"volume:create": "role:compute-user",

服务管理

keystone 还实现了服务发现和服务注册的功能,查看 keystone 中注册的服务

openstack service list

查看服务的 Endpoint

openstack endpoint list

 

用户组管理

用户组是用户的集合,一般用来快速给组内用户分配角色。因为如果给用户组赋予某个角色,那么该组下的所有用户都被赋予了相应的角色。

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0