一、 Keystone 概述

  • 管理用户及其权限
  • 维护OpenStack Services的Endpoint
  • Authentication(认证)和 Authorization(授权)

1、验证用户

  验证用户的最简单的方法是请求凭据(登录+密码,登录+密钥等),并通过某些数据库进行检查。

2、认证包括的内容和关系:

  第一个基础是用户。他们代表某人或某事,可以通过Keystone访问。用户具有可以检查的凭据,如密码或API密钥。

  第二个是租户。它代表了所谓的Nova项目,这意味着聚合每个服务中的资源数量。例如,租户可以在Nova中有一些机器,在Swift / Glance中有一些图像,在Neutron中有几对网络。默认情况下,用户始终绑定到某些租户。

  第三种是角色。它们表示假定具有对资源的一些访问的一组用户。例如,一些虚拟机在Nova和一些镜像在Glance。用户可以添加到全局或租户中的任何角色。在第

一种情况下,用户获得由角色对所有租户中的资源暗示的访问;在第二种情况下,用户的访问被限制到相应租户的资源。例如,用户可以是所有租户的操作者和他自己的项目的管理员。

3、keystone 的名词概念

图1  keystone相关名词

  (1)User:指代任何使用OpenStack的实体,可以是真正的用户,其他系统或者服务。当User请求访问OpenStack时,Keystone会对其进行验证。除了admin和demo,OpenStack也为nova、cinder、glance、neutron 服务创建了相应的User。admin也可以管理这些User。

  (2)Credentials:User用于确认用户身份的凭证。可以是:

    (a)用户名/密码(用户第一次确认身份的方法)

    (b)API Key(用户第一次确认身份的方法)

    (c)Token(token是有时间限制的)

    (d)其他高级方式

  (3)Authentication:User访问OpenStack时向Keystone提交用户名和密码形式的 Credentials,Keystone验证通过后会给User签发一Token作为后续访问的Credential。

  (4)Token:由数字和字母组成的字符串,User成功Authentication后由Keystone 分配给User。(也叫令牌)

    Token用做访问Service的Credential

    Service会通过Keystone验证Token的有效性

    Token的有效期默认是24小时

(5)Project:用于将OpenStack的资源(计算、存储和网络)进行分组和隔离。根据OpenStack服务的对象不同,Project 可以是一个客户(公有云,也叫租户)、部门或者项目组(私有云)。

  资源的所有权是属于Project 的,而不是User。

  在OpenStack的界面和文档中,Tenant/Project/Account这几个术语是通用的,但长期看会倾向使用Project。

  每个User(包括 admin)必须挂在Project里才能访问该Project的资源。

  一个User可以属于多个Project。

  admin相当于root用户,具有最高权限。

  (6)Service:包括 Compute (Nova)、Block Storage (Cinder)、Object Storage (Swift)、Image Service (Glance) 、Networking Service (Neutron) 等。每个Service都会提供若干个Endpoint,User 通过Endpoint访问资源和执行操作。

  (7)Endpoint:是一个网络上可访问的地址,通常是一个URL。Service通过 Endpoint告知自己的 API。Keystone 负责管理和维护每个Service的Endpoint。

  (8)Role:角色(VIP)。

    Authentication(认证):解决的是“你是谁?”的问题

    Authorization(鉴权):解决的是“你能干什么?”的问题

    Keystone是借助Role来实现Authorization的,Keystone定义Role,可以为User分配一个或多个Role。Service通过各自的/etc/***/policy.json对Role进行访问控制,决定每个 Role能做什么事情。

    OpenStack默认配置只区分admin和非admin Role,如果需要对特定的Role进行授权,可以修改policy.json。

    OpenStack适用于全局,可管理和查看各类信息。

    keystone-manage用于启动keystone模块数据、初始化数据库、生成 SSL 相关的证书和私钥。

二、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。最后返回结果,实例已经创建。

图2  keystone认证管理

  创建一个实例

图3  创建实例

三、 Token

表1  Token四种提供方式

Provider方式

生成方式/长度/加密方式

优点

缺点

UUID

uuid.uuid4().hex,32字符,

没有加密方式。

生成的Token,长度较短,使用方便。url使用方便,回收的方式,就是从后端删除即可,实现逻辑较为清晰。

