KeyStone 简要分析一,KeyStone是什么keyStone是openstack中提供identity,token,catalog和policy服务的组件,实现了openstack的身份认证API。 ​ 身份认证服务包含了两个基本服务: - 用户管理:记录用户和用户所被允许执行的工作。
- 服务日志:提供一个关于什么服务是被允许的和它们的AP入口位置的日志。
二.KeyStone 架构KeyStone根据传统,承担了一组内部服务,向外暴露一个或多个服务入口节点。 身份认证:身份认证服务为用户,租客和角色(for USER,Tenant and Role)提供了认证评估验证和和数据以及相关元数据; Token:在一个user或者tenant在验证之后,发给其一个Token,Token服务可以验证并管理这些Token(类似cookie) Catalog:记录所有endpoint(入口)在需要服务时查询catalog即可 Policy:提供基于规范的认证引擎
​ 每个服务可以根据当前环境进行设置来适应当前需求。可以在keystone.conf里设置后端。 - KVS Backend:一个简单的后端接口,需要更深入的设置
- SQL Backend:一个基于SQLAchemy(python操作SQL的工具包)完成的后端,用于储存数据。
- PAM Backend:使用了当前系统的PAM服务用于认证,提供user和tenant一对一关联。(extra)
- LDAP Backend:把user和tenant储存在不同的子树中
- template Backend:泛式设置keystone
三,keystone用户管理
1. User:代表一个个体用户,与用户名,密码和email相关联。一个user与一个特定的domain相关,所以username不需要全局唯一,只需要域内唯一。(许多user可以组成一个group,group被一个domain拥有,group名也是域唯一)
2. tenant:一个项目,组织等。 只有tenant才能与openstack服务提出request
3. role:代表一类在指定tenant下的role(可执行的动作)四.应用架构KeyStone中使用REST API的服务通过HTTP交互 KeyStone中与flask-RESTful相关的方法在keystone.server.flask.common KeyStone的API资源继承自keystone.server.flask.common.ResourceBase并暴露HTTP方法(GET,PUT,POST,PATCH和DELETE) class UserResource(ks_flask.ResourceBase): collection_key = 'users' member_key = 'user' get_member_from_driver = PROVIDERS.deferred_provider_lookup( api='identity_api', method='get_user') def get(self, user_id=None): """Get a user resource or list users. GET/HEAD /v3/users GET/HEAD /v3/users/{user_id} """ ... def post(self): """Create a user. POST /v3/users """ ...class UserChangePasswordResource(ks_flask.ResourceBase): @ks_flask.unenforced_api def post(self, user_id): ...
API路由 class UserAPI(ks_flask.APIBase): _name = 'users' _import_name = __name__ resources = [UserResource] resource_mapping = [ ks_flask.construct_resource_map( resource=UserChangePasswordResource, url='/users/<string:user_id>/password', resource_kwargs={}, rel='user_change_password', path_vars={'user_id': json_home.Parameters.USER_ID} ), ...
Service和Endpoint的关系- openstack中,每一个service都三种endpoint:Admin,internal和public(创建完service后需要为其创建API EndPoint. )
- Admin是用作管理用途的,如它能够修改user/tenant(project)。
- public 是让客户调用的,比如可以部署在外网上让客户可以管理自己的云。
- internal是openstack内部调用的。
- 三种endpoints 在网络上开放的权限一般也不同。Admin通常只能对内网开放,public通常可以对外网开放,internal通常只能对安装有openstack对服务的机器开放。
每个你部署的openstack服务都需要绑定endpoint(存储在keystone中)来提供服一个服务的入口,因而我们第一需要部署的组件就是keystone。 五.小结nstack对服务的机器开放。 每个你部署的openstack服务都需要绑定endpoint(存储在keystone中)来提供服一个服务的入口,因而我们第一需要部署的组件就是keystone。 五.小结KeyStone是为用户创建令牌凭证,提供服务入口,为其他openstack服务提供凭证验证服务的组件,是构建openstack服务的第一个组件,并可以为用户授权和定义行为,可以在KeyStone中窥得其他服务及其endpoint。
|