1.OpenStack组件

OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作。OpenStack是一个不断发展的系统,在它的发展历程之中,它的组件个数在增加,服务质量在提升。下图为OpenStack的核心组件:

OpenStack核心组件的作用:

Nova:管理VM的生命周期,是OpenStack的最核心服务。

Neutron:提供网络连接服务。

Glance:管理VM的启动镜像。

Cinder:为VM提供块存储服务。

Swift:提供对象存储服务。

Keystone:为OpenStack提供认证与权限管理服务。

Horizon:为OpenStack用户提供一个Web自服务Portal。

2.Keystone功能

Keystone是 OpenStack 框架中负责管理身份验证、服务规则和服务令牌功能的模块。用户访问资源需要验证用户的身份与权限,服务执行操作也需要进行权限检测,这些都需要通过 Keystone 来处理。

在图2中,我们可以看到OpenStack中的每一个组件的运作都离不开Keystone的身份认证与权限管理。用户每一次向系统发送请求的时候,在发送信息中,都会加上token。而每一个组件,在提供相应的服务之前,都会把token发给keystone确认,只要在keystone确认了token的真实性之后,才会给用户提供相应的服务。所以说其请求都需要经过Keystone的认证,才能得到相应的权限。

3.keystone管理的相关概念

Keystone 中主要涉及到如下几个概念:User、Project、Role、Token、Domain、Group。下面对这几个概念进行简要说明。

3.1User:用户

顾名思义就是使用服务的用户,可以是人、服务或者是系统,只要是使用了 Openstack 服务的对象都可以称为用户。一个项目可以有多个用户,一个用户也可以属于一个或多个项目。

用户对项目的操作权限由用户在项目中承担的角色来决定。

3.2Project:项目

它是各个服务中的一些可以访问的资源集合或者说叫资源组。它是一个容器,用于组织和隔离资源,或标识对象。

3.3Token:令牌

Token即是信物、令牌,用户通过用户名和密码获取在某个项目下的token,通过token,可以实现单点登录。

令牌是用来访问资源的任意比特的文本。每个令牌有一个访问范围。令牌可在任意时间收回,并在一个有限的时间内有效。在长时间没有进行操作的时候,我们常需要重新登陆获取新的token才能进行访问。

3.4Role:角色

Role的本质就是一堆ACL的集合,用于划分权限。

它代表一组用户可以访问的资源权限,例如Nova中的虚拟机、Glance中的镜像可执行特定系列操作的用户特性。角色包括一系列权利和特权。用户可继承其所属角色的权利和特权。在身份服务中,颁发给用户的令牌包括用户能承担的角色列表。这个用户调用的服务决定他们怎样解释这个用户所属的角色,以及每个角色授予访问的操作和资源。

角色可以被指定给用户,使得该用户获得角色对应的操作权限。

role 的名称没有意义,其意义在于 policy.json 文件根据 role 的名称所指定的允许进行的操作。系统默认使用管理Role admin和成员Role user(过去的普通用户角色是:_member_)。所以最简单地情况就是,role只有 admin 和user(member)两个,前者表示管理员,后者表示普通用户。

3.5Domain:域

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

3.6 Group:组

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

Group与Domain是在keystoneV3版本才引进的新概念。

4.身份管理层次

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

4.1 domain、project、group、user层次

4.1.1 user与group

User用户和group组是包含关系,但是却不是一定的上下级,用户可以是组中成员,也可以是单独的一个用户,就如上图中的user2、user3、user4,他是系统中的用户,但是它不属于任何一个组。他可以直接属于某一个项目,对于项目存在管理权。User只有在直接或者间接的与某一个项目存在对应关系,才能登陆Openstack系统。

4.1.2 group与project

Group组与project之间,我们可以选择赋予group组对应project的权限,就如上图中,我们赋予group1对project1、project2这俩个项目的管理权限,在此同时,我们也可以把project1和project2的管理权限赋予group2,这样的话,group1和group2两组同时都拥有了project1和project2的管理权。从这个管理权限的赋予关系上,我们可以看到,group组与project项目之间的是一个多对多的关系。

4.1.3 project与domain

Project与domain之间也是包含关系,Domain 担任 Project 的高层容器。云服务的客户是 Domain 的所有者,他们可以在自己的 Domain 中创建多个 Projects、Users、Groups 和 Roles。通过引入 Domain,云服务客户可以对其拥有的多个 Project 进行统一管理,而不必再向过去那样对每一个 Project 进行单独管理。

4.2 role、project、user层次

每一个user都会对某一些project存在管理权,如果没有管理权的话,user将会无法正常登陆Openstack系统。同时,每一个用户都会有一个对应的角色,这个角色就是ACL的集合。在系统默认中,存在俩个角色,admin-管理员与user(member)普通用户。

5.keystone 的访问流程

