第一:keystone是什么?

  keystone是 OpenStack Identity Service 的项目名称,是一个负责身份管理验证、服务规则管理和服务令牌功能。它实现了openstack的identity API。或者说是整个openstack架构的注册表。

  简单例子:谁家的房子不上锁,一家几口人之间晚上睡觉,还有关上门呢。keystone就是房子的一扇门,是家人(组件之间),或者访客(用户)需要敲门

第二:keystone优势

  keystone提供认证服务,安全,解决分布式环境下的统一认证方式。(解耦)

第三:keystone的功能:

openstack是一个SOA架构,理论上各子项目独立提供相关服务,互不依赖。

实际上所有的组件都依赖keystone,它有两个功能:

(1)用户信息管理:为了验证用户身份的合法性。提供user管理,租户管理

(2)服务注册表管理:keystone是整个openstack框架的注册表,其他的服务(nova,glance等等)需要通过keystone注册企其服务的Endpoint(服务访问的url)。openstack架构体系中,任何服务之间的相互调用都需要经过keystone来进行身份验证,进而获取到目标服务的Endpoint来找到目标服务。

第四:keystone详解:

part1

user---》用户:

  使用Openstack的user,可以是人、服务、系统,只要使用Openstack服务的对象都叫做用户。

Credentials---》资格证书:是用户人份的证据,eg:省份证,可分为:

    1.用户名和密码/用户名和Api Key

2.一个keystone分配的身份token

Authentication---》身份验证

  1. 是验证用户身份的过程。Keystone 服务通过检查用户的 Credential 来确定用户的身份。
  2. 第一次使用用户名/密码或者用户名/API key作为credential。当用户的credential被验证后,Keytone 会给用户分配一个 authentication token 供该用户后续的请求使用。
  3. Keystone中通过Policy(访问规则)来做到基于用户角色(Role)的访问控制。

Token---》令牌

  1. 是一个访问Openstack API和资源的数字字符串,访问资源时通过令牌认证通过,不在需要自己的秘钥,而该令牌是用户身份鉴定完毕之后颁发的。在keystone中主要是引入令牌机制来保护用户对于资源的访问,同时引入PKI(公钥基础实施)对令牌加以保护。
  2. 颁发的令牌也就是Token,他有可能任何时候被撤销,它包含了在指定范围和有效时间内可以被访问的资源。

Role---》角色

  1.一个role可以看做是一个acl集合,主要是权限管理。

  2.可以通过user指定role,让user获取role的权限。eg:dba用所有数据库的权限

  3.在keystone中,在颁发给user的token里面包含role的列表,被访问的各个组件服务会判断user的角色和user提供的token中包含的角色,以及每个角色访问资源或者操作的权限。

  4.系统默认使用的是role admin角色和成员role user角色(role _member_)

  5.user验证是必须带有定制的Project(Tenant),role会被分配到指定的Project(Tenant)中

Policy---》策略

  1.用户:Openstack对用户的验证除了Openstack的身份验证以外,还需要验证用户对某个服务是不是有访问的权限。Policy机制就是用来控制某一个用户在某一个Project(Tenant)中资源的操作权限,简单的说,该用户有啥权限,能操作什么,不能操作什么,就是Policy规定的。

  2.对于keystone服务来说,Policy就是一个json文件,rpm包默认路径是/etc/keystone/policy.json。通过该配置文件,keystone可以对user进行权限管理。

Project(Tenant)---》项目(租户)

一个用于分组或者隔离资源的容器。一个 tenant 可能对应一个客户、账号、组织或者项目。在 OpenStack 中,用户至少必须在一个tenant中。tenant 容器的可使用资源的限制成为 Tenant Quota,它包括tenant 内各子资源的quota。

Service---》服务 

  OpenStack中的各个服务,比如Nova、Swift或者Glance等。

Endpoint ---》端点

  1. 是一个可以通过网络来访问和定位某个Openstack service的地址,通常是一个URL
  2. 不同的region有不同的endpoint(我们可以通过endpoint的region属性去定义多个region)。
  3. endpoint告诉openstack service 去哪里访问特定的service。如:当Nova需要访问Glance服务去获取image 时,Nova通过访问Keystone拿到Glance的endpoint,然后通过访问该endpoint去获取Glance服务。
  4. Endpoint 分为三类:
  • admin url –> 给admin用户使用,Port:35357
  • internal url –> OpenStack内部服务使用来跟别的服务通信,Port:5000
  • public url –> 其它用户可以访问的地址,Port:5000

