OpenStack之keystone(用户认证)

Keystone(认证)

Keystone 概述

1)管理用户及其权限

2)维护OpenStack Services 的 Endpoint

3)Authentication(认证)和 Authorization(授权)

keystone的名词概念

1.User(用户或服务)

指代任何使用OpenStack的实体,可以是真正的用户,其他系统或者服务。就是说只要是访问openstack service 的对象都可以称为User

2.Credentials(确认身份的凭证)

是User用来证明自己身份的信息,可以是:

  1)用户名/密码

  2)Token(有时限)

  3)API Key(秘钥)

  4)其他高级方式

3.Authentication(认证过程)

是Keystone验证User身份的过程。User访问OpenStack时向Keystone提交用户名和密码形式的Credentials,Keystone验证通过后会给User签发一个Token作为后续访问的Credential(证书).

4.Token (临时身份证明)

是由数字和字母组成的字符串,User成功Authentication 后由Keystone分配给User。

  1)Token 用做访问 Service 的 Credential

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

  3)Token 的有效期默认是24小时

5.project (一个人或服务所拥有的资源集合。不同的Project之间的资源进行隔离)

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

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

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

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

  4)一个User可以属于多个 Project。

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

6.Service(Keystone提供的服务)

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

7.Endpoint (用来访问openstack service的地址)

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

8.Role  角色(VIP)

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

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

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

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

10.openstack 适用于全局,可管理和查看各类信息。(有很多命令需要自己研究)

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

Keystone 认证管理

图示:

叙述:首先,User向Keystone提供自己的凭证(凭证里面有自己的用户名和密码),之后Keystone会从数据库里读取数据,对User这个凭证进行验证,若通过,会向User返回Token和Endpoint。该Token限定了用户在限定时间内被访问的Endpoint和资源。此时如果用户利用Nova创建虚拟机服务,Nova会把用户提供的Token发送给Keystone再次验证,Keystone会根据Token判断User是否拥有执行创建虚拟机操作的权限,若验证通过,Nova会向其提供相对应的服务,之后,向Glance和Neutron分别发送用户Token,同时分别请求镜像和网络资源,同上,Glance和Neutron会把用户提供的Token发送给Keystone再次验证,判断User是否拥有对应操作的执行权限,通过后,再提供相应的操作。最后虚拟机创建完成,Nova把相关信息反馈给用户。

总结:用户每进行一步操作,只要用到某种服务,该服务必先通过用户的Token向Keystone验证对应的操作权限,只有通过,才能进行下一步操作。

对红字的解释:

  1. Endpoint:相当于一个网络上可访问的网址,通常是一个URL(URL:统一资源定位符,互联网上标准资源的地址)。每个服务相应位置记录。
  2. Token限定时间:临时凭证,有效期是24个小时。

Token

通俗的讲,token 是用户的一种凭证,需拿正确的用户名/密码向 Keystone 申请才能得到。如果用户每次都采用用户名/密码访问 OpenStack API,容易泄露用户信息,带来安全隐患。所以 OpenStack 要求用户访问其 API 前,必须先获取 token,然后用 token 作为用户凭据访问 OpenStack API。

注释:API:用来接收和发送请求的接口(个人理解)

详情登陆:什么是API,说人话!-CSDN博客

Keystone四种认证方式:UUID、PKI、PKIZ、Fernet

  1. UUID

源码分析:长度固定为32byte的随机字符串。

缺陷:每次请求都要经过Keystone进行验证,大大增幅Keystone工作量,影响性能。

  1. PKI

原理:在keystone初始化时,keystone生成了CA的公钥CA.pem和私钥CA.key,同时keystone产生了自己的公钥keystone.pub和私钥keystone.key,然后将keystone.pub进行CA的签名,生成keystone.pem。

当用户拿着用户名/密码去keystone认证后,keystone将用户的基本信息通过keystone.key进行加密,并将密文作为token返还给用户。当用户拿着token发送请求时(例如访问Nova),Nova拿到用户token时,通过事先拿到keystone的证书keystone.pem(这一过程只需要进行一次)进行解密,获取用户信息。