下面通过本文上面的图2来说明 Keystone 和其它 OpenStack 服务之间是如何交互和协同工作的。首先用户向 Keystone 提供自己的身份验证信息,如用户名和密码。Keystone 会从数据库中读取数据对其验证,如验证通过,会向用户返回一个 token,此后用户所有的请求都会使用该 token 进行身份验证。如用户向 Nova 申请虚拟机服务,nova 会将用户提供的 token 发给 Keystone 进行验证,Keystone 会根据 token 判断用户是否拥有进行此项操作的权限,若验证通过那么 nova 会向其提供相对应的服务。其它组件和 Keystone 的交互也是如此。

6.界面说明

openstack keystone 总结的更多相关文章

  1. OpenStack Keystone安装部署流程

    之前介绍了OpenStack Swift的安装部署,采用的都是tempauth认证模式,今天就来介绍一个新的组件,名为Keystone. 1. 简介 本文将详细描述Keystone的安装部署流程,并给 ...

  2. OpenStack Keystone架构

    一. Keystone简介 1. OpenStack Keystone简介 2. Keystone安装与部署 2.1 包安装Keystone 2.2 源码安装源码安装 3 配置运行Keystone 3 ...

  3. Ubuntu 14.04 LTS 安装 Juno 版 OpenStack Keystone

    本文介绍如何在Ubuntu 14.04 LTS 上安装Juno版的Keystone, 我们采用的是手动安装的方式, 同时仅针对OpenStack的身份与访问管理系统Keystone. 事实上OpenS ...

  4. Openstack keystone组件详解

    OpenStack Keystone Keystone(OpenStack Identity Service)是 OpenStack 框架中负责管理身份验证.服务规则和服务令牌功能的模块.用户访问资源 ...

  5. Openstack Keystone 认证服务(四)

    Openstack Keystone 认证服务(四) keystone 的安装完全依赖ocata的源, 如果没有建议自己搭建. 否则用的源不对会产生各种奇葩问题. 创建keystone库和用户: ## ...

  6. OpenStack Keystone v3 API新特性

    原连接 http://blog.chinaunix.net/uid-21335514-id-3497996.html keystone的v3 API与v2.0相比有很大的不同,从API的请求格式到re ...

  7. openstack Keystone验证服务集群

    #Keystone验证服务群集 openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ##.Keystone验证服务集群 ...

  8. 二、OpenStack—keystone组件介绍与安装

    一.Keystone介绍 keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户权限的定义等等 ...

  9. OpenStack keystone节点搭建(官方2018年4月份文档)

    参考文档:https://docs.openstack.org/install-guide/common/conventions.html https://docs.openstack.org/mit ...

  10. [转]OpenStack Keystone V3

    Keystone V3 Keystone 中主要涉及到如下几个概念:User.Tenant.Role.Token.下面对这几个概念进行简要说明. User:顾名思义就是使用服务的用户,可以是人.服务或 ...

随机推荐

  1. deque_queue_list

    #include <iostream> #include <deque>//front push pop back push pop [] at() #include < ...

  2. 20182310 第二周&第三周学习总结

    20182310 2019-2020-1 <数据结构与面向对象程序设计>第2周&第3周学习总结 教材学习内容总结 1.首先是String类定义的字符串,然后是print和print ...

  3. SpringBoot配置ThreadPoolTaskExecutor

    package com.example.demo; import org.springframework.context.annotation.Bean; import org.springframe ...

  4. 珠峰培训node正式课--【笔记】|全局对象 | process | util | fs | stream 流

    全局对象: console  : __filename     ; __dirname     ; setTimeOut     ; setImmediate(把参数函数放在下一个环节执行) proc ...

  5. Edge Beta 进入无痕模式 快捷方式

    “浏览器路径” -InPrivate 在快捷方式的路径后加 -InPrivate 就可以了

  6. sqlg rdbms 上实现的Apache TinkerPop

    sqlg 可以让关系型数据库支持Apache TinkerPop,当前支持的数据库有postgresql,hsqldb,h2,mariadb,mysql,mssqlserver 以下是一个简单的使用 ...

  7. Vuejs发送Ajax请求

    一.概况 ①vuejs中没有内置任何ajax请求方法 ②在vue1.0版本,使用的插件 vue resource 来发送请求,支持promise ③在vue2.0版本,使用社区的一个第三方库 axio ...

  8. Vuejs基本使用

    一.简单使用 ①首先需要实例化vue:new 出来,注意Vue大小写 ②通过el绑定元素:el 选项的作用就是告诉 Vue 管理模板的入口节点(不要绑定body和html) ③data:是响应式数据, ...

  9. 3495: PA2010 Riddle 2-sat 前缀优化

    3495: PA2010 Riddle 2-sat 前缀优化 链接 bzoj 思路 不想说啥了,看hwim的吧,我去睡觉了zZ. 代码 /******************************* ...

  10. word2vector的tensorflow代码实现

    import collections import math import os import random import zipfile import numpy as np import urll ...