云计算Openstack Keystone

news2024/11/18 12:25:33

OpenStack Keystone是OpenStack平台中的一个核心组件,主要负责身份认证和授权管理服务。以下是关于OpenStack Keystone的详细介绍:

一、作用

  • 身份认证:Keystone为OpenStack平台提供统一的身份认证服务,管理所有用户(包括管理员、普通用户和服务用户等)的身份信息,进行用户的创建、修改、删除和查询等操作。它还支持用户组的创建和管理,便于权限的管理和控制。
  • 授权管理:Keystone提供多种身份认证方式(如用户名和密码、令牌、证书等)和授权策略(如基于角色的访问控制、基于策略的访问控制等),确保平台的安全性,满足不同用户和服务的需求。
  • 服务目录和终端管理:管理OpenStack平台的所有服务(如计算、网络、存储等)和终端类型(如Web、CLI、API等),提供服务的注册、查询和删除等功能,便于用户进行服务的访问和操作。

二、关键概念

  • 用户(User):使用OpenStack云服务的实体,可以是一个人、一个系统或一个服务。每个用户都有一个唯一的标识符(ID)和一个用户名。
  • 项目/租户(Project/Tenant):OpenStack中资源的逻辑集合,用于组织和隔离资源。每个项目/租户都有一个唯一的标识符(ID)和一个名称。用户可以直接分配给特定的项目/租户。
  • 角色(Role):定义用户在项目/租户中拥有的权限的集合。用户可以被分配到一个或多个角色,以控制其对资源的访问权限。
  • 令牌(Token):用于访问OpenStack资源的一个临时凭证,具有时效性。用户通过验证身份后获得令牌,并在后续请求中使用该令牌来访问资源。
  • 服务(Service):OpenStack中的一个组件,对外提供特定功能的服务。在Keystone中,服务可以被注册并关联到项目/租户和用户。
  • 端点(Endpoint):用于访问某个服务的网络地址,通常是一个URL。OpenStack中的每个服务都可能有多个端点,分别用于不同的访问目的(如管理员访问、内部访问、公共访问等)。

三、特性

  • 可扩展性:Keystone采用了模块化的设计,支持多种插件和扩展,可以扩展用户认证和授权、服务目录和终端管理等方面的功能。
  • 多租户支持:支持多租户的管理和控制,可以为不同的用户和服务提供不同的租户空间,确保平台的隔离和安全性。
  • 高可用性和容错性:具有高可用性和容错性的特性,可以在多个节点之间进行身份认证和授权的负载均衡和故障恢复,确保平台的可用性和稳定性。
  • 开放性和可定制性:作为一个开放源代码的组件,Keystone可以根据用户的需求进行功能定制和扩展。同时,它支持多种标准的身份认证和授权协议(如OAuth、SAML、OpenID Connect等),可以与其他身份认证和授权系统进行集成和对接。

四、架构和流程

Keystone在OpenStack架构中扮演了一个核心的角色,类似于一个服务总线或注册中心。其他服务通过Keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间的相互调用都需要经过Keystone的身份验证,以获得目标服务的Endpoint来找到目标服务。

在身份认证服务的整个流程中,用户通过命令行或控制面板登录OpenStack,凭借自己的证书(如用户名和密码)给Keystone验证。验证通过后,Keystone会发布一个令牌和用户所需服务的位置点(Endpoint)给用户。用户携带令牌向目标服务发起请求时,目标服务会拿着令牌向Keystone进行认证,以确认用户是否有权访问该服务。
Keystone作为OpenStack平台中的核心组件,其组件架构主要围绕身份认证和授权管理服务展开。以下是Keystone组件架构的详细解析:
在这里插入图片描述

模块功能
令牌令牌模块,该模块用来生成和管理令牌
目录目录模块,用来存储和管理服务以及与之对应的端点信息
验证验证模块,用来管理项目、用户、角色和提供认证服务
策略策略模块,用来存储和管理所有的访问权限

1、总体架构

Keystone的架构可以划分为几个关键模块,这些模块协同工作以提供身份认证和授权服务。总体上,Keystone的架构支持多种身份验证协议和标准,如LDAP、SAML、OAuth等,同时提供可扩展性和灵活性。

