Openstack组件 — Keystone认证功能实现原理

转载 2017年02月27日 14:02:39

目录

前言

Keystone实现始终围绕着Keystone所实现的功能来展开,所以在理解其实现之前,建议大家尝试通过安装Keystone这一个过程来感受Keystone在Openstack架构中所充当的角色。下面给出了Keystone-M的安装过程。

Keystone安装列表

Openstack组件部署 — Overview和前期环境准备
Openstack组建部署 — Environment of Controller Node
Openstack组件部署 — Keystone功能介绍与认证实现流程
Openstack组件部署 — Keystone Install & Create service entity and API endpoints
Openstack组件部署 — keystone(domain, projects, users, and roles)

Keystone架构

Keystone的管理对象

User:指使用Openstack service的用户,可以是人、服务、系统,但凡使用了Openstack service的对象都可以称为User。

Project(Tenant):可以理解为一个人、或服务所拥有的 资源集合 。在一个Project(Tenant)中可以包含多个User,每一个User都会根据权限的划分来使用Project(Tenant)中的资源。比如通过Nova创建虚拟机时要指定到某个Project中,在Cinder创建卷也要指定到某个Project中。User访问Project的资源前,必须要与该Project关联,并且指定User在Project下的Role。

Role:用于划分权限。可以通过给User指定Role,使User获得Role对应的操作权限。Keystone返回给User的Token包含了Role列表,被访问的Services会判断访问它的User和User提供的Token中所包含的Role。系统默认使用管理Role admin和成员Role _member_ 。

Policy:OpenStack对User的验证除了OpenStack的身份验证以外,还需要鉴别User对某个Service是否有访问权限。Policy机制就是用来控制User对Tenant中资源(包括Services)的操作权限。对于Keystone service来说,Policy就是一个JSON文件,默认是/etc/keystone/policy.json。通过配置这个文件,Keystone Service实现了对User基于Role的权限管理。

Token:是一个字符串表示,作为访问资源的令牌。Token包含了在 指定范围和有效时间内 可以被访问的资源。EG. 在Nova中一个tenant可以是一些虚拟机,在Swift和Glance中一个tenant可以是一些镜像存储,在Network中一个tenant可以是一些网络资源。Token一般被User持有。

Credentials:用于确认用户身份的凭证

Authentication:确定用户身份的过程

Service:Openstack service,即Openstack中运行的组件服务。

Endpoint:一个可以通过网络来访问和定位某个Openstack service的地址,通常是一个URL。比如,当Nova需要访问Glance服务去获取image 时,Nova通过访问Keystone拿到Glance的endpoint,然后通过访问该endpoint去获取Glance服务。我们可以通过Endpoint的region属性去定义多个region。Endpoint 该使用对象分为三类:

  • admin url –> 给admin用户使用,Post:35357
  • internal url –> OpenStack内部服务使用来跟别的服务通信,Port:5000
  • public url –> 其它用户可以访问的地址,Post:5000

public url可以被全局访问,private url只能被局域网访问,admin url被从常规的访问中分离。

一个理解Keystone管理对象功能的例子

如果把宾馆比作为Openstack,那么宾馆的中央管理系统就是Keystone,入住宾馆的人就是User 。在宾馆中拥有很多不同的房间,房间提供了不同的服务(Service)。在入住宾馆前,User需要给出身份证(Credential),中央管理系统(Keystone)在确认User的身份后(Authenticaiton),会给你一个房卡(Token)和导航地图(Endpoint)。不同VIP(Role)级别的User,拥有不同权限的房卡(Token),如果你的VIP(Role)等级高,你可以享受到豪华的总统套房。然后User拿着房卡(Token)和地图(Endpoint),就可以进入特定的房间去享受不同的Services。每一个服务(Services)中都拥有着一些特定资源(Project),例如:按摩服务中可以使用的精油种类和数量。User可以根据自己的权限来使用这些资源。

