OpenStack之keystone(用户认证)

news2025/6/13 19:02:57

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.coloradmin.cn/o/1504069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot256基于springboot+vue的游戏交易系统

游戏交易系统设计与实现 摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对游戏交…

制定一份完美的测试计划,让您的产品质量更上一层楼!

大家好,我是彭于晏。今天学习测试计划如何书写。 虽然很多人日常工作中都知道测试计划是什么,但是写好测试计划,其实并不容易。今天就来一起学习下测试计划如何书写。 什么是测试计划? 测试计划是一份为软件产品所准备的详细文档…

揭秘接口测试:完整流程指南!

在讲接口测试之前,首先需要给大家申明下:接口测试对于测试人员而言,非常非常重要,懂功能测试接口测试,就能在企业中拿到一份非常不错的薪资。 这么重要的接口测试,一般也是面试笔试必问。为方便大家更好的…

Qt 实现诈金花的牌面值分析工具

诈金花是很多男人最爱的卡牌游戏 , 每当你拿到三张牌的时候, 生活重新充满了期待和鸟语花香. 那么我们如果判断手中的牌在所有可能出现的牌中占据的百分比位置呢. 这是最终效果: 这是更多的结果: 在此做些简单的说明: 炸弹(有些地方叫豹子) > 同花顺 > 同花 > 顺…

【Web】浅聊Java反序列化之Rome——关于其他利用链

目录 前言 JdbcRowSetImpl利用链 BasicDataSource利用链 Hashtable利用链 BadAttributeValueExpException利用链 HotSwappableTargetSource利用链 前文:【Web】浅聊Java反序列化之Rome——EqualsBean&ObjectBean-CSDN博客 前言 Rome中ToStringBean的利用…

ElasticSearch 底层读写原理

ElasticSearch 底层读写原理 ​ 写请求是写入 primary shard,然后同步给所有的 replica shard;读请求可以从 primary shard 或 replica shard 读取,采用的是随机轮询算法。 1、ES写入数据的过程 1.选择任意一个DataNode发送请求&#xff0c…

山泉还可以申请商标不,现阶段通过率如何!

在32类类别啤酒饮料是许多生产水企业主要申请注册的类别,那现在山泉在这个类别还可以申请注册商标不,山泉在这个类别基本上是通用词,首先是需要前面词具有显著性,没的相同或近似才可以。 经普推知产老杨检索发现,在32…

数据分析-Pandas数据画箱线图

数据分析-Pandas数据画箱线图 数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律? 数据表&#xff…

全网最最最详细centos7如何安装docker教程

在CentOS 7上安装Docker主要包括以下步骤: 1. 卸载旧版本的Docker 首先,需要确保系统上没有安装旧版本的Docker。可以通过以下命令来卸载它们: sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-late…

阿珊详解Vue Router的守卫机制

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

nginx代理minio客户端

错误方式 在点击桶名查看文件时, 会一直处于loading加载中 worker_processes 1; #设置 Nginx 启动的工作进程数为 1。events {worker_connections 1024; ##设置每个工作进程的最大并发连接数为 1024。 }http {include mime.types; #该文件定义了文件扩展名和 MIME 类型…

AJAX学习(一)

版权声明 本文章来源于B站上的某马课程,由本人整理,仅供学习交流使用。如涉及侵权问题,请立即与本人联系,本人将积极配合删除相关内容。感谢理解和支持,本人致力于维护原创作品的权益,共同营造一个尊重知识…

全网最新最全的Jmeter接口测试:jmeter_定时器

固定定时器 如果你需要让每个线程在请求之前按相同的指定时间停顿,那么可以使用这个定时器;需要注意的是,固定定时器的延时不会计入单个sampler的响应时间,但会计入事务控制器的时间 1、使用固定定时器位置在http请求中&#xf…

CVHub | 初识langchain,3分钟快速了解!

本文来源公众号“CVHub”,仅用于学术分享,侵权删,干货满满。 原文链接:初识langchain 1 什么是langchain langchain[1]是一个用于构建LLM-Based应用的框架,提供以下能力: 上下文感知:可以为LLM链接上下文…

汽车零部件制造中的信息抽取技术:提升效率与质量的关键

一、引言 在汽车制造业中,零部件的生产是整个制造流程的关键一环。这些零部件,包括但不限于制动系统、转向系统和传动系统,是确保汽车安全、可靠运行的基础。为了满足现代汽车工业对效率和质量的严格要求,制造商们纷纷投入到高度…

jvm堆概述

《java虚拟机规范》中对java堆的描述是:所有的对象实例以及数组都应当在运行时分配在堆上。 一个JVM实例只存在一个堆内存(就是new 出来一个对象),java内存管理的核心区域 java堆区在jvm启动的时候就被创建,空间大小确定。是jvm管理的最大一…

探索代理服务器:保护您的网络安全与隐私

🍎个人博客:个人主页 🏆个人专栏:Linux ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 隐藏真实IP地址: 访问控制: 加速访问速度: 过滤内容: 突破访问限制&#xff1…

深入浅出计算机网络 day.1 概论③ 电路交换、分组交换和报文交换

人无法同时拥有青春和对青春的感受 —— 04.3.9 内容概述 01.电路交换、分组交换和报文交换 02.三种交换方式的对比 一、电路交换、分组交换和报文交换 1.电路交换 计算机之间的数据传送是突发式的,当使用电路交换来传送计算机数据时,其线路的传输效率一…

MUMU模拟器12连logcat的方法

大家好,我是阿赵。   在开发手机游戏的时候,在真机上会出现各种问题,在查询问题的时候,安卓手机需要用adb连接来连接手机看logcat输出分析问题。但由于连接手机比较麻烦,所以我都习惯在电脑用安卓模拟器来测试。   …

启动项目报502怎么处理呢?

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。 💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精…