keystone认证服务

news2024/12/23 15:52:22

keystone认证服务

1、keystone管理用户

1-1、简介:

在OpenStack云计算平台中,Keystone是一个核心组件,主要用于提供统一的认证服务。其功能包括:

  1. 身份验证:Keystone负责验证用户的身份,通常通过用户名和密码或其他认证机制进行。
  2. 令牌发放和校验:一旦用户身份验证成功,Keystone会发放一个令牌(Token),该令牌包含了用户在指定范围和有效时间内可以访问的资源信息。同时,Keystone还负责校验令牌的合法性。
  3. 服务列表管理:Keystone维护了一个服务列表,记录了OpenStack中运行的各个组件服务的信息。
  4. 用户权限定义:Keystone支持用户权限的划分和管理,通过角色(Role)机制,可以为不同的用户或用户组分配不同的操作权限。
1-2、身份服务功能:
  • 身份认证:令牌管理、访问控制
  • 在经过身份认证后,提供路径指引服务
  • 用户授权:授权用户在一个服务中所拥有的权限(作用范围、有效期)
  • 用户管理:管理用户账户
  • 服务目录:提供可用于服务的API端点,即提供具体的URL路径(具体的路径)
1-3、服务认证流程:
1-3-1:流程图:

在这里插入图片描述

1-3-2:模块信息:
  • user:用户
  • keystone 身份验证:为所有服务模块提供认证与授权
  • Nova 计算服务:管理实例的生命周期
  • Glance 镜像服务:提供镜像服务
  • Neutron 网络服务:提供网络服务
1-3-3:执行流程:

在OpenStack中,Keystone的工作原理大致如下:

  • 用户向Keystone发送用户名和密码进行身份验证。
  • 验证成功后,Keystone返回一个临时令牌和一个服务目录列表给用户。
  • 用户使用临时令牌向服务目录中的服务请求资源时,需要再次通过Keystone的验证。
  • Keystone验证令牌通过后,允许用户访问相应的服务资源。
1-3-4:详细分析:
  • user ——> keystone

1.首先Client用户通过命令或horizon(账号密码)的方式进行登录(验证方式包括:令牌、密钥等);

  • keystone ——> user

2.keystone会向Client发送credentials用于表示验证成功,同时向user发送一个Token(可以使用服务的权限范围和时间)和Endpoint(API地址或具体的URL);

  • user ——> Nova

3.Client通过Token和Endpoint向nova的API发送申请创建虚拟机的请求;

  • Nova——> keystone

4.nova会向keystone认证client用户的Token是否可用;

  • keystone ——> nova

5.认证成功,令牌有效

  • nova ——> glance

6.nova拿着client的Token和Image(申请的镜像对应的属性,规格)向glance提出镜像的请求;

  • glance ——> keystone

7.glance会拿着nova给的Token向keystone认证,是否可用;

  • keystone ——> glance

8.认证成功,令牌有效,glance处理nova请求

  • glance ——> nova

9.glance会给nova具体的Image本身;

  • nova ——> neutron

10.nova拿着Client的Token令牌和network需求向neutron发出请求;

  • neutron ——> keystone

11.neutron拿着nova给的Token去向keystone认证,是否可用

  • keystone ——> neutron

12.认证成功,令牌有效,neutron处理nova的请求

  • neutron ——> nova

13.neutron会提供给nova的具体的网络服务本身;

  • nova ——> Client

14.nova开始创建虚拟机,创建成功后返回信息给Client,然后Client会收到虚拟机创建成功的信息

keystone端口号:5000

1-4、open stack架构的keystone组件部署
  • keystone认证;

  • glance镜像;

  • nova核心组件;

  • neutron网络

2、部署keystone认证组件

2-1Keystone的配置
  • 安装keystone相关软件包
[root@controller bin]# yum install -y openstack-keystone httpd mod_wsgi 
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
软件包 1:openstack-keystone-9.0.2-1.el7.noarch 已安装并且是最新版本
软件包 httpd-2.4.6-40.el7.centos.4.x86_64 已安装并且是最新版本
软件包 mod_wsgi-3.4-12.el7_0.x86_64 已安装并且是最新版本
无须任何处理
  • 创建keystone数据库
