标签:关系 注意 认证通过 mysq 访问控制 网络 ted curl 存储
keystone是OpenStack的身份服务,暂且可以理解为一个‘与权限有关‘的组件。
Keystone项目的主要目的是为访问openstack的各个组件(nova,cinder,glance...)提供一个统一的验证方式,具体的:
openstack是由众多组件构成的一套系统,该系统的功能是对外提供服务,因而我们可以将其定义为一个‘庞大的软件’,没有软件不考虑安全因素,Keystone对于通常的应用场景所不同的是他要解决分布式环境下的统一认证。
openstack是一个SOA架构,理论上各子项目独立提供相关服务,互不依赖,且是分布式的。如nova提供计算服务,glance提供镜像服务等。
实际上所有的组件都依赖keystone(单点的),它集成了三个功能:
(1)管理身份验证(managing authentication):验证用户身份
(2) 授权(authorization):基于角色role的权限管理
(3)服务目录(catalog of services):提服务目录(ServiceCatalog:包括service和endpoint)服务,类似于UDDI服务的概念,用户(无论是Dashboard, APIClient)都需要访问Keystone获取服务列表,以及每个服务的地址(Openstack中称为Endpoint)
/etc/keystone/policy.json
。通过配置这个文件,Keystone实现了对User基于Role的权限管理。用户和服务可以使用使用keystone管理的catalog,定位到其他的服务,catalog一个openstack部署的相关服务的集合,每个服务都有一个或者多个endpoint(即可以访问的url地址),即catalog=services+endpoint。每个endpoint可以分为三种类型:
admin,internal,public,在生产环境中,不同endpoint类型位于不同的网络来为不同的用户使用(提高安全性),比如:
public API:对整个互联网可见,这样客户就可以方便的管理自己的云了。
admin API:应该严格限定只有管理云基础设施的组织内的运营商,才能使用该API
internel API:应该被限定只有那些安装有OpenStack服务的主机,才能使用该API
我们使用keystone为服务5d533c68-d234-11e6-a0d7-0088653ea1ec定制endpoint: $ keystone endpoint-create --region RegionOne --service-id=5d533c68-d234-11e6-a0d7-0088653ea1ec --publicurl=‘https://public-ip:8776/v1/%(tenant_id)s‘ --internalurl=‘https://management-ip:8776/v1/%(tenant_id)s‘ --adminurl=‘https://management-ip:8776/v1/%(tenant_id)s‘ 然后你可以配置 OpenStack service 使用另一个 service 的 endpoint 的 internalurl 去访问另一个资源。
openstack支持多个可扩展的regions,OpenStack的支持可扩展的多个区域。为简单起见,一般使用管理网络ip地址作为所有endpoint类型(三种api)的ip,且所有的endpoint类型(三种api)都使用一个区域,即regionone区。
每个你部署的openstack服务都需要绑定endpoint(存储在keystone中)来提供服一个服务的入口,因而我们第一需要部署的组件就是keystone。
keystone管理和保存了user信息,管理user相关的tenant,role,group和domain等;用户credential的存放,验证,token管理,下图是各部分关系
注意:user2,user3,user4的关系同user1一样,也可以属于一个或者多个group,此处为了图示简洁,省去了它们的连线
keystone包含三类组件:
使用RESTful接口(三种api)提供认证和授权服务的集中式server
指的是被集成到server内的驱动或者服务后端,它们被用来在openstack组件之外的库中访问身份信息(言外之意:mysql并不属于openstack的组件/服务),并可能已经存在于openstack部署的架构中(比如, SQL databases or LDAP servers).
中间件运行在正在使用认证服务的openstack组件的地址空间,这些模块(中间件)拦截服务请求,提取用户的credentials,并且把它们发送给server去认证授权,在openstack中间件与openstack组件直接的整合操作使用Python Web Server Gateway Interface,即wsgi,详见http://www.cnblogs.com/linhaifeng/p/6268615.html
keystone是用户与云平台交互的第一个服务,一旦认证通过,用户就会使用自己的身份来访问其他的opnestack服务,同样,被访问的openstack服务会去跟keystone再次确认用户(不能只能用户的片面之词)并且通过keystone可以发现其他服务(catalog的原因),keystone的还可以整合其他的用户管理系统,比如LDAP
(1) User从Keystone获取令牌以及服务列表;
(2) User访问服务时,亮出自己的令牌。
(3)相关的服务向Keystone求证令牌的合法性。
用户alice登录keystone系统(password或者token的方式),获取一个临时的token和catalog服务目录(v3版本登录时,如果没有指定scope,project或者domain,获取的临时token没有任何权限,不能查询project或者catalog)。
alice通过临时token获取自己的所有的project列表。
alice选定一个project,然后指定project重新登录,获取一个正式的token,同时获得服务列表的endpoint,用户选定一个endpoint,在HTTP消息头中携带token,然后发送请求(如果用户知道project name或者project id可以直接第3步登录)。
消息到达endpoint之后,由服务端(nova)的keystone中间件(pipeline中的filter:authtoken)向keystone发送一个验证token的请求。(token类型:uuid需要在keystone验证token,pki类型的token本身是包含用户详细信息的加密串,可以在服务端完成验证)
keystone验证token成功之后,将token对应用户的详细信息,例如:role,username,userid等,返回给服务端(nova)。
服务端(nova)完成请求,例如:创建虚拟机。
服务端返回请求结果给alice。
openstack项目【day23】:openstack-keystone-keystone基础
标签:关系 注意 认证通过 mysq 访问控制 网络 ted curl 存储
原文地址:http://www.cnblogs.com/luoahong/p/7200891.html