对于用户的token,还需进行token的合法时间,以及token还是否存在进行判断。所以当Nova每一次拿到token后还需向keystone询问一次token的失败列表,检查token是否失效。这一过程对于keystone的负载还是相当轻的,所以PKI还是有效解决了keystone性能瓶颈的问题。

总之,OpenStack服务中的每一个API Endpoint都有一份keystone签发的证书,失效列表和根证书。API不用在直接去keystone认证token是否合法,只需要根据keystone的证书和失效列表就可以确定token是否合法。但是这里还是会每次都需要请求keystone去获取失效列表。

缺陷:长度负载重,一般不推荐在生产中部署,还需要一个受信任的CA颁发的证书。

  1. PKIZ

原理:和PKI基本一致,只是在使用base64url encoding进行编码的基础上,又使用压缩机制,长度上减小了一半,并且Token使用PKIZ_开头。

缺陷:同PKI

  1. Fernet

起源:当集群运行较长一段时间后,访问其 API 会变得奇慢无比,究其原因在于 Keystone 数据库存储了大量的 token 导致性能太差,解决的办法是经常清理 token。

特点:采用对称加密库(加密密钥和解密密钥相同) 加密 token,不需要存储于数据库,带来了一定的性能提升。采用 Key Rotation 更换密钥,从而提高安全性。

fernet不需要后端持久化操作(采用 Key Rotation定期更换密钥,只要Keystone具有访问这些key的权限,更新后的token就不需要在keystone数据库中存储,缓解了数据库负载压力),并且token的认证,使用的是密钥进行解密,能够直接得出token Data的信息,从而进行token的过期认证。

缺陷:使用对称加密,安全性低。

Domain

Domain=project+user(+group)

Group=user×n    (n表示数量)

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

同一个domain中,元素的名称唯一,不同domain间,名称可以重复。

参数相关简介:

Group的主要目的是为了方便分配role,如果给group分配了一个role,那么group里的所有user都拥有了这个role。

Role名称必须唯一,相当于角色。policy.json文件根据role的名称所指定的允许进行的操作。

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也不指定domai为scope,同时user也没有default project时获得的token,这是一种特殊的token。

安装和配置keystone

一、在base节点上配置

1.登录base节点并创建数据库

2.授予数据库用户keystone访问keystone数据库的权限

3.查看创建好的数据库keystone

二、在ctrl节点上配置

1.安装软件包

# yum install openstack-keystone httpd mod_wsgi –y 

#yum install python-openstackclient

2.编辑/etc/keystone/keystone.conf 文件并完成下列操作:

A.备份keyston.conf

B.去掉keystone配置文件中的注释行

C.在[database]小节,配置数据库访问;在[token]小节,配置使用 Fernet 技术提供令牌

3.初始化身份服务数据库

# su -s /bin/sh -c “keystone-manage db_sync” keystone 

4.初始化 Fernet key 仓库

# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone 

# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone 

5.引导身份服务,创建管理员。

# keystone-manage bootstrap --bootstrap-password ADMIN_PASS \ 
--bootstrap-admin-url http://ctrl.xdj.com:35357/v3/ \ 
--bootstrap-internal-url http://ctrl.xdj.com:5000/v3/ \ 
--bootstrap-public-url http://ctrl.xdj.com:5000/v3/ \ 
--bootstrap-region-id RegionOne 

三、配置 Apache HTTP 服务

1.编辑/etc/httpd/conf/httpd.conf 文件并配置 ServerName 配置项

2.创建到文件/usr/share/keystone/wsgi-keystone.conf 的链接:

Ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ 

四、配置环境变量

1.配置管理账号

# export OS_USERNAME=admin

# export OS_PASSWORD=ADMIN_PASS

# export OS_PROJECT_NAME=admin

# export OS_USER_DOMAIN_NAME=Default

# export OS_PROJECT_DOMAIN_NAME=Default

# export OS_AUTH_URL=http://ctrl.xdj.com:35357/v3

