OpenStack Identity(Keystone)服务为运行OpenStack Compute上的OpenStack云提供了认证和管理用户、账号和角色信息服务,并为OpenStack Object Storage提供受权服务。 数据库
Keystone体系结构
Keystone 有两个主要部件:验证和服务目录 swift
验证:提供了一个基于令牌的验证服务,主要有如下几个概念:
租户(Tenant)
使用OpenStack相关服务的一个组织。一个租户映射到一个Nova的“project-id”,在对象存储中,一个租户能够有多个容器。根据不一样的安装方式,一个租户能够表明一个客户、账号、组织或项目。
用户(User)
表明一个个体,OpenStack以用户的形式来受权服务给它们。用户拥有证书(credentials),且可能分配给一个或多个租户。通过验证后,会为每一个单独的租户提供一个特定的令牌。
证书(credentials)
为了给用户提供一个令牌,须要用证书来惟一标识一个Keystone用户的密码或其它信息
令牌(token)
一个令牌是一个任意比特的文本,用于与其它OpenStack服务来共享信息,Keystone以此来提供一个central location,以验证访问OpenStack服务的用户。一个令牌能够是“scoped”或“unscoped”。一个scoped令牌表明为某个租户验证过的用户,而unscoped令牌则仅表明一个用户。令牌的有效期是有限的,能够随时被撤回。
角色(Role)
一个角色是应用于某个租户的使用权限集合,以容许某个指定用户访问或使用特定操做。角色是使用权限的逻辑分组,它使得通用的权限能够简单地分组并绑定到与某个指定租户相关的用户。 网络
服务目录(Service Catalog)
Keystone为OpenStack安装提供了一个REST API端点列表并以此做为决策参考。主要的概念包括:
服务(Service)
一个OpenStack服务,例如nova、swift、glance或keystone。一个服务能够拥有一个或多个端点,经过它用户能够与OpenStack的服务或资源交互。
端点(Endpoint)
一个能够经过网络访问的地址(典型地,一个URL),表明了OpenStack服务的API接口。端点也能够分组为模板,每一个模板表明一组可用的OpenStack服务,这些服务是跨区域(regions)可用的。
模板(Template)
一个端点集合,表明一组可用的OpenStack服务端点。 url
Keystone的组件
Keystone包含一个命令行接口,能够与Keystone API交互以管理keystone和相关服务。
keystone - 运行keystone-admin和keystone-service
keystone-admin - 操做keystone的管理API
keystone-service - 用于验证的,面向用户的AP
keystone-manage - 管理keystone的命令行接口
Keystone还包括WSGI中间件觉得Nova和Swift提供验证服务。
Keystone使用一个内置的SQLite数据库 - 为验证用户,未来也可能使用一个外部LDAP服务来代替存储证书 命令行
中间件(Middleware)
Keystone中间件位于OpenStack服务前面,处理进来的请求验证。中间件的设计遵循以下的规范。
中间件的源代码位于Keystone/middleware。
中间件支持两个接口:WSGI和REST/HTTP。 设计
REST & HTTP API
若是进来一个未经认证的调用,中间件将响应一个401 Unautorized错误。根据每HTTP的标准,它也会返回一个WWW-Authenticate包头以通知调用者支持哪一个协议。对于Keystone验证,响应的语法格式以下:
WWW-Authenticate: Keystone uri="url to Keystone server"The client can then make the necessary calls to the Keystone server, obtain a token, and retry the call with the token.
令牌使用 X-Auth-Toke包头传递。 server
WSGI API(包头)
当成功验证后中间件经为下行的WSGI应用发送以下包头:
X-Identity-Status
提供请求是否被验证的信息。
X-Tenant
提供了租户ID(在Keystone中以URL的形式出现)。在Keysotne转为采用ID/Name模式以前,它为租户提供了对任意遗留实现的支持。
X-Tenant-Id
惟一不变的租户ID。
X-Tenant-Name
惟一但可变的租户名字。
X-User
用于登陆的用户名。
X-Roles
分配给用户的角色。 中间件