Service与Endpoint关系介绍:

  1. 在openstack中,每一个service都有三种endpoint. Admin, public, internal(创建完service后需要为其创建API EndPoint. )
  2. Admin是用作管理用途的,如它能够修改user/tenant(project)。权限最大,
  3. public 是让客户调用的,比如可以部署在外网上让客户可以管理自己的云。
  4. internal 是openstack内部服务调用的。
  5. 三种endpoints 在网络上开放的权限一般也不同。Admin通常只能对内网开放,public通常可以对外网开放,internal通常只能对安装有openstack对服务的机器开放。

V3新增的概念:

  1. Tenant 重命名为 Project
  2. 添加了 Domain 的概念
  3. 添加了 Group 的概念

  V3 利用 Domain 实现真正的多租户(multi-tenancy)架构,Domain 担任 Project 的高层容器。云服务的客户是 Domain 的所有者,他们可以在自己的 Domain 中创建多个 Projects、Users、Groups 和 Roles。通过引入 Domain,云服务客户可以对其拥有的多个 Project 进行统一管理,而不必再向过去那样对每一个 Project 进行单独管理。

  Group 是一组 Users 的容器,可以向 Group 中添加用户,并直接给 Group 分配角色,那么在这个 Group 中的所有用户就都拥有了 Group 所拥有的角色权限。通过引入 Group 的概念,Keystone V3 实现了对用户组的管理,达到了同时管理一组用户权限的目的。这与 V2 中直接向 User/Project 指定 Role 不同,使得对云服务进行管理更加便捷。  

  v3版本domain,group,project,user和role的关系图:

如上图所示,在一个 Domain 中包含 4 个 Projects,可以通过 Group2 将 Role Sysadmin直接赋予 Domain,那么 Group2 中的所有用户将会对 Domain 中的所有 Projects 都拥有管理员权限。也可以通过 Group1 将 Role Engineer 只赋予 Project1,这样 Group1 中的 User 就只拥有对 Project1 相应的权限,而不会影响其它 Projects。

part2

  keystone管理和保存了user信息,管理user相关的project,role,group和domain等;用户credential的存放位置,验证关系,token的管理,下图是各部分关系

part3:

  官网解释:

  • User: has account credentials, is associated with one or more projects or domains(用户:有用户凭证,并且与一个或多个项目或域有关联)
  • Group: a collection of users, is associated with one or more projects or domains(组:用户集合,域一个或者多个项目或域有关联)
  • Project: unit of ownership in OpenStack, contains one or more users (项目:在openstack单元中,具有所有权,包含一个或者多个用户)
  • Domain: unit of ownership in OpenStack, contains users, groups and projects(域:在openstack中单元中具有所有权,包含用户,组和项目)
  • Role: a first-class piece of metadata associated with many user-project pairs.(角色:加载上一个项目下面的一个用户 给用户附上一个role的关联)
  • Token: identifying credential associated with a user or user and project(令牌:与用户或者项目关联的凭证)
  • Extras: bucket of key-value metadata associated with a user-project pair.(额外:与用户项目对关联的key-value数据对)
  • Rule: describes a set of requirements for performing an action.(规则:描述执行动作的一组要求)

第五:keystone与openstack其他组件的关系

第六:keystone与其他组件协同工作流程

以用户新建一台vm为例介绍整体流程中keystone发挥的作用

第七:keystone工作流程图

(1) User从Keystone获取令牌以及服务列表;

(2) User访问服务时,亮出自己的令牌。

(3)相关的服务向Keystone求证令牌的合法性。

  1. 用户alice登录keystone系统(password或者token的方式),获取一个临时的token和catalog服务目录(v3版本登录时,如果没有指定scope,project或者domain,获取的临时token没有任何权限,不能查询project或者catalog)。

  2. alice通过临时token获取自己的所有的project列表。

  3. alice选定一个project,然后指定project重新登录,获取一个正式的token,同时获得服务列表的endpoint,用户选定一个endpoint,在HTTP消息头中携带token,然后发送请求(如果用户知道project name或者project id可以直接第3步登录)。

  4. 消息到达endpoint之后,由服务端(nova)的keystone中间件(pipeline中的filter:authtoken)向keystone发送一个验证token的请求。(token类型:uuid需要在keystone验证token,pki类型的token本身是包含用户详细信息的加密串,可以在服务端完成验证)

  5. keystone验证token成功之后,将token对应用户的详细信息,例如:role,username,userid等,返回给服务端(nova)。

  6. 服务端(nova)完成请求,例如:创建虚拟机。

  7. 服务端返回请求结果给alice。