# export OS_IDENTITY_API_VERSION=3 

2.配置 ADMIN_PASS 为 keystone-manage bootstrap 命令中使用的密码 
创建域,项目,用户和角色 。

身份服务:身份服务为每一个 OpenStack 服务提供认证服务。认证服务使用一个 domain(域),projects(项目(tenants(租户))),users(用户)和roles(角色)的组合。

在 openstack 环境中创建一个包含其他服务唯一账号的 service 项目,创建 service 项目:

# openstack project create –domain default –description “Service Project” service 

3.配置 ADMIN_PASS 为 keystone-manage bootstrap 命令中使用的密码 
创建域,项目,用户和角色 
身份服务为每一个 OpenStack 服务提供认证服务。认证服务使用一个 domain(域),projects(项目(tenants(租户))),users(用户)和roles(角色)的组合。 
在 openstack 环境中创建一个包含其他服务唯一账号的 service 项目,创建 service 项目:

 
4. 创建 demo 项目:

5.创建 demo 用户:

6.创建 user 角色

7.添加 user 角色到 demo 项目和用户

五、验证操作 
在安装其他服务前,验证身份服务是否正常。 
1. 由于安全的原因,关闭临时认证令牌机制编辑/etc/keystone/keystone-paste.ini 文件并移除[pipeline:public_api], [pipeline:admin_api], 和[pipeline:api_v3]小节的 admin_token_auth 项。 

 2.删除临时环境变量

3.使用 admin 用户,请求认证令牌,密码ADMIN_PASS

4.使用 demo 用户,请求认证令牌:,密码DEMO_PASS

六、创建 OpenStack 客户端环境脚本 
 
1. 编辑 admin-openrc 文件,并添加下列内容,替换 ADMIN_PASS 为身份服务中 admin 用户的密码。 

2.编辑 demo-openrc 文件,并添加下列内容:替换 DEMO_PASS 为身份服务中 demo 用户的密码。

3.请求认证令牌

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/272564.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++内存管理篇

文章目录 1. C/C内存分布2. C中的内存管理方式3. operator new和operator delete函数4. new和delete的实现原理5. 定位new表达式(placement-new) 1. C/C内存分布 C语言中,为了方便管理内存空间,将内存分成了不同的区域,每个区域管理不同的数据…

代码随想录训练营第41天 | 动态规划:01背包理论基础、动态规划:01背包理论基础(滚动数组)、LeetCode 416.分割等和子集

