OpenStack 鉴权服务介绍.md

引言

OpenStack是一个开源的云计算管理平台,其中的Keystone组件承担了身份认证和授权的关键任务。Keystone的主要功能包括管理用户及其权限、维护OpenStack Services的Endpoint,以及实现认证(Authentication)和鉴权(Authorization)。本文将详细介绍Keystone的概念、架构和工作原理,帮助读者全面了解这一重要组件。

概念

在深入了解Keystone之前,我们需要掌握以下几个关键概念:User、Role、Credentials、Authentication、Endpoint、Service、Project、Token。

User

User指代任何使用OpenStack的实体,可以是真正的用户、其他系统或服务。image.png

User请求访问OpenStack时,Keystone会对其进行验证。Horizon在Identity → Users管理User。image.png

除了admin和demo,OpenStack也为nova、cinder、glance、neutron服务创建了相应的User。admin也可以管理这些User。

Credentials

Credentials是User用来证明自己身份的信息,可以是:我们常用的是用户名密码,服务间调用更多使用API

image.png

  1. 用户名/密码
  2. Token
  3. API Key
  4. 其他高级方式

Authentication

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

Token

Token是由数字和字母组成的字符串,User成功Authentication后,它由Keystone分配给User。Token有以下几个特点:

[root@controller ~]# openstack token issue
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                                                                                                                     |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires    | 2024-05-26T19:37:46+0000                                                                                                                                                                |
| id         | gAAAAABmU4F6q8oI_cs0MAjRbW0gfBx7EO8de0yJgLmFhDkJopZ3PfYQt1GqvwHR3JYJ6E8aMRG_RSPOtsV62n9jYhMgSrBEjumV0RxsP13bWNgTUL_EGl9i80SeWDuFxOIyJH20D6iLSnyAkK6oPwarL9TMUq8AT1RK5ALH1uifRhR1CPio3oc |
| project_id | d59c27d7429043b2946f0a6dad3e8b23                                                                                                                                              |
| user_id    | 786f7f88b8f54e3d8b1803302874e088                                                                                                                                                 |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  1. 用作访问Service的Credential。
  2. Service会通过Keystone验证Token的有效性。
  3. Token的有效期默认是24小时。

Project

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

  1. 资源的所有权是属于Project的,而不是User。
  2. 在OpenStack的界面和文档中,Tenant/Project/Account这几个术语是通用的,但长期看会倾向使用Project。
  3. 每个User(包括admin)必须挂在Project里才能访问该Project的资源。一个User可以属于多个Project。
  4. admin相当于root用户,具有最高权限。

Horizon在Identity → Projects中管理Project。

Service

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

[root@controller ~]# openstack  service list
+----------------------------------+-----------+-----------+
| ID                               | Name      | Type      |
+----------------------------------+-----------+-----------+
| 592b6fb33ba145b08d82ebf1a78722e3 | cinderv3  | volumev3  |
| 6bba92daaec84045bda8a6e9bfd1482e | neutron   | network    |
| a5d11ea72ef64e0d930dbcec6f613451 | placement | placement |
| badd1fad979245248bc283c6323eeeab | nova      | compute     |
| dbae1267347b41ada92ca5124be265f0 | glance    | image        |
| e4a3642cd7e744628cb7f02e1db943ea | keystone  | identity     |
| e92dafa002b4415d9748b136a7f1dd5d | cinderv2  | volumev2  |
+----------------------------------+-----------+-----------+

Endpoint

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