openstack 之~keystone基础的更多相关文章

  1. OpenStack实践系列①openstack简介及基础环境部署

    OpenStack实践系列①openstack简介及基础环境部署 一.OpenStack初探1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运 ...

  2. openstack核心组件——keystone身份认证服务(5)

    云计算openstack核心组件——keystone身份认证服务(5) 部署公共环境 ntp openstack mariadb-server rabbitmq-server memcache 1.w ...

  3. OpenStack:安装Keystone

    >安装Keystone1. 安装# apt-get install keystone2. 创建dbcreate database keystone;grant all privileges on ...

  4. Openstack中keystone与外部LDAP Server的集成

    openstack中keystone鉴权的用户user和password信息,通常保存在mysql数据库的keystone库: 表local_user和表password: keystone也支持外部 ...

  5. OpenStack之Keystone模块

    一.Keystone介绍 OpenStack Identity(Keystone)服务为运行OpenStack Compute上的OpenStack云提供了认证和管理用户.帐号和角色信息服务,并为Op ...

  6. 在安装Openstack的keystone认证服务时,出现The request you have made requires authentication. (HTTP 401) (Request-ID: req-f94bebba-f0c5-4a92-85问题的处理

      创建openstack的keystone认证服务器报错: The request you have made requires authentication. (HTTP 401) (Reques ...

  7. 003-官网安装openstack之-keystone身份认证服务

    以下操作均在控制节点进行 1.控制节点安装keystone服务 概念理解: Keystone是OpenStack框架中,负责身份验证.服务规则和服务令牌的功能, 它实现了OpenStack的Ident ...

  8. OpenStack 安装 Keystone

    OpenStack 安装 Keystone 本篇主要记录一下 如何安装 openstack的 第一个组件 keystone 认证授权组件 openstack 版本 我选的是queens 版本 1.Op ...

  9. keystone系列一:keystone基础

    一 什么是keystone keystone是OpenStack的身份服务,暂且可以理解为一个'与权限有关'的组件. 二 为何要有keystone Keystone项目的主要目的是为访问opensta ...

随机推荐

  1. Faster-RCNN tensorflow 程序细节

    tf-faster-rcnn github:https://github.com/endernewton/tf-faster-rcnn backbone,例如vgg,conv层不改变feature大小 ...

  2. 【bzoj3717】[PA2014]Pakowanie 状压dp

    题解: 自己在这一类问题上想到的总是3^n的枚举法 首先背包从大到小排序 f[i]表示搞出为i的状态至少要用几个背包,g[i]表示最大剩余容量 这样就可以2^n*n 因为这么做利用了状态之间的先后顺序 ...

  3. [转]Maven与nexus关系

    开始在使用Maven时,总是会听到nexus这个词,一会儿maven,一会儿nexus,当时很是困惑,nexus是什么呢,为什么它总是和maven一起被提到呢? 我们一步一步来了解吧. 一.了解Mav ...

  4. grails服务端口冲突解决办法-【grails】

    grails中默认的服务端口为,当本机中需要同时启动两个不同的项目时,就会造成端口冲突,比如启动第二个服务时就会报如下的错误: Server failed to start for port 8080 ...

  5. ionic2程序调试

    新手一枚,之前一直做.net开发,最近接触Ionic2,也没有人带,只能自己一点点抠文档,查资料.一直苦于无法直接调试打包发不好的app,只能在代码里面加上alert一点一点的抛出要看信息,感觉就像瞎 ...

  6. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-2项目说明和源码下载

    本文目录1. 摘要2. Window下运行 3.linux下运行4. 开发记录5. 总结 1.概要 写<Asp.Net Core 2.0 项目实战>系列断断续续已经很长时间了,期间很多朋友 ...

  7. vue 常用手册

    基本使用 引入vue.js 创建Vue对象, 指定选项对象 el : 指定dom标签容器的选择器 data : 指定初始化状态属性数据的对象对象/函数(返回一个对象) 页面中 使用v-model: 实 ...

  8. tesorflow - create neural network+结果可视化+加速神经网络训练+Optimizer+TensorFlow

    以下仅为了自己方便查看,绝大部分参考来源:莫烦Python,建议去看原博客 一.添加层 def add_layer() 定义 add_layer()函数 在 Tensorflow 里定义一个添加层的函 ...

  9. String.IsNullorEmpty()方法的使用

    != null 就是不为null !string.IsNullOrEmpty  不是null且不是""(string.Empty)

  10. SEED-DVS6467_SDK的交叉编译环境搭建问题

    今天在ubuntu16.04上安装arm的交叉编译器arm_v5t_le-gcc,环境变量配置好以后,运行arm_v5t_le-gcc命令,总提示No such file or directory.然 ...