好东西,收藏一下:
在理解keystone 授权机制之前,先明白其中的一些基本概念:
- User: 所谓的User代表着一些人或者能够通过keystone获取访问的something。User通过自身的证书例如username & password 或者 api keys来访问服务。
- Tenant:Tenant代表nova中的一个project,就是能够聚合一些服务中的一些资源。例如,一个tenant能够有一些nova中的虚拟机,glance中的一些images,quantum中的一些networks,users默认的绑定到某个tenant中。
- Role:代表一组用户能够一定程度的访问资源。例如能够访问nova中的vms,glance中的images。Users能够被添加到所有的tenants中或者某个tenant。用户就获取了对相应tenant中对应角色获取的访问资源的权限。
- service: 某类型的服务,例如nova, quantum, glance等等都是服务
- endpoint: 访问服务的入口点,一个http路径。例如:catalog.RegionOne.image.internalURL = http://10.10.102.14:9292,可以通过此URL访问image服务
接下来,分析用户在访问一个服务的过程中,keystone都做了哪些工作,整个过程描述如下:
1. 获取token
首先,需要确认你将访问那个tenant,必须使用keystone来获取一个unscoped token(意味着这个token没有和特定的tenant绑定),这个unscoped token能够用来深入查询keystone service,确定你能访问哪些tenants。获取一个unscoped token,使用典型的REST API,在request的body中不指定tenantName。例如:
经过成功的验证,返回的response大致如下,其中的token id就是获取到的unscoped token(访问路径:/access/token/id),token id 将被在下一次的请求中作为X-Auth-Token的值,用来标识身份。