[root@controller bin]# mysql -uroot -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 133
Server version: 10.1.17-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database keystone;
ERROR 1007 (HY000): Can't create database 'keystone'; database exists
MariaDB [(none)]> drop database keystone
    -> ;
Query OK, 37 rows affected (3.09 sec)

MariaDB [(none)]> create database keystone;
Query OK, 1 row affected (0.04 sec)

MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'keystone';
Query OK, 0 rows affected (0.15 sec)

MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'%' identified by 'keystone';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> 

  • 生成管理员的令牌环
[root@controller /]# openssl rand -hex 10
65790615279353b4cef2
[root@controller /]# 
  • 编辑keystone配置文件

配置数据库连接、定义管理员初始令牌的值

[root@controller /]# vi /etc/keystone/keystone.conf 
##修改如下:
admin_token = 65790615279353b4cef2
connection = mysql+pymysql://keystone:keystone@controller/keystone
provider = fernet
  • 为keystone创建数据表
[root@controller /]# su -s /bin/sh -c "keystone-manage db_sync" keystone
##查看
[root@controller /]# mysql -h 192.168.10.144 -ukeystone -pkeystone -e "use keystone;show tables;"
+------------------------+
| Tables_in_keystone     |
+------------------------+
| access_token           |
| assignment             |
| config_register        |
| consumer               |
| credential             |
| domain                 |
| endpoint               |
| endpoint_group         |
| federated_user         |
| federation_protocol    |
| group                  |
| id_mapping             |
| identity_provider      |
| idp_remote_ids         |
| implied_role           |
| local_user             |
| mapping                |
| migrate_version        |
| password               |
| policy                 |
| policy_association     |
| project                |
| project_endpoint       |
| project_endpoint_group |
| region                 |
| request_token          |
| revocation_event       |
| role                   |
| sensitive_config       |
| service                |
| service_provider       |
| token                  |
| trust                  |
| trust_role             |
| user                   |
| user_group_membership  |
| whitelisted_config     |
+------------------------+
[root@controller /]# 
  • 初始化Fernet keys
[root@controller /]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone 
[root@controller /]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone 

  • 配置Apache服务器
[root@controller /]# cp /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
cp:是否覆盖"/etc/httpd/conf.d/wsgi-keystone.conf"? y
[root@controller /]# vi /etc/httpd/conf/httpd.conf 
##修改 ServerName controller
[root@controller /]# systemctl start httpd 
[root@controller /]# systemctl enable httpd 
[root@controller /]# ss -tan | grep 5000
LISTEN     0      128         :::5000                    :::*                  
[root@controller /]#  ss -tan | grep 35357
LISTEN     0      128         :::35357                   :::*                  
[root@controller /]# 
  • 定义环境变量
[root@controller /]# export OS_TOKEN=babeaba15768af9f7848
[root@controller /]#  export OS_URL=http://controller:35357/v3
[root@controller /]# export OS_IDENTITY_API_VERSION=3
[root@controller /]# 
2-2创建域、项目、用户和角色

以下创建的为管理员环境即admin

  • 创建default域
openstack domain create --description "Default Domain" default
  • 创建admin项目
openstack project create --domain default --description "Admin Project" admin
  • 创建admin用户
 openstack user create --domain default --password-prompt admin 
  • 创建admin角色
openstack role create admin 
  • 将以上创建的关联在一起
openstack role add --project admin --user admin admin 
2-3创建普通用户环境

创建方法和上面的一致,普通用户就相当于我们在阿里云上注册的一个新账号

  • 创建user项目
[root@controller ~]# openstack project create  --domain default --description "User Project" user

  • 创建user用户
[root@controller ~]# openstack user create --domain default --password-prompt user

  • 创建user角色
[root@controller ~]# openstack role create user 

  • 将以上三者关联到一起
[root@controller ~]# openstack role add --project user --user user user 

2-4 创建服务实体和API端点信息

服务实体包括:keystone、Nova、glance、neutron等
API端点信息:访问每一个服务的URL路径
端点信息可以分为如下三类:
admin (管理员入口)
internal(私有 内部通信)
public(公有 其他通信)

  • 创建keystone服务实体
[root@controller ~]# openstack service create --name keystone --description "Openstack Identity" identity
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Openstack Identity               |
| enabled     | True                             |
| id          | 9be4fafed2f94284bbe0eab06bebcd55 |
| name        | keystone                         |
| type        | identity                         |
+-------------+----------------------------------+
  • 创建public公有端点信息
