openstack-Keystone身份认证服务

openstack-Keystone身份认证服务

  • Keystone概念
    • 主要功能
    • Keystone的管理对象
    • Keystone工作流程
    • keystone访问流程

Keystone概念

Keystone (OpenStack Identity Service)是OpenStack中的一个独立的提供安全认证的模块,主要负责openstack用户的身份认证、令牌管理、提供访问资源的服务目录、以及基于用户角色的访问控制。

Keystone类似一个服务总线,或者说是整 个Openstack框架的注册表,其他服务通过keystone来注册其服务的Endpoint (服务访问的URL),任何服务之间相互的调用,需要经过Keystone的身 份验证,来获得目标服务的Endpoint来找到目标服务。

主要功能

身份认证:负责令牌的发放和校验
用户授权:授权用户有指定的可执行动作的范围
用户管理:管理用户的账户
服务目录:提供可用服务的API端点位置

Keystone的管理对象

Keystone服务贯穿整个架构,在进行身份认证服务的整个流程中,有几个重要的概念。

  • 用户(user):指的是使用openstack架构的用户。

  • 证书(credentials):用于确认用户身份的凭证,证明自己是自己,包括用户的用户名和密码,或是用户名和API密钥,或者身份管理服务提供的认证令牌。
    (1):用户名和密码
    (2):用户名跟API Kye(秘钥)             
    (3):一个keystone分配的身份的token

(1)(2)用户第一次确认身份的方法
(3)用户已经确认身份后的方法 (token是有时间限制的)

  • 认证(authentication):确定用户身份的过程。
    (1):用户身份验证的过程。keystone服务通过检查用户的Credentials来确定用户的身份
    (2):第一次验证身份是使用用户名与密码或者用户名与API Key的形式。当用户的Credentials被验证后,keystone会给用户分配一个Authentication token 供该用户的后续请求操作(返回的token中就包含User的Role列表)

  • 项目(project):可以理解为一个人,或服务所拥有的资源的集合。
    (1):Project(Tenant)是一个人或服务所拥有的资源集合。不同的Project之间资源是隔离的,资源可以设置配额
    (2):Project(Tenant)中可以有多个User,每一个User会根据权限的划分来使用Project(Tenant)中的资源
    (3):User在使用Project(Tenant)的资源前,必须要与这个Project关联,并且制定User在Project下的Role,一个assignment(关联) 即:Project-User-Role

  • 角色(role):用于划分权限,通过给user指定role,使user获得role对应操作权限
    (1):本身是一堆ACL集合,主要用于权限的划分。
    (2):可以给User指定Role,是user获得role对应的操作权限。
    (3):系统默认使用管理Role的角色 管理员用户:admin 普通用户:member(老版本) user(新版本)
    (5):user验证的时候必须带有Project。老版本叫(Tenant)
    大体流程如下图:
    openstack-Keystone身份认证服务_第1张图片

  • 服务(service):openstack架构的组件服务,如nova、neutron、cinder、swift、glance等。
    即服务,如Nova,Glace,等各个组件

  • 令牌(token):由字符串表示,作为访问资源的凭证,是用户的身份/权限证明文件;
    token决定了用户的权限范围,在指定的权限内进行操作;也包括令牌的有效期,在指定的时间范围内用户才有这些权限。

  • 端点(endpoint):一个可以通过网络来访问和定位某个openstack service的地址,即用户创建一个项目过程中需要的各个服务资源的位置
    (1):用来通过访问和定位某个openstack service的地址,通常是一个URL
    (2):不同的region有不同的Endpoint(region使用与跨地域的云服务,比如像阿里云有华北,华东等等,)
    (3):任何服务都访问openstack service中的资源时,都要访问keystone
    (4):Endpoint分为三类:
    admin url —>管理员用户使用 Port:35357
    internal url —>openstack内部组件间互相通信 Port:5000 (组件之间通信基于Restful api)
    public url —> 其他用户访问地址 Port:5000
      region异地建机房,如下图
    openstack-Keystone身份认证服务_第2张图片

  • Service与Endpoint关系
    (1)在openstack中,每一个service中都有三种Endpoint:Admin、Public、Internal(创建完service后需要为其创建API Endpoint)
    (2)Admin使用者为管理员,能够修改User Project(Tenant)
    (3)public使用者为客户端,使用者在外网管理自己云服务器
    (4)internal使用者为内部组件间相互调用
    (5)三种Endpoint在网络上开放的权限也不同,Admin通常只能对内网开放,public通常可以对外网开放,internal只能对有安装openstack服务的机器开放

  • V3版本更新
    1.Tenant更改为Project
    2.添加了Domain(对系统资源进行限额)
    3.添加了Group (组的概念为了更好的管理用户,例如linux下对组授权,其组下面的用户也有了相应的权限)
    4.member更改为user