2、主要组件

  1. 代理服务(Proxy Service)
  • 功能:处理来自用户的请求,根据用户的身份信息和授权规则,将请求转发给相应的主体服务或令牌服务。
  • 作用:作为前端接口,接收用户的身份认证请求,并引导后续的请求流程。
  1. 主体服务(Entity Service)
  • 功能:负责处理用户和令牌的创建、更新和删除等操作,同时验证令牌的有效性。
  • 作用:管理用户身份信息和令牌状态,确保只有合法用户能够访问资源。
  1. 令牌服务(Token Service)
  • 功能:生成和管理用户的访问令牌。令牌是用于代表用户身份的加密字符串,可以在云计算环境的各个组件之间传递,以便验证用户的身份和授权。
  • 作用:提供临时凭证,用于在多个服务之间传递用户身份信息和授权信息。

3、其他关键组件

  1. 目录模块(Catalog Service)
  • 功能:存储和管理服务以及端点的信息。服务目录用于发现服务API端点(RESTful的URL),能够提供服务访问入口。
  • 作用:帮助用户和服务找到所需的其他服务接口,实现服务间的互联互通。
  1. 验证模块(Authentication Module)
  • 功能:管理用户、角色、项目和认证服务,执行具体的身份验证过程。
  • 作用:确保只有经过验证的用户才能访问OpenStack资源,同时支持多种身份验证方式。
  1. 策略模块(Policy Module)
  • 功能:存储和管理所有的访问权限规则,通过策略文件(如policy.yaml或policy.json)来定义用户的权限。
  • 作用:实现基于角色的访问控制(RBAC),确保用户只能访问其被授权的资源。

4、架构特点

  1. 开放性:Keystone遵循开放标准,可以与其他符合OpenStack规范的云计算平台集成。
  2. 可扩展性:Keystone的设计支持大量的用户和资源,无论是大型企业还是小型企业都能使用。
  3. 安全性:提供了严格的安全机制,包括加密和身份验证等,确保用户访问云计算资源的安全性。
  4. 灵活性:支持多种身份验证协议和标准,可以根据用户的需求灵活配置和使用。

5、工作流程

在这里插入图片描述

  1. 用户通过命令行或控制面板登录OpenStack,提交用户名和密码等认证信息。
  2. Keystone的验证模块接收认证信息,执行身份验证过程。
  3. 如果验证通过,Keystone的令牌服务生成一个访问令牌,并返回给用户。
  4. 用户携带令牌向目标服务发起请求,目标服务将令牌提交给Keystone进行验证。
  5. Keystone验证令牌的有效性后,允许用户访问目标服务。

五、部署

Keystone的部署是OpenStack安装过程中的一个重要环节,它负责提供身份验证和授权服务。以下是Keystone部署的详细步骤,这些步骤基于OpenStack的不同版本和不同的操作系统可能会有所不同,但基本流程是相似的。

1、准备工作

  1. 系统环境准备:
  • 确保操作系统已安装并配置好(如CentOS、Ubuntu等)。
  • 安装必要的软件包和工具,如yum、apt-get等。
  • 配置网络,确保系统可以访问外部网络或内部私有仓库。
  1. 安装数据库:
  • Keystone需要一个数据库来存储用户、角色、项目等信息。可以选择MySQL、MariaDB等数据库。
  • 安装数据库软件,并创建keystone数据库和用户,授予相应的权限。

2、安装Keystone软件包

  1. 使用包管理器安装:
  • 在大多数Linux发行版中,可以使用yum(如CentOS)或apt-get(如Ubuntu)等包管理器来安装Keystone软件包。
  • 示例命令(以CentOS为例):yum install openstack-keystone httpd mod_wsgi
  • 注意:可能还需要安装其他依赖包,如openstack-utils、python-openstackclient等。
  1. 验证安装:
  • 安装完成后,可以使用rpm -qa | grep openstack-keystone等命令来验证Keystone是否已正确安装。