[root@controller ~]# openstack endpoint list
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------------------------+
| ID                               | Region    | Service Name | Service Type | Enabled | Interface | URL                                   |
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------------------------+
| 10a3e2c5e08646c8b9f2053954876a5d | RegionOne | cinderv3     | volumev3     | True    | public    | http://controller:8776/v3/%(project_id)s |
| 14eca16dcf1b489db8868f1cf6f28742 | RegionOne | glance       | image        | True    | internal  | http://controller:9292                           |
| 21a4e9e8e8e04ea0b385e80784ed85b8 | RegionOne | cinderv2     | volumev2     | True    | public    | http://controller:8776/v2/%(project_id)s |
| 3db45f1cb48b49d5abf11fd595c5a6dc | RegionOne | placement    | placement    | True    | admin     | http://controller:8778                   |
| 4a691d2ce3e84bce974239ea143d43c7 | RegionOne | cinderv3     | volumev3     | True    | admin     | http://controller:8776/v3/%(project_id)s |
| 4f9d7cccbda8497f82f8530a005f8c9c | RegionOne | neutron      | network      | True    | internal  | http://controller:9696                         |
| 5a234f89aa4749cf838f1154bec0ea41 | RegionOne | cinderv2     | volumev2     | True    | admin     | http://controller:8776/v2/%(project_id)s |
| 61658e610e0b4b4992069a71b519843e | RegionOne | nova         | compute      | True    | public    | http://controller:8774/v2.1            |
| 78e6b70e82b94e2c8c72aadc10e724b8 | RegionOne | placement    | placement    | True    | internal  | http://controller:8778               |
| 7e8082a9938c45ea9de9942bed04a568 | RegionOne | keystone     | identity     | True    | public    | http://controller:5000/v3/               |
| 8c7727d7148d45638fd051693ea79451 | RegionOne | glance       | image        | True    | public    | http://controller:9292                      |
| 95bdf028d3214870a57f585cbc68ed4d | RegionOne | cinderv3     | volumev3     | True    | internal  | http://controller:8776/v3/%(project_id)s |
| a0e44e1b9cfe4bf4a759b02fa15abaf3 | RegionOne | nova         | compute      | True    | admin     | http://controller:8774/v2.1               |
| ab72f38a87f94795a14795e41fbff203 | RegionOne | nova         | compute      | True    | internal  | http://controller:8774/v2.1                 |
| b4dce728b130414d8049c8aef40db89d | RegionOne | keystone     | identity     | True    | internal  | http://controller:5000/v3/                 |
| c11199e4d46146138ed8487299fd9875 | RegionOne | placement    | placement    | True    | public    | http://controller:8778                   |
| d13674a3786941738e92fdfe1895bed0 | RegionOne | glance       | image        | True    | admin     | http://controller:9292                       |
| d2962bdeb1b14aaba5019bf658939636 | RegionOne | keystone     | identity     | True    | admin     | http://controller:5000/v3/                |
| d4fc12ffc0314077ba23e55115d310bb | RegionOne | neutron      | network      | True    | admin     | http://controller:9696                        |
| d8bc5226848848d48ee4ac5d1f48a148 | RegionOne | cinderv2     | volumev2     | True    | internal  | http://controller:8776/v2/%(project_id)s |
| f9181eebb7b149e6af095e9b2849495c | RegionOne | neutron      | network      | True    | public    | http://controller:9696                        |
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------------------------+
[root@controller ~]#

Authorization

安全包含两部分:Authentication(认证)和Authorization(鉴权)。

  • Authentication解决的是“你是谁?”的问题。
  • Authorization解决的是“你能干什么?”的问题。

Keystone是借助Role来实现Authorization的,Keystone定义Role,可以为User分配一个或多个Role。Horizon的菜单为Identity → Project → Manage Members。

image.png

Service决定每个Role能做什么事情。Service通过各自的policy.json文件对Role进行访问控制。例如,Nova服务的policy.json中,对于create、attach network和attach volume操作,任何Role的User都可以执行,但只有admin这个Role的User才能执行forced host操作。OpenStack默认配置只区分admin和非admin Role。如果需要对特定的Role进行授权,可以修改policy.json。

Keystone常见概念

