Tenant:用来分组或隔离资源或身份对象的容器,根据服务运营商,租户可以映射成一个客户,账号,组织或项目。
User:使用OpenStack云服务的人,系统,服务的数字表示.验证用户传入的请求.用户登录可能被赋予访问资源的令牌.用户可能直接被指定给一个特定租户,好像用户在这个租户中一样,用户可以在这个租户中充当一个角色,在另一个租户中扮演其他角色。
Role:可执行一特定系列操作的用户特性。角色包括一系列权利和特权。用户可继承其所属角色的权利和特权。在身份服务中,颁发给用户的令牌包括用户能承担的角色列表。这个用户调用的服务决定他们怎样解释这个用户所属的角色,以及每个角色授予访问的操作和资源。
以上图为摘自社区的文档
解释下这个过程,list intsances为例,从通过
当我们使用dashborad时我们知道登陆的时候提供了用户名密码, 后面的处理流程如下
第一步:用这个用户名密码获取临时Token和用户基本信息
第二步:用这个token去查询这个用户的租户信息,
第三步:选择一个租户, 这时重新向keystone请求token和服务endpoint列表
第四步:这时开始利用新的token, 选择向相应服务的endpoint发出请求,如本例就是'http://10.0.0.13:8774/v2/070911b880444bd7adf1796acb780ec8/servers/detail', 这是service会检查token
第五步:检查是不是有权限, 这就是role policy发挥作用的地方了
第六步:检查通过后, 开始执行请求
第七步:返回结果
1、 创建用户,即为使用者。
usage:keystone user-create --name <user-name> [--tenant-id<tenant-id>] [--pass<pass>] [--email <email>][--enabled<true|false>]
keystone user-create --name=chenxiao --pass=Passw0rd [email protected]
2、租户主要为了隔离资源, 可视为一个project,群组。当你向openstack发送REST API请求,你必须指定一个租户tenant,
usage:keystone tenant-create --name <tenant-name>[--description<tenant-description>] [--enabled<true|false>]
keystone tenant-create --name=openstackteam --description="openstack team tenant"
3、创建了用户和租户,那用户在这个租户里面扮演什么样的角色,拥有什么样的权限,这就需要role定义了,赋予chenxiao在租户openstackteam中role为computerole。
usage:keystone role-create --name <role-name>
keystone role-create –name=computerole
role的创建非常简单, 当时让它生效, 还需要配置各个模块中的policy.json文件, 这个文件中可以指定相关的功能什么样的role可以有权限执行。
openstack中role的相关配置都在/etc/{componentname}/policy.json中,对应关系如下表所示
nova |
/etc/nova/policy.json |
keystone |
/etc/keystone/policy.json |
glance |
/etc/glance/policy.json |
neutron |
/etc/neutron/policy.json |
cinder |
/etc/cinder/policy.json |
heat | /etc/heat/policy.json |
ceilometer | /etc/ceilometer/policy.json |
这些文件默认情况下会提供admin角色权限,在配置中标示不需要admin权限的服务表示此租户下的其他用户都可以访问。
配置文件的格式为json的书写样式,以/etc/nova/policy.json为例,如下
{
"context_is_admin": [["role:admin"]],
"admin_or_owner": [["is_admin:True"], ["project_id:%(project_id)s"]],
"default":[["rule:admin_or_owner"]],
"compute:create":[],
"compute:create:attach_network":[],
"compute:create:attach_volume":[],
"compute:get_all":[],
"admin_api":[["is_admin:True"]],
"compute_extension:accounts":[["rule:admin_api"]],
"compute_extension:admin_actions":[["rule:admin_api"]],
"compute_extension:admin_actions:pause":[["rule:admin_or_owner"]],
"compute_extension:admin_actions:unpause":[["rule:admin_or_owner"]],
"compute_extension:admin_actions:suspend":[["rule:admin_or_owner"]],
"compute_extension:admin_actions:resume":[["rule:admin_or_owner"]],
"compute_extension:admin_actions:lock":[["rule:admin_api"]],
…....
}
回到创建的computerole中,在nova服务中定义此role,在/etc/nova/policy.json中,做如下修改
"compute:create":["role":"computerole"],
"compute:create:attach_network":["role":"computerole"],
"compute:create:attach_volume":["role":"computerole"],
"compute:get_all":["role":"computerole"],
这样就定义好了computerole的权限集合,接下来赋予用户chenxiao在openstackteam租户中享有computerole权限
命令如下
usage:keystone user-role-add --user-id <user-id> --role-id <role-id> [--tenant-id<tenant-id>]
keystoneuser-role-add --user-id=ee31970eb71d444db72381a9542a3b8e --role-id=289b86c57515434e8357a59b6bb95043 --tenant-id=1c5e913ef6074c44acac9a59af246872
至此一个完整的使用配置就此完成
Note:
1.一个用户可以处在多个租户中,可以在不同租户中扮演不同的角色,也可以在一个租户中扮演多个角色
2.当创建一些资源时,指定了特定的租户,这时,这些资源只能被这个租户下的用户所使用
TroubleShoting:
1.当创建一个用户,没有分给任何一个租户,
这时登陆horizon时会报错”You are not authorized for any projects.”
2.各个服务中须设置[filter:authtoken],如nova中,需设置具有admin role的用户及其tenant.
在此需设置项在keystone中已经存在