3、配置Keystone

  1. 修改配置文件:
  • Keystone的配置文件通常位于/etc/keystone/目录下,如keystone.conf。
  • 修改配置文件以连接到数据库,并设置令牌提供程序等。
  • 示例配置(以MySQL为例):
[database]  
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@localhost/keystone  
 
[token]  
provider = fernet

注意:替换KEYSTONE_DBPASS为实际的数据库密码。

  1. 初始化数据库:
  • 使用keystone-manage db_sync命令来初始化数据库,创建必要的表结构。
  • 这一步骤是必需的,因为Keystone使用ORM(对象关系映射)来与数据库交互,需要预先创建表结构。
  1. 初始化Fernet密钥:
  • 从OpenStack的Train版本开始,Keystone使用Fernet算法来生成和管理令牌。
  • 使用keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone命令来初始化Fernet密钥库。

4、配置Web服务器

  1. 安装并配置Apache HTTP服务器:
  • Keystone通常与Apache HTTP服务器一起部署,以便通过HTTP/HTTPS协议提供服务。
  • 安装Apache HTTP服务器和mod_wsgi模块。
  • 配置Apache以代理对Keystone的请求。
  1. 创建WSGI配置文件软链接:
  • 将Keystone的WSGI配置文件(如wsgi-keystone.conf)链接到Apache的配置目录中。

5、启动Keystone服务

  1. 设置服务开机自启:
  • 使用系统服务管理工具(如systemctl)来设置Keystone服务开机自启。
  1. 启动服务:
  • 使用systemctl start openstack-keystone等命令来启动Keystone服务。
  1. 验证服务状态:
  • 使用systemctl status openstack-keystone等命令来验证Keystone服务的状态。

6、后续步骤

  1. 创建项目和用户:
  • 使用OpenStack命令行工具(如openstack)来创建项目、用户和角色,并分配相应的权限。
  1. 测试身份验证:
  • 尝试使用创建的用户登录OpenStack Dashboard或其他服务,以验证身份验证是否成功。
  1. 配置其他OpenStack服务:
  • 将其他OpenStack服务(如Nova、Glance、Neutron等)配置为使用Keystone进行身份验证。

六、API

Keystone API是OpenStack项目中的一个重要组成部分,它提供了REST风格的接口,用于用户验证、权限管理和目录服务。以下是关于Keystone API的详细介绍:

1、基本概念

Keystone是OpenStack的身份识别服务,它负责管理用户、租户(在v3 API中称为项目)、角色、凭证、服务和端点等核心概念。通过验证凭证并授予令牌,Keystone允许用户访问OpenStack的其他服务。

2、API版本

Keystone API主要有两个主要版本:第二版(v2.0)和第三版(v3)。随着OpenStack的发展,第三版API逐渐成为推荐使用的版本,因为它是第二版功能的超集,并提供了更为一致的开发者体验。Keystone社区正在逐渐弃用并减少对第二版API的支持。

  • 第二版(v2.0):这是Keystone早期版本的API,随着OpenStack的发展,它逐渐被第三版API所取代。然而,在一些旧系统或特定场景下,它仍然可能被使用。
  • 第三版(v3):这是当前推荐使用的API版本,它是第二版功能的超集,并提供了更为一致的开发者体验。Keystone社区正在逐渐弃用并减少对第二版API的支持。

3、第三版API的特性

  1. 引入“域”(Domain)概念:第三版API引入了“域”作为高级容器,担当用户、项目等实体的命名空间,使得身份管理更加灵活。
  2. 改进了身份认证方法:在第三版API中,身份认证方法(如密码、令牌等)需要明确指明。
  3. 改进了令牌管理:令牌作为响应头的X-Subject-Token字段由Keystone服务返还,而不是存放在响应体中。这改进了第二版API中不记名令牌(Bearer Token)出现在URL中的安全隐患。
  4. 租户更名为项目:在第三版API中,“租户”(tenant)的概念被更名为“项目”(project)。

4、API操作

