Openstack之Keystone基础
Keystone是Openstack的身份管理服务(Identity Service)。在Openstack的整体框架结构中,Keystone的作用类似一个服务总线,Nova、Glance、Horizon、Swift、Cinder以及Neutron等其他服务通过Keystone来注册其服务的Endpoint,针对这些服务的任何调用都需要经过Keystone的身份认证,并获得服务的Endpoint来进行访问。
1、一些基本概念
User:用户。通过keystone访问Openstack服务的个人、系统或者是某个服务,keystone会通过认证信息(Credential,比如密码等)验证用户请求的合法性,通过验证的用户将会分配到一个特定的令牌,该令牌可以用于后续资源访问的一个通行证。
Tenant:租户。从实际情况来看,可以把租户理解成一个组织或者是一个项目。租户是各个服务中的一些可以访问的资源的集合,例如,在Nova中,可以把租户理解成一组虚拟机的拥有者,在Swift中则是一组容器的拥有者。基于此,我们需要在创建虚拟机时指定某个租户,在Cinder创建卷时也要指定具体的租户。用户默认总是绑定到某个租户上,用户访问租户的资源前,必须与该租户关联,并且指定该用户在租户下的角色。
Role:角色。一个用户所具有的角色,角色不同意味着被赋予的权限不同,只有知道用户被授予的角色才能知道该用户是否有权限访问某资源。用户可以被添加到任意一个全局的或租户内的角色中,在全局的角色中,用户可以对所有的租户执行角色所规定的权限,在租户内的角色中,用户仅可以在当前租户内执行角色规定的权限。
Service:服务,比如Nova、Swift、Glance、Cinder等。根据User、Tenant和Role一个服务可以确认当前用户是否具有访问其资源的权限。服务对外暴露一个或者多个Endpoint,用户是有通过这些Endpoint才可以访问所需资源或者执行某些操作。
Endpoint:端点。指一个可以用来访问某个具体服务的网络地址,因此我们可以将端点理解为服务的访问点,如果需要访问一个服务,就必须知道它的Endpoint。一般以一个URL地址来表示一个端点,URL具有Public、Internal和Admin三种,Public URL是为全局提供的服务端点,Internal URL相对于Public URL来说提供内部服务之间的访问,Admin URL是提供给管理员使用。
Token:令牌。用户通过Credential获取在某个租户下的令牌,以及令牌的颁发时间和有效时间。
Credentials:凭证。用户的用户名和密码,或者是用户名和API密钥,或者是身份管理服务提供的认证令牌。
Domain:Keystone V3 API中新加的概念。一个域可以包含多个项目,用户被赋予域管理员权限,那么他就可以创建属于域的用户/组,定义用户在该域内的角色。一个域的管理员权限只限定于此域。而在V2 API中管理员权限是全局的。
Group:Keystone V3 API中新加的概念。组是用户的集合,有了组之后,域管理员就无需针对单个的用户来定义其角色了,换言之,它可以直接定义一个组所对应的角色,而这个组中的所有用户都具有该角色。
2、Keystone工作流程
一次创建虚拟机的操作涉及的Keystone的工作流程如下:
第一步:用户发送自己的凭证到Keystone,Keystone认证通过后,返回给Alice一个token1以及服务目录。
第二步:用户通过token1请求Keystone查询他所拥有的Tenant,Keystone验证token1成功后,返回用户一个Tenant列表。
第三步:用户选择一个租户,发送自己的凭证给Keystone申请token,Keystone验证后,返回token2。与此同时,Keystone还将服务端点列表返回给用户。
第四步:用户选择Endpoint并发送token2至Endpoint请求创建虚拟机,此时会再次向Keystone验证token2的有效性,并验证用户是否有相应操作的权限。
第五、六、七步:通过验证后,访问Service,Service创建虚拟机并将结果返回。
下图也描述了创建虚拟机的过程:
文章后面会提到该方式的局限性。
3、Keystone的内部功能
在上一节创建虚拟机的过程中,Keystone是通过一系列内部服务(功能)来完成其工作的,这些内部服务(功能)包括:
Identity
:
The Identity service provides auth credential validation and data about Users,Groups.
Resource
:
The Resource service provides data about Projects and Domains.
Assignement
:
The Assignment service provides data about Roles and Role assignments tothe entities managed by the Identity and Resource services.
Token
:
The Token service validates and manages Tokens used for authenticatingrequests once a user’s credentials have already been verified.
Catalog
:
The Catalog service provides an endpoint registry used for endpointdiscovery.
Policy
:
The Policy service provides a rule-based authorization engine and theassociated rule management interface.
每个
Keystone
功能都支持用于集成到异构环境并展示不同功能的后端插件。更常见的一些后端包括:
Key Value Store
:一个接口,支持主键查找,例如内存中的字典。
Memcached
:分布式内存缓冲系统。
Structured Query Language (SQL)