当前位置: 首页 > news >正文

OpenStack-鉴权服务介绍

引言

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.mrgr.cn/news/38897.html

相关文章:

  • AI人员睡岗识别摄像机
  • 谷歌外链需要持续发吗?
  • 根据minio地址,下载文件流
  • Java应用文件上传超出默认大小
  • 【docker】如何保存镜像以及分享社区
  • 从AI+到+AI:传统行业的智能蜕变
  • 海滨体育馆管理:SpringBoot系统设计与实现
  • 稀土阻燃协效剂-磷氮系的应用
  • 双十一买什么东西最划算?2024年双十一好物清单分享
  • 【图解秒杀系列】秒杀技术点——隔离、熔断、限流、降级
  • o1规划能力首测!已超越语言模型范畴,preview终于赢mini一回
  • Vue发送邮件攻略:从搭建到实现详细步骤?
  • 芝法酱学习笔记(0.5)——使用jenkins做自动打包
  • 基于NXP IMX6的PC104板卡
  • 【Redis配置】
  • Python知识点:如何使用Hive与PyHive进行数据仓库操作
  • 二阶低通滤波器Simulink仿真测试(从传递函数到ST代码)
  • py-mmcif包pdbx_struct_assembly对象介绍
  • FLUX.1 AI图像生成行业的新挑战者
  • 写入数据时的Permission Denied错误