组件 类比
Openstack 宾馆
Keystone 中央管理系统
Project 旅游项目,拥有宾馆的某些资源
User 旅客
Credentials 旅客的身份证
Authentication 确定旅客身份的过程
Token 房卡
Role VIP等级
Endpoint 服务提供场所的地址
Service 宾馆可以提供的服务类别

Keystone管理对象之间的关系

这里写图片描述

Keystone V3的新特性

这节的内容引用自IBM developerWorks

  • Tenant 重命名为 Project
  • 添加了 Domain 的概念
  • 添加了 Group 的概念

在本系列的Openstack-M版本中就使用了Keystone-V3。

V3的改进

问题1:在Keystone V2中,资源分配是以Tenant为单位的,这不太符合现实世界中的层级关系。如一个公司在 Openstack中拥有两个不同的项目,他需要管理两个Tenant来分别对应这两个项目,并对这两个Tenant中的用户分别分配角色。由于在Tenant之上并不存在一个更高层的概念,无法对 Tenant 进行统一的管理,所以这给多 Tenant 的用户带来了不便。
解决:V3 利用 Domain 的概念实现真正的多租户(multi-tenancy)架构,Domain 担任 Project 的高层容器。云服务的客户是 Domain 的所有者,他们可以在自己的 Domain 中创建多个 Projects、Users、Groups 和 Roles。通过引入 Domain,云服务客户可以对其拥有的多个 Project 进行统一管理,而不必再向过去那样对每一个 Project 进行单独管理。
简而言之,Domain的引入是为了将多个Project进行封装,成为单一实体再交付给相应的一个客户使用

问题2:在 Keystone V2中,用户的权限管理是以每一个用户为单位,需要对每一个用户进行角色分配,并不存在一种对一组用户进行统一管理的方案,这给系统管理员带来了额外的工作和不便。
解决:V3引入了Group的概念,Group 是一组 Users 的容器,可以向 Group 中添加用户,并直接给 Group 分配角色,那么在这个 Group 中的所有用户就都拥有了 Group 所拥有的角色权限。通过引入 Group 的概念,Keystone V3 实现了对用户组的管理,达到了同时管理一组用户权限的目的。这与 V2 中直接向 User/Project 指定 Role 不同,使得对云服务进行管理更加便捷。
类比操作系统中的用户组,是批量便捷操作的体现。

Authorization授权功能的应用

  • 授权(Authorization):授予用户在一个服务中所拥有的权限

V3的组织结构
这里写图片描述
一个 Domain 包含有 3 个 Project,可以通过 Group1 将 Role Sysadmin直接赋予 Domain1,那么 Group1 中的所有用户将会对 Domain1 中的所有 Projects 都拥有管理员权限。也可以通过 Group2 将 Role Engineer 只赋予 Project3,这样 Group2 中的 User 就只拥有对 Project3 相应的权限,而不会影响其它 Projects。

不妨回顾一下,在Openstack组件部署 — keystone(domain, projects, users, and roles)一篇中,我们在domain default内创建了用于管理的project admin、User adminRole admin,并且将Role admin赋予了Project admin中的User admin。使得User admin拥有了管理员的权限。当然我们在这个操作中,并没有使用到Group的功能,仍然直接对Tenant中的User分配了角色。

openstack domain create --description "Default Domain" default
openstack project create --domain default --description "Admin Project" admin
openstack user create --domain default --password-prompt admin
openstack role create admin
openstack role add --project admin --user admin admin  #User admin与Project admin关联,并指定该用户在该租户下的角色Role admin,这样用户admin才能够访问租户admin的资源
  • 1
  • 2
  • 3
  • 4
  • 5

Authentication认证功能的应用过程

  • 身份认证(Authentication):令牌Token的发放和校验

这里写图片描述

