梯形的概念和实现原理

  

一、Keystone的概念

Keystone是OpenStack组件之一——Identity Service(认证服务)成立的核心项目。该项目整体上相对于其他项目并不复杂,其类似于一个服务总线,也可以理解为整个OpenStack服务框架的注册表,OpenStack中其他项目通过Keystone可以注册其服务然后获得该服务的Endpoint(服务的访问端口,或者理解为入口),这个Endpiont可以是一个也可以是多个。此外,任何服务之间的调用也需要通过Keystone的认证才能获得目标服务的Endpoint来访问对应服务。

当然,既然是认证服务,就有一定的认证机制,那么思考一下在生活中可以想到有什么类似认证的例子?

其实,这样的例子很多,家家户户的锁匙就是一种认证机制,再比如支付宝账号密码登录也是认证机制的典型例子,再如,各种门票入场券都可以认为是一种认证机制。

总而言之,Keystone项目就是通过相应的认证授权形式来向其他服务或其他服务之间提供服务支持,其主要功能就是对用户和服务进行管理的。因此我们要理解如何管理用户以及服务,就需要对Keystone的主要模块构成熟悉理解。

二、Keystone的主要组成

本小节将介绍Keystone对用户和服务进行管理层面上对应组成概念及作用的介绍,介绍过程中涉及的术语都会在下文进行详细介绍,可以自行查阅理解。

2.1 User

表示使用服务的用户,可以是人,服务或者系统,只要是使用了openstack服务的对象都可以称为用户。当User对OpenStack进行访问时,Keystone会对其身份进行验证,验证通过的用户可以登录OpenStack云平台并且通过其颁发的Token(下面会讲解)去访问资源,用户可以被分配到一个或者多个tenant或project(下文给出介绍)中。

2.2 Tenant

表示使用访问的租户,作用是对资源进行分组,或者说是为了使提供的资源之间互相隔离,可以理解为一个一个容器,也称为Project。

在一个租户中可以拥有很多个用户,用户也可以隶属于多个租户,但必须至少属于某个租户。租户中可使用资源的限制称作Tenant Quotas,联想一下Linux系统磁盘管理的磁盘配额,这个Quotas的含义就是配额、限额。用户可以根据权限的划分使用租户中的资源。

2.3 Token

表示提供进行验证的令牌,是Keystone分配的用于访问OpenStack API和资源服务的字符串文本。用户的令牌可能在任何时间被撤销(revoke),就是说用户的Token是具有时间限制的,并且在OpenStack中Token是和特定的Tenant(租户)绑定的,也就是说如果用户属于多个租户,那么其就有多个具有时间限制的令牌。

2.4 Credential

表示用户凭据,用来证明用户身份的数据,可以是用户名和密码、用户名和API Key,或者是Keystone认证分配的Token。

2.5 Authentication

表示身份认证,是验证用户身份的过程。将上面的几个结合起来简单说明一下该过程。

首先,用户申请访问等请求,Keystone服务通过检查用户的Credential确定用户身份;然后,在第一次对用户进行认证时,用户使用用户名和密码或用户名和API Key作为Credential;其次,当用户的Credential被验证之后,Keystone会给用户(用户必定至少属于一个租户)分配一个Authentication Token来给该用户之后去使用。

2.6 Service

表示服务,有OpenStack提供,例如Nova、Swift或者Glance等等,每个服务提供一个或多个Endpoint(服务的入口)来给不同角色的用户进行资源访问以及操作。

2.7 Endpoint

表示服务的入口,是一个由Service监听服务请求的网络地址。客户端要访问某个service,就需要通过该service通过的Endpoint(通常是可以访问的一个URL地址)。在OpenStack服务架构中,各个服务之间的相互访问也需要通过服务的Endpoint才可以访问对应的目标服务。

2.8 Role

表示角色,类似一访问控制列表——ACL的集合。主要是用于分配操作的权限。角色可以被指定给用户,使得该用户获得角色对应的操作权限。其实在Keystone的认证机制中,分配给用户的Token中包含了用户的角色列表。

换言之,Role扮演的作用可以理解为:当服务被用户访问时,该服务会去解析用户角色列表中的角色的权限(例如可以进行的操作权限、访问哪些资源的权限)。

2.9 Policy

表示策略,用于控制某一个Tenant中的某一个User是否具备某个操作的权限。也就是说,通过Policy机制,依据配置文件(默认是在/etc/keystone/目录下的policy.json文件),可以决定用户可以执行什么操作,不能执行什么操作。

梯形的概念和实现原理