Keystone的架构设计灵活,支持多种后端存储和认证机制。其整体架构可以分为以下几个主要部分:

  1. 身份管理(Identity):管理用户、组和凭据。支持多种身份后端,如SQL数据库、LDAP等。
  2. 服务目录(Catalog):管理和提供OpenStack各服务的API端点信息。
  3. 认证(Authentication):负责验证用户和服务的身份。支持多种认证机制,如用户名/密码、令牌、证书等。
  4. 授权(Authorization):基于角色和策略对用户和服务进行授权。
  5. 策略管理(Policy):管理用于授权的策略规则。
  6. 多租户管理(Multitenancy):支持项目(Project)和域(Domain)的隔离和管理。
  7. 令牌管理(Token):生成、验证和撤销令牌,用于身份认证。

Keystone概念详解

身份管理(Identity)

身份管理是Keystone的核心功能之一,负责管理用户、组和凭据信息。身份管理支持多种后端存储,包括SQL数据库和LDAP目录服务。通过身份管理,管理员可以创建、更新、删除用户和组,并管理用户的凭据,如密码和API密钥。

在通常情况下,用户和用户组数据由Keystone的Identity服务进行管理,这使得它能够处理与这些数据相关的所有创建、读取、更新和删除(CRUD)操作。

然而,在更复杂的情况下,用户和用户组数据可能由权威的后端服务进行管理。例如,Identity服务可以充当LDAP(轻量级目录访问协议)的前端,而LDAP服务器则是权威的信息来源。在这种情况下,Identity服务会准确地中继LDAP服务器上的信息

服务目录(Catalog)

服务目录是一个包含所有OpenStack服务API端点的数据库。每个服务在注册时,会将其API端点信息存储在服务目录中。用户或其他服务在访问OpenStack API时,可以通过查询服务目录获取对应服务的端点信息,从而进行服务调用。

[root@controller ~]# openstack  catalog list
+-----------+-----------+------------------------------------------------------------------------+
| Name      | Type      | Endpoints                                                                    |
+-----------+-----------+------------------------------------------------------------------------+
| cinderv3  | volumev3  | RegionOne                                                              |
|           |           |   public: http://controller:8776/v3/d59c27d7429043b2946f0a6dad3e8b23    |
|           |           | RegionOne                                                                                                     |
|           |           |   admin: http://controller:8776/v3/d59c27d7429043b2946f0a6dad3e8b23    |
|           |           | RegionOne                                                                                                     |
|           |           |   internal: http://controller:8776/v3/d59c27d7429043b2946f0a6dad3e8b23  |
|           |           |                                                                                            |
| neutron   | network   | RegionOne                                                              |
|           |           |   internal: http://controller:9696                                          |
|           |           | RegionOne                                                                        |
|           |           |   admin: http://controller:9696                                            |
|           |           | RegionOne                                                                         |
|           |           |   public: http://controller:9696                                             |
|           |           |                                                                                            |
| placement | placement | RegionOne                                                          |
|           |           |   admin: http://controller:8778                                             |
|           |           | RegionOne                                                                         |
|           |           |   internal: http://controller:8778                                           |
|           |           | RegionOne                                                                         |
|           |           |   public: http://controller:8778                                             |
|           |           |                                                                                             |
| nova      | compute   | RegionOne                                                               |
|           |           |   public: http://controller:8774/v2.1                                      |
|           |           | RegionOne                                                                          |
|           |           |   admin: http://controller:8774/v2.1                                      |
|           |           | RegionOne                                                                          |
|           |           |   internal: http://controller:8774/v2.1                                    |
|           |           |                                                                                              |
| glance    | image     | RegionOne                                                                 |
|           |           |   internal: http://controller:9292                                            |
|           |           | RegionOne                                                                          |
|           |           |   public: http://controller:9292                                              |
|           |           | RegionOne                                                                          |
|           |           |   admin: http://controller:9292                                              |
|           |           |                                                                                              |
| keystone  | identity  | RegionOne                                                                 |
|           |           |   public: http://controller:5000/v3/                                         |
|           |           | RegionOne                                                                           |
|           |           |   internal: http://controller:5000/v3/                                       |
|           |           | RegionOne                                                                           |
|           |           |   admin: http://controller:5000/v3/                                         |
|           |           |                                                                                              |
| cinderv2  | volumev2  | RegionOne                                                              |
|           |           |   public: http://controller:8776/v2/d59c27d7429043b2946f0a6dad3e8b23   |
|           |           | RegionOne                                                              |
|           |           |   admin: http://controller:8776/v2/d59c27d7429043b2946f0a6dad3e8b23    |
|           |           | RegionOne                                                              |
|           |           |   internal: http://controller:8776/v2/d59c27d7429043b2946f0a6dad3e8b23 |
|           |           |                                                                        |
+-----------+-----------+------------------------------------------------------------------------+

