OpenStack组件系列☞Keystone
Keystone(OpenStack Identity Service)是 OpenStack 框架中负责管理身份验证、服务规则和服务令牌功能的模块。用户访问资源需要验证用户的身份与权限,服务执行操作也需要进行权限检测,这些都需要通过 Keystone 来处理。Keystone类似一个服务总线, 或者说是整个Openstack框架的注册表, 其他服务通过keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互的调用, 需要经过Keystone的身份验证, 来获得目标服务的Endpoint来找到目标服务。
第一部分:
keystone的功能有哪些?
openstack是一个SOA架构,各个项目独立提供先关的服务,且互不依赖,如nova提供计算服务,glance提供镜像服务等。防止耦合性,且扩展性不高实际上所有的组件都依赖keystone,
Keystone基本概念介绍
1.user:User即用户,指的是使用openstack service的用户,可以是人,服务,系统,就是说只要是访问openstack service 的对象都可以称为User
2.Credentials:是用于确认用户身份的凭证。说白了就是“信物”,可以是:
(1):用户名和密码
(2):用户名跟API Kye(秘钥) #(1)(2)用户第一次确认身份的方法
(3):一个keystone分配的身份的token #(3)用户已经确认身份后的方法 (token是有时间限制的)
3.Auhentication:
(1):用户身份验证的过程。keystone服务通过检查用户的Credentials来确定用户的身份
(2):第一次验证身份是使用用户名与密码或者用户名与API Key的形式。当用户的Credentials被验证后,keystone会给用户分配一个Authentication token 供该用户的后续请求操作(返回的token中就包含User的Role列表)
4.Token
(1):是一串数字字符串,当用户访问资源时需要使用的东西,在keystone中主要是引入令牌机制来保护用户对资源的访问,同时引入PKI、PKIZ、fernet、UUID其中一个随机加密产生一串数字,对令牌加以保护
(2):token并不是长久有效的,是有时效性的,在有效的时间内可以访问资源。
5.Role:
(1):本身是一堆ACL集合,主要用于权限的划分。
(2):可以给User指定Role,是user获得role对应的操作权限。
(3):系统默认使用管理Role的角色 管理员用户:admin 普通用户:member(老版本) user(新版本)
(5):user验证的时候必须带有Project。老版本叫(Tenant)
大体流程如下图:
6.Policy
(1):对于keystone service 来说,Policy就是一个JSON文件,rpm安装默认是在/etc/keyston/policy.json。通过配置这个文件,keystone实现了对User基于Role的权限管理(User <-- Role(ACL) <--Policy)
(2):Policy就是用来控制User对Project(tenant)中资源的操作权限
7.Project(Tenant)
(1):Project(Tenant)是一个人或服务所拥有的资源集合。不同的Project之间资源是隔离的,资源可以设置配额
(2):Project(Tenant)中可以有多个User,每一个User会根据权限的划分来使用Project(Tenant)中的资源
(3):User在使用Project(Tenant)的资源前,必须要与这个Project关联,并且制定User在Project下的Role,一个assignment(关联) 即:Project-User-Role
8.Service
即服务,如Nova,Glace,等各个组件
9.Endpoint:
(1):用来通过访问和定位某个openstack service的地址,通常是一个URL
(2):不同的region有不同的Endpoint(region使用与跨地域的云服务,比如像阿里云有华北,华东等等,)
(3):任何服务都访问openstack service中的资源时,都要访问keystone
(4):Endpoint分为三类:
1.admin url —>管理员用户使用 Port:35357
2.internal url —>openstack内部组件间互相通信 Port:5000 (组件之间通信基于Restful api)
3.public url —> 其他用户访问地址 Port:5000
region异地建机房,如下图
10.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服务的机器开放
11.V3版本更新
1.Tenant更改为Project
2.添加了Domain(对系统资源进行限额)
3.添加了Group (组的概念为了更好的管理用户,例如linux下对组授权,其组下面的用户也有了相应的权限)
4.member更改为user
第二部分:
举个例子
将上面各个部分结合起来。
比如说,某公司年会组织跟团去旅游(公司相当于一个group,公司的员工相当于User)。到了晚上要住店,首先要先到前台登记(前台就相当于Keystone),对前台(keystone)来说,你要住店要拿出你的证明(对keystone来说就是要证明你是你)。
怎么办?拿出身份证,这里的身份证就相当于Credentials(用户名和密码),前台(keystone)会进行验证你的身份信息(Authentication),验证成功后,前台(Keystone)会给你一个房卡(Token),并且有不同的房卡(比如:普通卡,会员卡,白金卡等),不同的卡有不同的权限(Role),并且拿到房卡后,前台(keystone)会给你一个导航图(Endpoint)让你找到你的房间。并且一个酒店不光会有住宿服务,可能还有别的服务(service),像餐饮,娱乐,按摩等等,比如说要去吃饭,不知道路线怎么走,看一下导航图(endpoint)就知道了,到餐饮部门(service)会有三个路线(Endpoint)可以走。为什么会有三个,领导层通道 --> 走后门(admin),内部员工通道 -->(internal),客人通道 -->(public)。知道如何去,也有了权限(Token/Role)到了餐饮部门,当你点餐的时候,会让你刷上你的会员卡(这个步骤就是service像keystone确认你有没有权限),验证成功后,你就可以点餐吃饭
图片理解
第三部分
官网解释:
- 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.(规则:描述执行动作的一组要求)
第四部分
工作流程(以创建一个VM为例)
上面的图主要是讲述keystone在各个组件之间的作用,先不要去想别的组件是如何工作的。通过上面那幅图可以看出来keystone在各个组件间扮演着一个中间人的作用,每个服务于服务间使用或者某个用户与服务间的使用,都要先到keystone这里来报道!
第五部分
官方介绍
详解
1.用户/API 想创建一个实例,首先会将自己的credentials发给keystone。认证成功后,keystone会颁给用户/API一个临时的令牌(Token)和一个访问服务的Endpoint。 PS:Token没有永久的
2.用户/API 把临时Token提交给keystone,keystone并返回一个Tenant(Project)
3.用户/API 向keystone发送带有特定租户的凭证,告诉keystone用户/API在哪个项目中,keystone收到请求后,会发送一个项目的token到用户/API PS:第一个Token是来验证用户/API是否有权限与keystone通信,第二个Token是来验证用户/API是否有权限访问我keystone的其它服务。用户/API 拿着token和Endpoint找到可访问服务
4.服务向keystone进行认证,Token是否合法,它允许访问使用该服务(判断用户/API中role权限)?
5.keystone向服务提供额外的信息。用户/API是允许方法服务,这个Token匹配请求,这个Token是用户/API的
6.服务执行用户/API发起的请求,创建实例
7.服务会将状态报告给用户/API。最后返回结果,实例已经创建
OpenStack组件系列☞Keystone的更多相关文章
- OpenStack组件系列☞Keystone搭建
一:版本信息 官网:http://docs.openstack.org/newton/install-guide-rdo/keystone.html 二:部署keystone 官网文档:http:// ...
- Openstack组件部署 — keystone(domain, projects, users, and roles)
目录 目录 前文列表 Create a domain projects users and roles domain projects users and roles的意义和作用 Create the ...
- Openstack组件部署 — Keystone Install & Create service entity and API endpoints
目录 目录 前文列表 Install and configure Prerequisites 先决条件 Create the database for identity service 生成一个随机数 ...
- openstack组件之keystone
一 什么是keystone keystone是 OpenStack Identity Service 的项目名称.它在整个体系中充当一个授权者的角色. Keystone项目的主要目的是给整个opens ...
- Openstack组件部署 — Keystone功能介绍与认证实现流程
目录 目录 前文列表 Keystone认证服务 Keystone认证服务中的概念 Keystone的验证过程 简单来说 前文列表 Openstack组件部署 - Overview和前期环境准备 Ope ...
- OpenStack组件系列☞horizon搭建
第一步:部署horizon环境: 安装部署memcache 安装软件包 yum install memcached python-memcached 启动memcache并且设置开机自启动 syste ...
- OpenStack组件系列☞glance搭建
第一步:glance关于数据库的操作 mysql -u root -p #登入数据库 CREATE DATABASE glance; #新建库keystone GRANT ALL PRIVILEGES ...
- OpenStack组件系列☞glance简介
Glance项目提供虚拟机镜像的发现,注册,取得服务. Glance提供restful API可以查询虚拟机镜像的metadata,并且可以获得镜像. 通过Glance,虚拟机镜像可以被存储到多种存储 ...
- Openstack组件实现原理 — Keystone认证功能
目录 目录 前言 Keystone安装列表 Keystone架构 Keystone的管理对象 一个理解Keystone管理对象功能的例子 Keystone管理对象之间的关系 Keystone V3的新 ...
随机推荐
- 根据网站运行日志猜测的百度蜘蛛ip
da大部分文章都是吵来吵去,不准确 所以就不参考那些沙雕的文章了,直接自己统计一个 123.125.71.117 123.125.71.58 220.181.108.115 220.181.108.1 ...
- 想真正了解JAVA设计模式看着一篇就够了。 详解+代码实例
Java 设计模式 设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结 设计模式分为 23 种经典的模式,根据用途我们又可以分为三大类.分别是创建型模式.结构型模式和行为型模式 列举几种设 ...
- oracle-视图-索引-序列
Oracle提高查询性能 一 视图 视图是一个虚拟表,就是对select查询的结果取个名字.其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值 ...
- BZOJ2529: [Poi2011]Sticks
2529: [Poi2011]Sticks Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 257 Solved: ...
- 【weex】publishTask
这个小项目还挺有意思的,是一个效果取快递的项目 我们看下效果 放博客的github地址:https://github.com/xiaomaer/publishTask 我们来看下代码,这几个页面运行的 ...
- 如何查看MySQL执行计划呢?
覆盖索引: MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件 包含所有满足查询需要的数据的索引称为 覆盖索引(Covering Index) 如果要使用覆盖索引,一定 ...
- JS常用属性方法大全
1. 输出语句 : document.write(""); 2.JS 中的注释为 : // 3. 传统的 HTML 文档顺序是 : document->html->(h ...
- js实现HashTable
1.哈希表使用键值对进行的数据储存,在数据的存储位置和它的关键字之间建立一一对应的关系,从而使关键字和结构中的一个唯一的存储位置相对应,所以在检索数据时 只需要根据这个关系便可以快速定位到要找的数据. ...
- iOS 7: 如何为iPhone 5s编译64位应用
随着iPhone 5S的推出,大家开始关心5S上所使用的64位CPU A7. 除了关心A7的性能以外,大家还会关心一个问题,那就是使用A7的64位系统对应用有没有什么要求.特别是应用开发者,大家都比较 ...
- NOIP模拟 17.8.14
NOIP模拟17.8.14 (天宇哥哥考察细心程度的题) [样例解释]如果删去第一个 1:在[3,1,2]中有 3 个不同的数如果删去 3:在[1,1,2]中有 2 个不同的数如果删去第二个 1:在[ ...