keystone认证服务

发布于:2024-06-17 ⋅ 阅读:(20) ⋅ 点赞:(0)

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: 
##有信息返回,则表示成功