其次Keystone本身是在一个或多个端点(Endpoint)上公开的一组内部服务(Service)。这些内部服务涵盖了Identity、Resource、Assignment、Token、Catalog等多个方面,并且许多内部服务往往以组合的方式被使用。例如,在进行身份验证时,会使用到认证服务(Identity)来验证用户或项目的凭据,并在验证成功后创建并返回一个带有令牌服务(Token)的令牌。

除了提供内部服务外,Keystone还负责与OpenStack的其他服务(如计算、存储或镜像服务)进行交互。它提供一个或多个端点,用户可以通过这些端点访问资源并执行相关操作。

认证(Authentication)

认证模块负责验证用户和服务的身份。Keystone支持多种认证机制,包括:

  • 用户名/密码认证:最常见的认证方式,用户通过提供用户名和密码进行身份验证。
  • 令牌认证:用户在成功认证后,Keystone会生成一个令牌,用户可以使用该令牌进行后续的API调用,无需每次都提供用户名和密码。
  • 证书认证:基于SSL/TLS证书进行身份验证。
  • 多因素认证(MFA):结合多种认证机制,提供更高的安全性。

授权(Authorization)

授权模块基于角色和策略对用户和服务进行授权。Keystone使用角色(Role)和策略(Policy)来控制对资源的访问权限。每个用户可以被授予一个或多个角色,而角色对应的策略定义了该角色的权限范围。

策略管理(Policy)

策略管理模块负责管理用于授权的策略规则。策略规则通常采用JSON格式定义,并基于角色和资源类型来描述权限控制逻辑。管理员可以通过配置文件或API接口管理策略规则。image.png

多租户管理(Multitenancy)

Keystone支持多租户环境,允许多个项目和域共存。项目(Project)和域(Domain)用于隔离和管理不同的租户和资源。每个项目和域都有独立的用户、组和资源,确保不同租户之间的隔离性和安全性。

令牌管理(Token)

令牌管理模块负责生成、验证和撤销令牌。令牌是用户在成功认证后由Keystone生成的,用于后续的API调用。令牌通常有一定的有效期,过期后需要重新认证以获取新的令牌。

Keystone的组件架构图

架构图如下:

image.png

Keystone Middleware是Keystone提供的对令牌合法性进行验证的中间件。

比如,在客户端访问Keystone提供的资源时提供了PKI类型的令牌,为了不必每次都通过Keystone服务的直接介入来验证令牌的合法性,通常可以在中间件上进行验证,前提是中间件上已经缓存了相关的证书与密钥以对令牌进行签名认证。

如果不是PKI类型的令牌,则需要通过keystoneauth获得一个与Keystone服务连接的session,并通过调用Keystone服务提供的API来验证令牌的合法性。

对于Keystone项目本身,除了后台的数据库,主要包括一个处理RESTful请求的API服务进程。这些API涵盖了Identity、Token、Catalog和Policy等Keystone提供的各种服务,这些不同服务所能提供的功能则分别由相应的后端Driver(Backend Driver)实现。

Keystone的工作原理

了解Keystone的工作原理对于掌握其功能和使用方法至关重要。下面介绍Keystone的几个关键工作流程。