Keystone API支持多种操作,包括用户管理、项目管理、角色管理、令牌管理等。这些操作可以通过HTTP方法和URL来实现。例如,获取用户列表、创建项目、分配角色到用户等。
Keystone API提供了多种功能,包括但不限于:

  • 用户管理:包括创建、删除、更新用户信息,以及查询用户列表等。
  • 项目管理:在第三版API中称为“项目”,用于管理租户信息,包括创建、删除、更新项目,以及查询项目列表等。
  • 角色管理:用于定义和管理用户的权限角色,包括创建角色、将角色分配给用户或项目等。
  • 令牌管理:用于生成、验证和管理用户的身份令牌,确保用户能够安全地访问OpenStack的其他服务。

5、客户端调用

对于Python开发者,Keystone社区提供了python-keystoneclient库来实现对Keystone API的调用。该库支持所有版本的API调用。对于非Python开发者,可以通过查阅Keystone API的参考手册来修改自己的客户端应用。此外,OpenStack社区还开发了python-openstackclient命令行工具,它提供了基于第三版API的命令行接口,方便用户与Keystone服务进行交互。

6、部署和配置

为了使用Keystone API,首先需要在OpenStack环境中部署Keystone服务,并进行必要的配置。配置包括数据库连接、令牌提供者、Web服务器设置等。在配置完成后,需要启动Keystone服务,并确保它能够正常响应API请求。

7、安全性和最佳实践

在使用Keystone API时,需要注意安全性和最佳实践。例如,应该使用HTTPS协议来保护API通信的安全性;应该定期更换Fernet密钥以防止令牌被破解;应该遵循最小权限原则来分配用户权限等。

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

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

相关文章

ElasticSearch系列:【Win10环境(版本8.11.1) 】elasticsearch+kibana纪实