图片理解
openstack-Keystone身份认证服务_第3张图片
举个例子
将上面各个部分结合起来。
比如说,某公司年会组织跟团去旅游(公司相当于一个group,公司的员工相当于User)。
到了晚上要住店,首先要先到前台登记(前台就相当于Keystone),对前台(keystone)来说,你要住店要拿出你的证明(对keystone来说就是要证明你是你)。
怎么办?拿出身份证,这里的身份证就相当于Credentials(用户名和密码),前台(keystone)会进行验证你的身份信息(Authentication),验证成功后,前台(Keystone)会给你一个房卡(Token),并且有不同的房卡(比如:普通卡,会员卡,白金卡等),不同的卡有不同的权限(Role),并且拿到房卡后,前台(keystone)会给你一个导航图(Endpoint)让你找到你的房间。
一个酒店不光会有住宿服务,可能还有别的
服务(service)
,像餐饮,娱乐,按摩等等,比如说要去吃饭,不知道路线怎么走,看一下导航图(endpoint)就知道了,到餐饮部门(service)会有三个路线(Endpoint)可以走。为什么会有三个,领导层通道 --> 走后门(admin)内部员工通道 -->(internal)客人通道 -->(public)。知道如何去,也有了权限(Token/Role)到了餐饮部门,当你点餐的时候,会让你刷上你的会员卡(这个步骤就是service向keystone确认你有没有权限),验证成功后,你就可以点餐吃饭

Keystone工作流程

以用户想要通过openstack平台创建一个虚拟机的过程为例:
openstack-Keystone身份认证服务_第4张图片

  • 用户通过命令行或者horizon控制面板的方式登录openstack,凭借自己的证书(credentials)给keystone验证。
    Keystone对用户的证书验证,验证通过则会发布一个令牌(token)和用户所需服务的位置点(endpoint)给用户。
  • 用户得到了位置点(endpoint)之后,携带自己的令牌,向nova发起请求,请求创建虚拟机。
  • nova会拿着用户的token向keystone进行认证,看是否允许用户执行这样的操作。
  • keystone认证通过之后,返回给nova,nova即开始执行创建虚拟机的请求。首先需要镜像资源,nova带着令牌(token)和所需要的镜像名向glance提出镜像资源的请求。
  • glance会拿着token去向keystone进行认证,看是否允许提供镜像服务。keystone认证成功后,返回给glance。glance向nova提供镜像服务。
  • 创建虚拟机还需要网络服务,nova携带token向neutron发送网络服务的请求
  • neutron拿着nova给的token向keystone进行认证,看是否允许向其提供网络服务。keystone认证成功后,返回给nuetron。nuetron则给nova提供网络规划服务。
  • nova获取了镜像和网络之后,开始创建虚拟机,通过hypervisior可调用底层硬件资源进行创建。创建完成返回给用户,成功执行了用户的请求。

上面的图主要是讲述keystone在各个组件之间的作用,先不要去想别的组件是如何工作的。通过上面那幅图可以看出来keystone在各个组件间扮演着一个中间人的作用,每个服务于服务间使用或者某个用户与服务间的使用,都要先到keystone这里来报道!

keystone访问流程

openstack-Keystone身份认证服务_第5张图片

以创建一个虚拟机(server)为例,结合下图简述下keystone在openstack的访问流程。
1)用户Alice通过自己的户名和密码向keystone申请token,keystone认证用户名和密码后,返回token1
2)Alice通过token1发送keystone查询他所拥有的租户,keystone验证token1成功后,返回Alice的所有Tenant
3) Alice选择一个租户,通过用户名和密码申请token,keystone认证用户名、密码、tenant后,返回token2。(其实1、2步仅仅是为了查询tenant,如果已经知道tenant,可以忽略1、2步)
4)Alice通过token2发送创建server的请求,keystone验证token2(包括该token是否有效,是否有权限创建虚拟机等)成功后,然后再把请求下发到nova,最终创建虚拟机

你可能感兴趣的:(openstack-Keystone身份认证服务)