用户认证流程

  1. 用户请求令牌:用户向Keystone提交认证请求,通常包括用户名和密码。
  2. Keystone验证凭据:Keystone验证用户提交的凭据是否有效。
  3. 生成令牌:验证通过后,Keystone生成一个令牌并返回给用户。
  4. 用户使用令牌访问服务:用户在后续的API调用中使用该令牌进行身份验证。

服务注册和发现流程

  1. 服务注册:每个OpenStack服务在启动时,会向Keystone注册其API端点信息。
  2. 用户查询服务目录:用户通过Keystone的服务目录API查询所有可用服务的端点信息。
  3. 调用服务API:用户根据服务目录提供的端点信息调用对应的服务API。

授权流程

  1. 用户请求访问资源:用户向某个OpenStack服务提交API请求。
  2. 服务验证令牌:该服务向Keystone验证用户提供的令牌是否有效。
  3. Keystone返回验证结果:Keystone验证令牌并返回验证结果。
  4. 服务根据策略进行授权:服务根据其策略规则决定是否允许用户执行该操作。

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

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

相关文章

Linux_3:进程间通信

IPC1.什么是IPC?Inter Process Communication2.进程间通信常用的几种方式1,管道通信:有名管道,无名管道2,信号- 系统开销小3,消息队列-内核的链表4,信号量-计数器5,共享内存6&#x…

【Springboot】Bean解释

在 Spring Boot 中,Bean 就像是你餐厅里的一名员工。比如,你有一名服务员(Service)、一名厨师(Chef)和一名收银员(Cashier)。这些员工都是餐厅正常运转所必需的,他们各自…

axios的post请求,数据为什么要用qs处理?什么时候不用?

为什么使用 qs 处理 POST 数据axios 的 POST 请求默认将 JavaScript 对象序列化为 JSON 格式(Content-Type: application/json)。但某些后端接口(尤其是传统表单提交)要求数据以 application/x-www-form-urlencoded 格式传输&…

【unitrix】 4.21 类型级二进制数基本结构体(types.rs)

一、源码 这段代码定义了一个类型级数值系统的 Rust 实现,主要用于在编译时表示和操作各种数值类型。 use crate::sealed::Sealed; use crate::number::{NonZero, TypedInt, Unsigned, Primitive}; // // 特殊浮点值枚举 ///// 特殊浮点值(NaN/∞&#x…

UI前端与数字孪生结合实践案例:智慧零售的库存管理优化系统

hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!一、引言:数字孪生重构零售库存的 “人 - 货 - 场” 协同在零售行业利润率持续承压的背景…

【Freertos实战】零基础制作基于stm32的物联网温湿度检测(教程非常简易)持续更新中.........

本次记录采用Freertos的第二个DIY作品,基于Onenet的物联网温湿度检测系统,此次代码依然是全部开源。通过网盘分享的文件:物联网温湿度检测.rar 链接: https://pan.baidu.com/s/1uj9UURVtGE6ZB6OsL2W8lw?pwdqm2e 提取码: qm2e 大家也可以看看…

Matplotlib-多图布局与网格显示

Matplotlib-多图布局与网格显示一、多图布局的核心组件二、基础布局:plt.subplots()快速创建网格1. 均等分网格2. 不等分网格(指定比例)三、进阶布局:GridSpec实现复杂嵌套1. 跨行列布局2. 嵌套GridSpec四、实用技巧:布…

GitHub上优秀的开源播放器项目介绍及优劣对比

ExoPlayer 项目地址:https://github.com/google/ExoPlayer 特点: 由Google开发,支持广泛的视频格式和流媒体传输协议,如DASH、HLS、SmoothStreaming。 提供灵活的媒体源架构和高级特性,如动态自适应流播放。 开发者可以轻松扩展和定制播放器组件,适应特定需求。 优点: 功…

react打包发到线上报错Minified React error #130

开发过程中遇到一个问题,记录一下 本地打包发布正常,发测试环境正常,可是通过Jenkins打包发布线上报错 报错信息 index-67fbbd81.js:39 Error: Minified React error #130; visit https://reactjs.org/docs/error-decoder.html?invariant130…