一、环境 安装环境:win10 JDK:1.8 elasticsearch:8.11.1 kibana:8.11.1 下载地址1(elasticsearchkibana):Past Releases of Elastic Stack Software | Elastic i下载地址2(k分…

RS HMP4040 直流电源

R&S HMP404 直流电源 苏州新利通仪器仪表 产品综述 单台仪器中最多四个通道 R&SHMP4000 直流电源具有三个或四个输出通道,每个通道的输出电流高达 10 A,主要设计用于工业应用,例如: -生产测试 -维护 -工程实验室 这些…

关于git分支冲突问题

什么是冲突 在Git中,冲突是指两个或多个开发者对同一文件统一部份进行了不同的修改,并且在合并这些修改时,Git无法自动确定应该采用哪种修改而产生的情况。 分支冲突 如何出现并解决 在一个版本时,有一个master分支&#xff0c…

JAVA甜蜜升级情侣专属扭蛋机游戏系统小程序源码

甜蜜升级!情侣专属扭蛋机游戏系统,让爱更有趣💖 🎉 开篇:爱的游戏新玩法 在爱情的旅途中,我们总在寻找那些能让彼此心跳加速、笑容满面的瞬间。现在,“甜蜜升级情侣专属扭蛋机游戏系统”为你和…

用友畅捷通-TPlus FileUploadHandler.ashx 任意文件上传

0x01 产品描述: ‌用友畅捷通-TPlus‌是由用友集团成员企业畅捷通公司开发的一款企业级财务管理工具,旨在帮助企业实现财务管理的现代化和智能化。作为畅捷通旗下的核心产品,TPlus集成了财务核算、资金管理、预算控制等多项核心功能&#xff…

spring boot 项目中redis的使用,key=value值 如何用命令行来查询并设置值。

1、有一个老项目,用到了网易云信,然后这里面有一个AppKey,然后调用的时候要在header中加入这些标识,进行与服务器进行交互。 2、开发将其存在了redis中,一开始的时候,我们测试用的老的key,然后提…

结合创新!小波变换+注意力机制,实现100%分类准确率

小波变换是一种先进的信号分析技术,它擅长捕捉信号的局部特征,但有时可能会忽略数据中的关键信息。为了克服这一局限,我们引入了注意力机制,这一机制能够强化模型对数据重要部分的关注。通过将小波变换与注意力机制相结合&#xf…

SD2.0 Specification之CRC(Cyclic Redundancy Code)

文章目录 本文章主要讲解关于SD2.0中的CRC应用,其它基础概念和其它内容请参考以下文章。 SD2.0 Specification简述 CRC全称为Cyclic Redundancy Code,中文名称是循环冗余校验,该方法通过附加冗余数据来保证数据的完整性,即用于检…

一类医疗器械产品分类目录 2002版

医疗医疗器械备案申请时,需要填写老的分类目录表(2022版) 在网上找了很多,都没有Word的,于是自己到官网上整理了一份分享给用到的朋友! 下载地址: 一类医疗器械产品分类目录2002版资源-CSDN…

latex作者介绍添加,以及作者介绍段落间距调整(看这篇就够了)

文章目录 1.latex语句如何添加作者的介绍和照片2.作者介绍段落和段落之间的距离太大如何调整 1.latex语句如何添加作者的介绍和照片 \begin{IEEEbiography}[{\includegraphics[width1in,height1.25in,clip,keepaspectratio]{图像存放地址}}]{作者姓名} 这里写作者介绍 \end{IE…

Qt --- 界面优化 --- QSS和绘图API

界面优化 》美化 一个程序的界面是否好看,是否重要呢。 有些面向专业领域的程序,界面好看与否,不是看关键,更关键的是实际的效果。有些面向普通用户领域的程序,界面好看,还是很大的加分项。 界面优化 Qt…

基于单片机的多路温度检测系统

**单片机设计介绍,基于单片机CAN总线的多路温度检测系统设计 文章目录 前言概要功能设计设计思路 软件设计效果图 程序设计程序 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探…

【Vue3】组件元素定义的ref属性和expose,setup返回值的关系

1、实例代码 首先一个测试结果: 1、在组件模版中元素定义的ref属性,会在编译阶段生成对应的props数据,作为参数传入到创建这个ref所在元素的vnode的方法中。 2、如果ref定义在一般的元素中,那么ref就指向这个元素的dom实例,如果re…

6.824 Lab 2C 学习记录

2C的test中的unreliable figure8算是给博主的迎头一棒,需要根据raft论文的figure8进行解决,leader无法提交不属于currentTerm的日志,当确定committed到当前term时才能apply。 这一步没做到时,报错大概率为applied error&#xff0…

leetcode 450.删除二叉搜索树中的结点

1.题目要求: 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤&#…

SpringBoot--为什么Controller是串行的?怎样才能并行?

原文网址:SpringBoot--为什么Controller是串行的?怎样才能并行?-CSDN博客 简介 本文介绍SpringBoot为什么Controller是串行的?在什么场景下才能并行执行? 大家都知道,SpringBoot的Controller按理是并行执…

STM32DMA学习日记

STM32 DMA学习日记 写于2024/9/28晚 文章目录 STM32 DMA学习日记1. DMA简介2. I/O方式2.1 程序查询方式2.2 程序中断方式2.3 DMA方式 3.DMA框图4. 相关寄存器4.1 DMA中断状态寄存器(DMA_ISR)4.2 DMA中断标志清除寄存器(DMA_IFCR)…

3. 将GitHub上的开源项目导入(clone)到本地pycharm上——深度学习·科研实践·从0到1

目录 1. 在github上搜项目 (以OpenOcc为例) 2. 转移到码云Gitee上 3. 下载整个项目到本地 4. 在pycharm中打开项目 1. 在github上搜项目 (以OpenOcc为例) 把链接复制下来,转移到国内Gitee上,会更稳定 2. 转移到码云Gitee上 &…

IT基础监控范围和对象

监控易作为一款由美信时代独立自主研发的分布式一体化集中监控平台,其监控范围极为广泛,几乎涵盖了所有主流的IT基础设施以及相关的设备和系统。以下是对监控易监控范围的详细介绍: 一、IT基础资源监控 服务器硬件监控:监控易支…

【CAM350】使用总结 <二>{ 光绘Gerber 比较 }

一、 比较两份版本不同的光绘文件: //Analysis-Compare layers// 二、参数默认,比较完成给出结果 三、也可以直接在一份文件上选择“Draw on top” 四、对比差距直观可见