[root@controller ~]# openstack endpoint create --region RegionOne identity public http://controller:5000/v3 

  • 创建internal私有端点信息
[root@controller ~]# openstack endpoint create --region RegionOne identity internal http://controller:5000/v3

  • 创建admin管理员端点信息
[root@controller ~]# openstack endpoint create --region RegionOne identity admin http://controller:35357/v3

2-5验证测试
  • 删除原先我们定义的环境变量
[root@controller ~]# unset OS_TOKEN OS_URL
##再次执行报错
[root@controller ~]# openstack service list 
Missing value auth-url required for auth plugin password
##这里提示要进行用户认证,这里还没有连接到keystone

  • 使用命令行的方式来连接到keystone测试

因为我们已经创建完成了admin环境和user环境

[root@controller ~]# openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue
Password: 
##有信息返回,则表示成功

openstack service list

Missing value auth-url required for auth plugin password
##这里提示要进行用户认证,这里还没有连接到keystone


- 使用命令行的方式来连接到keystone测试


因为我们已经创建完成了admin环境和user环境

```shell
[root@controller ~]# openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue
Password: 
##有信息返回,则表示成功

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

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

相关文章

Qt第三方库QHotKey设置小键盘数字快捷键

一、看了一圈没有找到可以设置小键盘的情况。 这两天在研究快捷键的使用。发现qt的里的快捷键不是全局的。找了两个第三方快捷键QHotKey,还有一个QxtGlobalShortcut。但是这两个都不能设置小键盘的数字。 比如QKeySequenceEdit (Ctrl1) 这个…

java第二十四课 —— super 关键字 | 方法重写

super 关键字 基本介绍 super 代表父类的引用,用于访问父类的属性、方法、构造器。 基本语法 访问父类的属性,但不能访问父类的 private 属性。 super.属性名; 访问父类的方法,不能访问父类的 private 方法。 super.方法名(参数列表); 访…

每天五分钟深度学习框架pytorch:多维tensor向量在某一维度的拼接和分割

本文重点 在深度学习中,我们常常需要完成多个向量拼接,同时也要完成向量的分割,在pytorch中已经有封装好的库,我们可以直接调用完成这部分任务。 Cat拼接 c=torch.cat([a,b],dim=0)表示将a和b按0维度进行拼接,需要注意再非dim维度,两个矩阵的维度必须是一致的,不然会拼…

01 飞行器设计 —— 一门独立的学科

01 飞行器设计 —— 一门独立的学科 01 引言02 飞机设计概述2-1 什么是飞机设计?2-1 飞机设计是从哪里开始的?2-2 如何成为一名飞机设计师?2-4 本书的组织 参考文献 说明:关于Raymer的《Aircraft Design》的读书笔记; …

【数字化转型,从BI开始】论BI在数字化转型的作用

引言:在新的市场和用户需求、传统经济增长缓慢、疫情黑天鹅事件等多重因素的影响下,企业遭遇了集体性的困境,而数字化转型就是各领域企业寻找出的应对方式。数字化转型包含的三维度之一数据力,就包含数据治理和数据分析&#xff0…

第 4 章:从 Spring Framework 到 Spring Boot

通过前面几个章节的介绍,相信大家已经对 Spring Framework 有了一个基本的认识,相比早期那些没有 Spring Framework 加持的项目而言,它让生产力产生了质的飞跃。但人们的追求是无止境的,这也驱动着技术的发展。开发者认为 Spring …

浅谈配置元件之Java默认请求

浅谈配置元件之Java默认请求 1.简介 “Java默认请求”(虽然直接名为"Java Request"更常见)是一个高级配置元件,它允许用户通过Java代码自定义请求逻辑,为测试提供了极高的灵活性和扩展性。 2.Java请求组件概述 在JM…

MYSQL、ORACLE、PostgreSQL数据库对象层次及权限管理对比

文章目录 前言一、PostgreSQL二、MySQL三、Oracle 前言 本文为出于自己扩展、比较、图形化的思维路径自行总结归纳,可能有些细节不太准确,欢迎指正。 MySQL、Oracle、PostgreSQL关系型数据库都有管理员用户、用户、权限管理、表函数索引等数据库对象&am…

Python学习笔记10:入门知识(十)

函数 什么是函数 简单来说就是具备某些特定功能的带有名称的代码块。比如之前我们讲过的列表的增删改查函数,排序函数等等。 函数的作用 代码复用。函数作为具备某些特定功能的代码块,当你的程序需要多次使用同一段业务逻辑的时候,使用函…

KT-H6测距模块标品,测距范围1500m,demo报价1000RMB,批量报价500RMB

激光测距传感器是一种用于测量距离的模块,通常由传感器和相关电子设备组成,测距模块可以集成到各种设备和系统中,以实现准确的测距和定位功能。KT-H6系列激光测距模块,为自主研发,激光波长905nm的激光器,专为热成像、夜视仪、无人机、安防、瞄具等产品定身打造,其优点是…

msvcp120.dll丢失原因分析与解决方法分享

msvcp120.dll 是一个动态链接库(Dynamic Link Library, DLL),属于 Microsoft Visual C 2013 再发行组件包的一部分。它提供了 C 标准库的实现,使得使用 C 编写的应用程序能够在运行时动态链接到该库,从而访问其提供的函…

头歌资源库(6)汉诺塔(递归)

一、 问题描述 二、算法思想 首先定义一个函数,接收四个参数:n表示当前需要移动的盘子数量,A表示起始基座,B表示目标基座,C表示辅助基座。 在函数内部,首先判断如果n为1,即只有一个盘子需要…

父亲节 | 10位名家笔下的父亲,读懂那份孤独而深沉的父爱

Fathers Day 母爱如水,父爱如山。 相对于母爱的温柔,父亲的爱多了几分静默和深沉。 读完10位名家笔下的父亲,我们就会明白,到底亏欠了父亲多少。 不要让自己有“子欲养而亲不待”的后悔和遗憾, 多给父亲一些爱的表示&a…

项目进度和成本管理

1.如何正确标识出软件项目活动? 正确标识软件项目活动是项目管理中的一个重要步骤,它有助于确保项目的顺利进行和成功完成。以下是一些标识软件项目活动的步骤和建议: 项目范围定义:首先明确项目的目标和范围,这将帮助…

某集团数字化转型蓝图规划项目案例(94页PPT)

案例介绍: 本集团数字化转型蓝图规划项目通过确定目标,如制定集团数字化转型的整体战略和规划,明确转型方向和目标。构建数字化业务体系,实现业务流程数字化、智能化。搭建数字化管理平台,提升集团内部的管理效率和决…

c语言——扫雷游戏(简易版)

目录 前言游戏设计 前言 什么是扫雷游戏? 游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。 这个游戏对于c语言的初学者来说难度还是挺大的,那我就实现一个初学者也能快速学…

C++ 55 之 多继承

#include <iostream> #include <string> using namespace std;class Base08_1{ public:int m_a;Base08_1(){this->m_a 10;} };class Base08_2{ public:// int m_b;int m_a;Base08_2(){// this->m_b 20;this->m_a 30;} };// 多继承 继承的类型都要…

sort使用

具体使用 bool myfunction(int i, int j) { return (i < j); }class my_function { public:bool operator()(int i, int j) { return (i < j); } }; int main() {int array[] { 4,1,8,5,3,7,0,9,2,6 };// 默认按照小于比较&#xff0c;排出来结果是升序std::sort(array…

汉邦高科防监控初始化恢复方法

汉邦高科算是安防市场上的三线品牌&#xff0c;产品不算多&#xff0c;但在某些地域有一定的市场份额。下面我们看下汉邦高科安防监控格式化后如何恢复数据&#xff1a; 故障存储:ST300VM002 故障现象: 由于各种原因录像机被初始化&#xff0c;导致数据全部丢失&#xff0c;…

逻辑斯蒂回归与最大熵

知识树 感知机的缺陷 修补感知机缺陷-逻辑斯蒂回归 下面这两个值是强制给的,不是推导的 最大熵 最大熵的一个小故事 最大熵模型 我们最终目标是要求P(Y|X) 书上写的是H,但是2我们认为H(Y|X)更合适 咱们最终的目的是要用拉格朗日乘数法,所以需要约束 总结 感觉深度之眼比较模…