动态规划:01背包理论基础 文章讲解:代码随想录(programmercarl.com) 视频讲解:带你学透0-1背包问题!_哔哩哔哩_bilibili 动态规划:01背包理论基础(滚动数组) 文章讲解:代码随想录(…

支付宝开放平台证书验签生成签名接入方式的操作流程之公钥证书,密钥证书的生成

#小李子9479# 调用支付宝接口的安全验证方式均使用sign_type为RSA2的方式,有两种 1。密钥模式:应用公钥、应用私钥、平台公钥生成签名和验签方式 2。证书模式:支付宝根证书、支付宝公钥证书、应用公钥证书、应用私钥,采用RSA20…

Solidity Uniswap V2 价格预言机

预言机是连接区块链与链下服务的桥梁,这样就可以从智能合约中查询现实世界的数据。Chainlink 是最大的oracle网络之一,创建于 2017 年,如今已成为许多 DeFi 应用的重要组成部分。https://github.com/XuHugo/solidityproject Uniswap 虽然是链…

【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点

文章目录 题目思路解答 题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出:[]示例 3&…

迷不迷糊?前后端、三层架构和MVC傻傻分不清

现在的项目都讲究前后端分离,那到底什么是前后端,前后端和以前的MVC以及三层架构啥关系呢?今天就这个问题展开一下,方面后面的学习,因为前面讲的jsp、servlet和javabean根据实例,基本上有一个框架的理解了&…

Ubuntu下使用DAPLink(OpenOCD)

目录 1. 下载OpenOCD源代码 2. 编译代码 2.1 运行bootstrap 2.2 安装关联库 2.3 运行./configure 2.4 运行make 2.5 运行sudo make install 3. 烧录程序 3.1 挂起MCU 3.2 写入镜像 3.3 校验镜像 通过OpenOCD实现,在Ubuntu18 64bit下验证。 1. 下载OpenOC…

人力资源社会保障部教育部关于印发《关于深化中小学教师职称制度改革的指导意见》的通知

人力资源社会保障部、教育部印发 关于《深化中小学教师职称制度改革的指导意见》的通知 人社部发[2015]79号 各省、自治区、直辖市及新疆生产建设兵团人力资源社会保障厅(局)、教育部门(教委、教育局): 为深化教育…

机器学习第29周周报 Beyond Dropout

文章目录 week29 Beyond Dropout摘要Abstract一、泛化理论二、文献阅读1. 题目2. abstract3. 网络架构3.1 特征图失真3.2 失真优化 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程4.3.1 全连接层实验4.3.2 卷积网络上的实验 4.4 结论 小结参考文献 week29 Beyond Dropout …

【C++专栏】C++入门 | 函数重载、引用、内联函数

博客主页:Duck Bro 博客主页系列专栏:C专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ C入门 | 函数重载、引用、内联函数 文章编号:C入门 / 02 文…

sizeof辨析——二维数组(超级详细)

二维数组加sizeof的知识如果基础不扎实,上面的代码恐怕很难区分,这篇文章就深度解析一下有关问题 我们在分析之前,要提及一些基础的前提知识 前提知识: 一: &数组名 和 sizeof(数组名)这…

【算法沉淀】最长回文子串

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《数据结构与算法:初学者入门指南》📘&am…

每日OJ题_路径dp①_力扣62. 不同路径

目录 力扣62. 不同路径 解析代码 力扣62. 不同路径 62. 不同路径 难度 中等 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标…

视频可回溯系统技术方案vue3+ts+tegg+mysql+redis+oss

一、 项目背景 保险、基金、银行等众多行业在做技术平台时都会需要一种能够准确了解用户操作行为的方式方法。诸如通过埋点、平台监控、视频可回溯等,通过技术手段,保存用户操作轨迹,以此规范安全销售、平台健康检查、出现纠纷时可追溯、问题…

chrome插件开发的几种展现页面形式,3分钟看完

想要开发一个chrome浏览器插件,还是很有必要清楚插件都可以在哪些地方显示出来的,比如只想在pop页面弹出,还是添加右键菜单,还是提示桌面通知?还是在哪里展示?有哪些展示方式等 browserAction(浏览器右上角…

免费下载Corel Video Studio 2024-轻松创建令人惊叹的视频!

免费下载Corel Video Studio 2024-轻松创建令人惊叹的视频! Corel Video Studio 2024免费下载Keygen 你厌倦了在视频编辑软件上花大钱吗?别再看了!我们为您提供了完美的解决方案——Corel Video Studio 2024。最棒的部分是什么?…

分享MDN前端结构化技能、实践指南、学习资源

前言 MDN课程为成为一名成功的前端开发人员提供了一个结构化的基本技能和实践指南,以及推荐的学习资源。 先看下让人不得不服的书《宝宝的网页设计》(套装共3册) 宝宝的HTML、宝宝的CSS、宝宝的JavaScript 全球首套中英文宝宝编程启蒙书&a…

计算机网络 八股

计算机网络体系结构 OSI:物理层、数据链路层、网络层、运输层、会话层、表示层、应用层

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Gauge)

数据量规图表组件,用于将数据展示为环形图表。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 可以包含单个子组件。 说明: 建议使用文本组件构建当前数值文本和辅…

【xv6操作系统】xv6 启动过程分析

一、调试用到的汇编代码 为了方便, Makefile 会创建.asm 文件,可以通过它来定位究竟是哪个指令导致了 bug。 可以看到, kernel 从 80000000 地址处开始执行,第二列为相应指令(如 auipc) 的 16 进制表示&a…