Keystone 和其它 OpenStack service之间的交互和协同工作:首先User向Keystone提供自己的Credentials(凭证:用于确认用户身份的数据,EG. username/password)。Keystone会从SQL Database中读取数据对User提供的Credentials进行验证,如验证通过,会向User返回一个Token,该Token限定了可以在有效时间内被访问的 OpenStack API Endpoint和资源 。此后User所有的Request都会使用该Token进行身份验证。如用户向Nova申请虚拟机服务,Nova会将User提供的Token发送给Keystone进行Verify验证,Keystone会根据Token判断User是否拥有执行申请虚拟机操作的权限,若验证通过那么Nova会向其提供相对应的服务。其它Openstack和Keystone的交互也是如此。
所以Keystone在Openstack中所处的位置如下图所示:

这里写图片描述

openstack keystone整体架构与功能

关于keystone模块,我将从整体架构与功能,用户信息管理,认证服务3个模块用3篇文章进行分析。 1. keystone的基本功能           keystone作为openstack的I...
  • wsfdl
  • wsfdl
  • 2014年03月05日 23:12
  • 22022

openstack之虚拟机的创建流程

本文试图详细地描述openstack创建虚拟机的完整过程,从用户发起请求到虚拟机成功运行,包括客户端请求的发出、keystone身份验证、nova-api接收请求、nova-scheduler调度、n...
  • zhongbeida_xue
  • zhongbeida_xue
  • 2016年11月17日 10:48
  • 1940

OpenStack Mitaka 版本中 keystone 的概念、概念之间的关系、以及keystone身份认证的基本过程描述

OpenStack经过这么多版本的演变,keystone中出现了无数概念,每个版本都有所区别。本文重点介绍Mitaka版本中keystone的各种概念、这些概念之间的关系,以及keystone工作过程...
  • zhujie_hades
  • zhujie_hades
  • 2016年08月03日 17:15
  • 1644

Openstack Keystone 认证流程(六)--认证

1. 身份认证在前一章中, 介绍了路由的过程, 这样我们就能URL中轻易地找到所对应的需要执行的代码。在这一章中, 我们看看具体的一个认证请求是如何被处理的。假设有如下一个请求:$ curl -s -...
  • TangHuanan
  • TangHuanan
  • 2015年02月16日 11:10
  • 2517

OpenStack Identity Keystone基本概念及验证进化过程

一、概念与关系     先上图,看user、credential、group、role、project/tenant、service、endpoint、domain、region;token、auth...
  • evandeng2009
  • evandeng2009
  • 2016年06月29日 17:48
  • 1514

Openstack基础架构和各组件的关系

Openstack学习总结   Openstack简介         OpenStack是一个由美国国家航空航天局(NASA)和Rackspace合作研发并发起的开源项目。其中Rackspace...
  • SL_World
  • SL_World
  • 2017年12月12日 15:05
  • 400

OpenStack架构

1、OpenStack是什么     OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集。其宗旨在于,帮助组织运行为虚拟计算或存储服务的云,为公有云、私...
  • zhoudaxia
  • zhoudaxia
  • 2013年10月13日 19:54
  • 3700

三、OpenStack入门 之 各组件解析

OpenStack入门 之 各组件解析写在前面学习目标: 掌握 OpenStack 的各组件的架构和功能 本次笔记的内容有: Nova 组件解析 Swift 组件解析 Cinder 组件解析 Neut...
  • Heartyhu
  • Heartyhu
  • 2016年04月07日 16:26
  • 11982

二、OpenStack入门 之 架构分析

OpenStack入门 之 架构分析写在前面学习目标: 了解 OpenStack 各组件的逻辑关系; 了解 OpenStack 的各组件的通信和部署关系; 了解 OpenStack 的工作流程; 接下...
  • Heartyhu
  • Heartyhu
  • 2016年04月01日 01:00
  • 11952

OpenStack各组件逻辑关系、通信部署关系及工作流程学习笔记2017-11-16

学习目标: 了解 OpenStack 各组件的逻辑关系;了解 OpenStack 的各组件的通信和部署关系;了解 OpenStack 的工作流程; 接下来我会掌握: OpenStack 组件间的逻...
  • q123_xi
  • q123_xi
  • 2017年11月16日 13:44
  • 546
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Openstack组件 — Keystone认证功能实现原理
举报原因:
原因补充:

(最多只允许输入30个字)