微服务项目远程调用时的负载均衡是如何实现的?

负载均衡概述 负载均衡是微服务架构中的核心组件,用于将请求合理分配到多个服务实例上,提高系统的可用性和性能。负载均衡的分类 负载均衡大致可以分为两类 1. 服务端负载均衡 实现位置:独立部署的负载均衡服务器(位于客户端和服务…

【中文核心期刊推荐】中国农业科技导报

《中国农业科技导报》是中国科技核心期刊,也是北京大学图书馆“中文核心期刊要目总览”收录的期刊。它是由中国农村技术开发中心主办,全面为科教兴农服务的综合性农业学术期刊。《中国农业科技导报》是中国农业科学院生物技术研究所承办的&a…

php 如何通过mysqli操作数据库?

在PHP中,mysqli(MySQL Improved Extension)是操作MySQL数据库的扩展库,提供了面向对象和过程式两种风格。以下是mysqli的基本操作方法: 1. 连接数据库 面向对象风格 $mysqli new mysqli(localhost, username, passwor…

c/c++拷贝函数

memcpy()函数概要原型void * memcpy ( void * dest, const void * src, size_t num );功能memcpy()会复制 src 所指的内存内容的前 num 个字节到 dest所指的内存地址上(memcpy()并不关心被复制的数据类型,只是逐字节地进行复制,这给函数的使用…

HTTP核心基础详解(附实战要点)

目录 一图胜千言:HTTP核心机制图解​编辑 一、HTTP本质:通信的桥梁 二、五大核心特性解析 三、HTTP头部:隐藏的控制中心 四、连接管理:性能关键点 开发者必知实践技巧 一图胜千言:HTTP核心机制图解 一、HTTP本质…

华为静态路由配置

问题描述:针对两台笔记本和两个路由器在不同的网段场景中,对两个路由器进行静态路由配置。下面以如下场景为例,介绍详细配置过程。配置步骤: 1、对每个路由器的接口下配置IP地址 [huawei]interface gx/x/x [huawei-interface]ip a…

闲庭信步使用图像验证平台加速FPGA的开发:第八课——图像数据的行缓存

(本系列只需要modelsim即可完成数字图像的处理,每个工程都搭建了全自动化的仿真环境,只需要双击文件就可以完成整个的仿真,大大降低了初学者的门槛!!!!如需要该系列的工程文件请关注…

经典排序算法

文章目录前言1. 排序的基本概念1.1 排序是什么?1.2 常见的排序算法概览2. 常见排序算法的实现2.1 插入排序 (Insertion Sort)2.1.1 基本思想2.1.2 直接插入排序2.1.3 希尔排序 (Shell Sort)2.2 选择排序 (Selection Sort)2.2.1 直接选择排序2.2.2 堆排序 (Heap Sort…

RabbitMQ 消息队列:从入门到Spring Boot实战

RabbitMQ 作为一款开源的、基于 AMQP(Advanced Message Queuing Protocol)协议实现的消息代理,凭借其强大的功能、灵活的路由机制以及出色的性能,在业界得到了广泛的应用。无论是处理高并发订单、异步通知、日志收集还是系统解耦&…

代账行业数字化破局:从“知道”到“做到”,三步走稳赢!

认知!降本!增收!数字化!——这不仅是口号,更是代账行业在激烈竞争和时代变化中生存发展的关键。很多代账同行其实都明白趋势,也知道大概该怎么做。但问题卡在第一步:不知道怎么开始,…

Mac 电脑crontab执行定时任务【Python 实战】

1、crontab -e 编辑定时任务列表 crontab -e查看当前定时任务列表,长按 i 编辑,编辑完之后按 esc 退出编辑,然后输入:wq 保存并提出。 如下: (base) charles@zl ~ % crontab -e58 15 * * * /Library/Frameworks/Python.framework/Versions/3.8/bin/python3 /Users/charle…