Keystone的英文是OpenStack Identity Service,它是OpenStack框架中负责身份验证、服务规则和服务令牌的功能,它实现了OpenStack的验证API。Keystone类似于一个服务总线,或者说是整个OpenStack框架的注册表,其他服务通过Keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互的调用,都需要经过Keystone的身份验证,才能获得目标服务的Endpoint来找到目标服务。
Keystone基本概念如下。
1)User:用户。通过Keystone访问OpenStack服务的人或程序,Keystone会通过认证信息(credential),如密码、API Key等验证用户请求的合法性,通过了验证的用户将会被分配一个特定的令牌,该令牌是用于后续资源访问的一个通行证。
2)Tenant:租户。它是各个服务中一些可以访问的资源集合。例如,在Nova中,可以把租户理解成一组虚拟机的拥有者,在Swift中则是一组容器的拥有者。基于此,需要在创建虚拟机时指定某个租户,在Cinder创建卷也要指定具体的租户。用户默认总是绑定到某些租户上,用户访问租户的资源前,必须与该租户关联,并且指定该用户在该租户下的角色。
3)Role:角色。即一个用户所具有的角色,角色不同意味着被赋予的权限不同,只有知道用户所被授予的角色,才能知道该用户是否有权限访问某资源。用户可以被添加到任意一个全局的或租户内的角色中,在全局的角色中,用户可以对所有的租户执行角色所规定的权限;在租户内的角色中,用户仅可以在当前租户内执行角色规定的权限。
4)Service:服务。比如Nova、Swift、Clance、Cinder等。根据前3个概念(User、Tenant和Role)一个服务可以确认当前用户是否具有访问其资源的权限。但是当一个用户尝试着访问其租户内的服务时,他必须知道这个服务是否存在,以及如何访问这个服务,这里通常使用不同的名称表示不同的服务。前面介绍的角色,实际上也是可以绑定到某个服务的。例如,当Swift需要一个管理员权限的访问进行对象创建时,对于相同的角色我们并不一定也需要对Nova进行管理员权限的访问。为了实现这个目标,应该创建两个独立的管理员角色,一个绑定到Swift,另一个绑定到Nova,从而实现对Swift进行的管理员权限访问不会影响到Nova或其他服务。
5)Endpoint:端点。可以理解为它是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道他的端点。因此,在Keystone中包含一个端点模板(Endpoint Template),在安装Keystone时可以在conf文件夹下看到这个文件,这个模板提供了所有存在的服务的端点信息。一个端点模板包含一个URL列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这3种权限。public URL可以被全局访问(如http://compute.example.com),private URL只能被局域网访问(如http://compute.example.local),admin URL被从常规的访问中分离。
6)Token:令牌。用户通过Credential获取在某个租户下的令牌,以及令牌的颁发时间和有效时间。
7)Credetial:凭证。可以是用户的用户名和密码,或者是用户名和API密钥,或者是身份管理服务提供的认证令牌。
基于这些核心的概念,Keystone主要提供了Idcntity(认证)、Token(令牌)、Catalog(目录)和Policy(安全策略,或者说访问控制)4个方面的服务。
1)Identity:对用户的身份进行验证,用户的身份凭证通常以用户名和密码的形式呈现,认证服务同时提供了与该用户相关的元数据的提取。
2)Token:用Identity确认用户的身份之后,会给用户提供一个核实该身份并且可以用于请求后续资源的令牌,令牌服务则验证并管理用于验证身份的令牌。Keystone会颁发给通过认证服务的用户两种类型的令牌:一类是与用户无关的令牌,通过这个令牌,可以向Keystone查询租户列表,用户可以选择要访问的租户;继而可以获取另—类与此租户相绑定的令牌,只有通过与某个特定租户相绑定的令牌,才可以访问此租户中的资源。令牌只在有限的时间内有效,如果需要删除特定用户的权限,删除该令牌即可。
3)Catalog:对外提供一个服务的查询目录,或者说是每个服务可访问的端点列表。服务目录存有所有服务的端点信息,服务之间的资源访问首先需要获取该资源的端点信息,通常是一些URL列表,然后才可以根据该信息进行资源访问。从目前的版本来看,Keystone提供的服务日录是与令牌同时返回给用户的。
4)Policy:一个基于规则的身份验证引擎,通过配置文件来定义各种动作与用户角色的匹配关系。严格来讲,这部分内容现在已经不隶属于Keystone项目了,因为访问控制在不同的项目中都会涉及,所以这部分内容是作为Oslo的一部分进行开发维护的。
通过这几个服务,Keystone在用户与服务之间架起一道桥梁:用户从Keystone获取令牌以及服务列表;用户访问服务时,发送自己的令牌;相关的服务向Keystone求证令牌的合法性。
Keystone对用户认证和服务认证的工作流程如图11-1所示。
图11-1 Keystone对用户认证和服务认证的工作流程
1)用户发送自己的凭证到Keystone,Keystone认证通过后,返回给用户一个令牌以及服务目录。
2)用户根据服务目录选择需要的服务,包含令牌和服务请求一起发送给服务节点。
3)服务节点和Keystone交互验证用户的令牌的合法性。
4)如果令牌合法性通过验证,服务节点执行用户要求的服务,并返回结果给用户;如果未通过验证,回复合法性验证不成功的结果给用户。