一、项目(租户)、用户、角色的关系
重点理解项目(project/租户)、用户(user)、角色(role)三者之间的关系,首先这三者都可以单独新建,但是绑定关系是通过openstack role add命令。
项目(project/租户)
在较低版本的openstack中有租户的概念,但在新版本中租户逐渐被项目代替,简单理解,一个租户就是一个项目,一个项目就是一个租户,后续我不会再提及租户,同一使用项目称呼。
用户(user)
用户和项目是多对多关系,一个项目可以有多个用户,一个用户也可以同时存在于多个项目中。
角色(role)
role角色是一个权限集合,一个项目可以有多个用户,但每个用户的权限可以不一致,一个项目可以有多个admin角色或多个_member,权限的不同就是通过角色决定的,并且,一个用户同时拥有多个项目,在项目中的权限也不一定是一样的,例如Z用户在A项目中是admin,但Z用户在B项目中是_member_;openstack默认角色类型有4个(不同版本可能不同,但至少也有2个,admin、member),q版中默认是4个,SwiftOperator、admin、_member_ ResellerAdmin。
二、创建项目(租户)、用户、绑定
创建项目(租户)、创建用户、赋予绑定项目和用户
[root@localhost ~(keystone_admin)]# openstack project create --domain default --description "learn to ues Openstack" test
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | learn to ues Openstack |
| domain_id | default |
| enabled | True |
| id | 2dd4545690d849dd881c454f472524c7 |
| is_domain | False |
| name | test |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
[root@localhost ~(keystone_admin)]# openstack user create --domain default --password-prompt lgb
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | ea90a34c00ef45b4a2b83d1ea69a0b91 |
| name | lgb |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
###新建lgb用户角色为_menber_ 并绑定项目test
[root@localhost ~(keystone_admin)]# openstack role add --project test --user lgb _member_
新建lgb用户角色为_menber_ 并绑定项目test,_menber_普通成员只能操作已绑定项目(包括新建网络、新建实例),不能管理该项目里的成员(只能修改密码)。
openstack role list查看role类型列表,openstack role show _member_ 显示role的详细信息。
[root@localhost ~(keystone_admin)]# openstack role list
+----------------------------------+---------------+
| ID | Name |
+----------------------------------+---------------+
| 53d1711053f74530950e45a8a2f75ed2 | SwiftOperator |
| 904ccc9da08f4cb9bd9cb49f0d01b8a2 | admin |
| 9fe2ff9ee4384b1894a90878d3e92bab | _member_ |
| b69b66c9e9144633a7330d2bc5f0f38f | ResellerAdmin |
+----------------------------------+---------------+
[root@localhost ~(keystone_admin)]# openstack role show _member_
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | None |
| id | 9fe2ff9ee4384b1894a90878d3e92bab |
| name | _member_ |
+-----------+----------------------------------+
新建lgb0用户角色_menber_ 为绑定项目admin,新建lgb0用户角色为admin项目绑定test。
[root@localhost ~(keystone_admin)]# openstack role add --project admin --user lgb0 _member_
[root@localhost ~(keystone_admin)]# openstack role add --project test --user lgb0 admin
登录lgb0后可以发现,lgb0可以在两个项目(test/admin)中自由切换,但选择“admin”项目时,左侧功能栏少了“admin(管理员)”选项,因为在admin项目中lgb0只是_member_普通成员。
身份管理权限也有所不同,admin用户可以编辑“组”、“角色类型”。
此时lgb0用户同时拥有2个项目,且在不同项目的角色不同,但必须注意一点的是,如果该用户在某个项目的角色是admin,那么该用户的权限就等同于openstack系统的admin用户,两者权限相等。