需要持久化后端存储,每次访问需要keystone相关服务进行认证。

PKI

cms_sign_data(),使用base64 encoded进行编码(替换不安全的字符),粗略统计过长度4602字符,使用Cryptographic Message Syntax (CMS)进行加密(默认的方式sha256)。

使用证书及私钥生成,可以线下验证(不需要走keystone认证服务)。

长度负载重,不推荐用于生产部署keystonemanage

pki_setup ,需要使用由一个受信任的CA颁发的证书。

PKIZ

同PKI,使用base64url

encoding进行编码,在此基础上,使用压缩机制,长度上减小了一半,并且Token使用PKIZ_开头。

较PKI长度上缩小了很多

长度负载较重,

同上PKI

Fernet

MessagePacked负载数据,并使用crypto.encrypt(paylo

ad)加密,粗略统计长度183字符。使用对称加密,为了安全度提升,同时支持定期轮换。

设计的逻辑,

引入序列化,

负载格式加以控制,

基于此进行加密,

长度比PKI(Z)要短。

对称加密算法,

安全性低

四、Domain

  Domain:表示project和user的集合,在公有云或者私有云中常常表示一个客户。

  Group:一个domain 中的部分用户的集合。

  Project:IT基础设施资源的集合,比如虚机,卷,镜像等。

  Role:角色,表示一个user对一个project resource的权限。

  Token:一个 user对于某个目标(project 或者 domain)的一个有限时间段内的身份令牌。

图4  Domain

  1、Domain 可以认为是 project,user,group的namespace。一个domain内,这些元素的名称不可以重复,但是在两个不同的domain内,它们的名称可以重复。因此,在确定这些元素时,需要同时使用它们的名称和它们的domain的id或者name。

  2、Group是一个domain部分user的集合,其目的是为了方便分配role。给一个group分配role,结果会给group内的所有users分配这个role。

  3、Role是全局(global)的,因此在一个keystone管辖范围内其名称必须唯一。role的名称没有意义,其意义在于 policy.json文件根据role的名称所指定的允许进行的操作。

  4、简单地,role可以只有admin和member两个,前者表示管理员,后者表示普通用户。但是,结合domain和project的限定,admin可以分为cloud admin,domain admin 和 project admin。

  5、policy.json 文件中定义了role对某种类型的资源所能进行的操作,比如允许cloud admin创建domain,允许所有用户创建卷等。

  6、project是资源的集合,其中有一类projec是admin project。通过指定admin_project_domain_name和admin_project_name来确定一个admin project,然后该

project中的admin用户即是cloud admin。

  7、Token 具有scope(范围) 的概念,分为unscoped token,domain-scoped token 和 project-scoped token。下文有说明:

    Token 是针对不同scope认证状态,这里的scope是指project和domain,因此一共有三种scoped token:

  (1) project-scoped token:针对一个project的token,它包含service catalog, a set of roles,和那个 project 的详细信息

  (2)domain-scoped token:针对一个domain的token,它具有有限的使用场景,只用于domain 层面的操作。与project-scoped相比,它只具有优先的sevice catalog。

  (3)unscoped token:当既不指定project也不指定domain为scope ,同时user也没有default project时获得的token,这是一种特殊的token。

