Keystone身份认证--主要总结Role的相关配置

来源:互联网 发布:冒险岛数据库不能用了 编辑:程序博客网 时间:2024/06/08 14:27

用户管理 三个概念TenantUserRole

   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=chenxiao@example.com


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.jsonceilometer/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中已经存在


1 0
原创粉丝点击