Keystone
1.身份服务
1.1简介
- Keystone(OpenStack Identity Service)是OpenStack中的一个独立的提供安全认证的模块,主要负责openstack用户的身份认证、令牌管理、提供访问资源的服务目录、以及基于用户角色的访问控制。
- Keystone类似一个服务总线,或者说是整个OpenStack框架的注册表,其他服务通过keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互调用,需要经过Keystone的身份验证,来获得目标服务的Endpoint来找到目标服务。
1.2主要功能
- 身份认证(Authentication):令牌的发放和效验
- 用户授权(Authorization):授予用户在一个服务中所拥有权限
- 用户管理(Account):管理用户账户
- 服务目录(Service Catalog):提供可用服务的API端点
2.相关组件
相关概念
2.1User
OpenStack最基本的用户。
User即用户,他们代表可以通过keystone进行访问的人或程序。Users通过认证信息(credentials,如密码、API
Keys等)进行验证。
2.2Project(Tenant)
指分配给使用者的资源的集合。
Tenant即租户,它是各个服务中的一些可以访问的资源集合。例如,在Nova中一个tenant可以是一些机器,在Swift和Glance中一个tenant可以是一些镜像存储,在Neutron中一个tenant可以是一些网络资源。Users默认的总是绑定到某些tenant上。
2.3Role
Role即角色,Roles代表一组用户可以访问的资源权限,例如Nova中的虚拟机、Glance中的镜像。Users可以被添加到任意一个全局的或租户的角色中。在全局的role中,用户的role权限作用于所有的租户,即可以对所有的租户执行role规定的权限;在租户内的role中,用户仅能在当前租户内执行role规定的权限。
2.4Authentication
是一个字符串表示,作为访问资源的令牌。Token包含了在指定范围和有效时间内,可以被访问的资源
2.5Credentials
用于确认用户身份的凭证。用户的用户名和密码,或者是用户名和API密钥,或者身份管理服务提供的认证令牌
2.6Service
Service即服务,如Nova、Glance、Swift。根据前三个概念(User,Tenant和Role)一个服务可以确认当前用户是否具有访问其资源的权限。但是当一个user尝试着访问其租户内的service时,他必须知道这个service是否存在以及如何访问这个service,这里通常使用一些不同的名称表示不同的服务。
2.7Endpoint
服务的URL路径,暴露出来的访问点。
Endpoint,翻译为“端点”,我们可以理解它是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道他的endpoint。因此,在keystone中包含一个endpoint模板,这个模板提供了所有存在的服务endpoints信息。一个endpoint template包含一个URLs列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这三种权限。public url可以被全局访问,private url只能被局域网访问,admin url被从常规的访问中分离。
Endpoint分为三类:
- admin url —>管理员用户使用 Port:35357
- internal url —>openstack内部组件间互相通信 Port:5000 (组件之间通信基于Restful api)
- public url —> 其他用户访问地址 Port:5000
2.8Domain
定义管理边界,可以包含多个project,user,role.
2.9Token
Token是访问资源的钥匙。它是通过Keystone验证后的返回值,在之后的与其他服务交互中只需要携带Token值即可。每个Token都有一个有效期,Token只在有效期内是有效的。
2.10Policy
OpenStack对User的验证除了OpenStack的身份验证以外,还需要鉴别User对某个Service是否有访问权限。Policy机制就是用来控制User对Tenant中资源(包括Services)的操作权限。对于Keystone service来说,Policy就是一个JSON文件,默认是/etc/keystone/policy.json
。通过配置这个文件,Keystone Service实现了对User基于Role的权限管理。
3.认证流程
1.user使用命令或控制台登录,需要先将自己的资格证书发给keystone,认证成功后,keystone会给与用户一个临时令牌和一个访问服务的端点
2.user把临时的令牌交给keystone,发送创建虚拟机请求,nova收到令牌后,会向拿着令牌向keystone确认合法性,keystone认证成功后返回给nova
3.nova创建虚拟机需要镜像,所以拿着请求镜像服务的令牌给与glance服务,glance收到令牌后拿着令牌向keystone认证合法性,keystone认证成功后返回给glance,此时glance服务将nova所请求的镜像给与nova
4.nova创建虚拟机需要虚拟网络,所以向neutron发出请求,neutron收到nova给与的令牌向keystone认证合法性,是否可用,keystone认证成功后返回给neutron,随即neutron给与nova提供所需的网络服务
neutron收到nova给与的令牌向keystone认证合法性,是否可用,keystone认证成功后返回给neutron,随即neutron给与nova提供所需的网络服务,neutron收到nova给与的令牌向keystone认证合法性,是否可用,keystone认证成功后返回给neutron,随即neutron给与nova提供所需的网络服务
5.最后nova服务开始创建vm虚拟机,创建完成后返回信息给user: the vm is create sucessfull