OpenStack-Keystone(2)的更多相关文章

  1. 探索 OpenStack 之(13):研究 Keystone

    Keystone 是 OpenStack Identity Service 的项目名称.本文就试着尽可能深入地研究 Keystone. 1. Keystone 的功能 做为 OpenStack 云系统 ...

  2. 理解 OpenStack + Ceph (5):OpenStack 与 Ceph 之间的集成 [OpenStack Integration with Ceph]

    理解 OpenStack + Ceph 系列文章: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 (5)Ceph 与 OpenS ...

  3. 探索 OpenStack 之(12):cinder-api Service 处理 HTTP Request 的过程分析

    本文是上一篇 探索 OpenStack 之(11):cinder-api Service 启动过程分析 以及 WSGI / Paste deploy / Router 等介绍> 的后续篇. os ...

  4. OpenStack 初探(一) -- All-In-One模式部署(初学OpenStack必备)

    OpenStack 初探(一) -- All-In-One模式部署(初学OpenStack必备) 一.操作前需了解:     1. OpenStack提供IaaS(基础设施即服务)服务,它是开源的云计 ...

  5. openstack网络(一)

    什么是OpenStack Networking OpenStack网络的特性 交换机 路由器 负载均衡 防火墙 虚拟专用网络 网络功能虚拟化 网络类型 管理网络 API 网络 外部网络 访客网络 在一 ...

  6. 探索 OpenStack 之(8):Neutron 深入探索之 OVS + GRE 之 完整网络流程 篇

    前两篇博文分别研究了Compute节点和Neutron节点内部的网络架构.本文通过一些典型流程案例来分析具体网络流程过程. 0. 环境 同 学习OpenStack之(7):Neutron 深入学习之 ...

  7. 学习OpenStack之(6):Neutron 深入学习之 OVS + GRE 之 Compute node 篇

    0.环境 硬件环境见上一篇博客:学习OpenStack之(5):在Mac上部署Juno版本OpenStack 四节点环境 OpenStack网络配置:一个tenant, 2个虚机 Type drive ...

  8. 理解 OpenStack + Ceph (2):Ceph 的物理和逻辑结构 [Ceph Architecture]

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  9. 学习OpenStack之(5):在Mac上部署Juno版本OpenStack 四节点环境

    0. 前沿 经过一段时间的折腾,终于在自己的Mac上装好了Juno版本的四节点环境.这过程中,花了大量的时间,碰到了许多问题,学到不少知识,折腾过不少其实不需要折腾的东西,本文试着来对这过程做个总结. ...

  10. 探索 OpenStack 之(9):深入块存储服务Cinder (功能篇)

    继研究了Neutron之后,继续Nova的外围研究之旅.本站是研究块存储服务Cinder. 0.验证环境 环境包括: 1.一个controller节点,运行nova-api, nova-schedul ...

随机推荐

  1. JavaScript小实例:拖拽应用(二)

    经常在网站别人的网站的注册页中看到一个拖拽验证的效果,就是它的验证码刚开始不出来,而是有一个拖拽的条,你必须将这个拖拽条拖到底,验证码才出来,说了感觉跟没说一样,你还是不理解,好吧,我给个图你看看: ...

  2. JQuery官方学习资料(译):CSS

        JQuery提供了一个处理方法,可以获取或设置元素的CSS属性. // 获取 CSS 属性 $( "h1" ).css( "fontSize" ); / ...

  3. Java开发笔记(十五)短路逻辑运算的优势

    前面提到逻辑运算只能操作布尔变量,这其实是不严谨的,因为经过Java编程实现,会发现“&”.“|”.“^”这几个逻辑符号竟然可以对数字进行运算.譬如下面的代码就直接对数字分别开展了“与”.“或 ...

  4. Java Scanner nextLine方法跳过

    问题描述 Scanner使用了nextInt方法的时候,如果接下来要使用nextLine,会获取不到内容 原因 因为Scanner读取用户输入数据,是先判断缓冲区是否含有数据,没有则接收用户输入的数据 ...

  5. Python全栈之路(目录) - 含资料(持续更新)

    一. Python全栈之路 - 目录 Python基础 Python进阶 网络编程 并发编程 前端 数据库 Python Web框架之Django 前端框架之Vue Linux Flask+智能玩具 ...

  6. mathjs,math.js解决js运算精度问题

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. jquery中点击切换的实现

    项目中经常会遇到一种情况,就是点击切换,比如点击按钮,div样式为1,再点击一下按钮,div样式为2,再点击一下按钮,div样式为1.需要自定义jQuery方法toggle. // toggle方法 ...

  8. 【Dojo 1.x】笔记2 使用服务器环境及使用模块

    又开坑了.上次静态html页面完成本地module的引用,算是成功了,但是并不知道是怎么运作的,没关系慢慢来. 我用的环境是VSCode,这次因为官方说要在服务器环境下运行,所以就用上了VSCode的 ...

  9. 轨迹系列6——车载GPS对接方案汇总小结(809、自定义协议、前置库、WS)

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 最近在不同项目中对接了多个车载GPS厂商服务终端,绝大多数厂商 ...

  10. 简易仿ios菊花加载loading图

    原文链接:https://mp.weixin.qq.com/s/wBbQgOfr59wntNK9ZJ5iRw 项目中经常会用到加载数据的loading显示图,除了设计根据app自身设计的动画loadi ...