OpenStack之keystone(用户认证)

Keystone(认证)

Keystone 概述

1)管理用户及其权限

2)维护OpenStack Services 的 Endpoint

3)Authentication(认证)和 Authorization(授权)

keystone的名词概念

1.User(用户或服务)

指代任何使用OpenStack的实体,可以是真正的用户,其他系统或者服务。就是说只要是访问openstack service 的对象都可以称为User

2.Credentials(确认身份的凭证)

是User用来证明自己身份的信息,可以是:

  1)用户名/密码

  2)Token(有时限)

  3)API Key(秘钥)

  4)其他高级方式

3.Authentication(认证过程)

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

4.Token (临时身份证明)

是由数字和字母组成的字符串,User成功Authentication 后由Keystone分配给User。

  1)Token 用做访问 Service 的 Credential

  2) Service 会通过 Keystone 验证 Token 的有效性

  3)Token 的有效期默认是24小时

5.project (一个人或服务所拥有的资源集合。不同的Project之间的资源进行隔离)

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

  1)资源的所有权是属于 Project的,而不是 User。

  2)在 OpenStack 的界面和文档中,Tenant/Project/Account这几个术语是通用的,但长期看会倾向使用Project

  3)每个User(包括admin)必须挂在Project里才能访问该Project 的资源。

  4)一个User可以属于多个 Project。

  5)admin相当于root用户,具有最高权限。

6.Service(Keystone提供的服务)

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

7.Endpoint (用来访问openstack service的地址)

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

8.Role  角色(VIP)

 1)Authentication(认证) 解决的是“你是谁”的问题

 2)Authorization(鉴权) 解决的是“你能干什么”的问题

Keystone是借助Role来实现Authorization的,Keystone定义Role,可以为User分配一个或多个Role。Service通过各自的/etc/***/policy.json对Role进行访问控制,决定每个Role能做什么事情

9.OpenStack默认配置只区分admin 和非admin。如果需要对特定的Role进行授权,可以修改policy.json.

10.openstack 适用于全局,可管理和查看各类信息。(有很多命令需要自己研究)

11.keystone-manage 用于启动keystone模块数据、初始化数据库、生成SSL相关的证书和私钥。

Keystone 认证管理

图示:

叙述:首先,User向Keystone提供自己的凭证(凭证里面有自己的用户名和密码),之后Keystone会从数据库里读取数据,对User这个凭证进行验证,若通过,会向User返回Token和Endpoint。该Token限定了用户在限定时间内被访问的Endpoint和资源。此时如果用户利用Nova创建虚拟机服务,Nova会把用户提供的Token发送给Keystone再次验证,Keystone会根据Token判断User是否拥有执行创建虚拟机操作的权限,若验证通过,Nova会向其提供相对应的服务,之后,向Glance和Neutron分别发送用户Token,同时分别请求镜像和网络资源,同上,Glance和Neutron会把用户提供的Token发送给Keystone再次验证,判断User是否拥有对应操作的执行权限,通过后,再提供相应的操作。最后虚拟机创建完成,Nova把相关信息反馈给用户。

总结:用户每进行一步操作,只要用到某种服务,该服务必先通过用户的Token向Keystone验证对应的操作权限,只有通过,才能进行下一步操作。

对红字的解释:

  1. Endpoint:相当于一个网络上可访问的网址,通常是一个URL(URL:统一资源定位符,互联网上标准资源的地址)。每个服务相应位置记录。
  2. Token限定时间:临时凭证,有效期是24个小时。

Token

通俗的讲,token 是用户的一种凭证,需拿正确的用户名/密码向 Keystone 申请才能得到。如果用户每次都采用用户名/密码访问 OpenStack API,容易泄露用户信息,带来安全隐患。所以 OpenStack 要求用户访问其 API 前,必须先获取 token,然后用 token 作为用户凭据访问 OpenStack API。

注释:API:用来接收和发送请求的接口(个人理解)

详情登陆:什么是API,说人话!-CSDN博客

Keystone四种认证方式:UUID、PKI、PKIZ、Fernet

  1. UUID

源码分析:长度固定为32byte的随机字符串。

缺陷:每次请求都要经过Keystone进行验证,大大增幅Keystone工作量,影响性能。

  1. PKI

原理:在keystone初始化时,keystone生成了CA的公钥CA.pem和私钥CA.key,同时keystone产生了自己的公钥keystone.pub和私钥keystone.key,然后将keystone.pub进行CA的签名,生成keystone.pem。

当用户拿着用户名/密码去keystone认证后,keystone将用户的基本信息通过keystone.key进行加密,并将密文作为token返还给用户。当用户拿着token发送请求时(例如访问Nova),Nova拿到用户token时,通过事先拿到keystone的证书keystone.pem(这一过程只需要进行一次)进行解密,获取用户信息。

对于用户的token,还需进行token的合法时间,以及token还是否存在进行判断。所以当Nova每一次拿到token后还需向keystone询问一次token的失败列表,检查token是否失效。这一过程对于keystone的负载还是相当轻的,所以PKI还是有效解决了keystone性能瓶颈的问题。

总之,OpenStack服务中的每一个API Endpoint都有一份keystone签发的证书,失效列表和根证书。API不用在直接去keystone认证token是否合法,只需要根据keystone的证书和失效列表就可以确定token是否合法。但是这里还是会每次都需要请求keystone去获取失效列表。

缺陷:长度负载重,一般不推荐在生产中部署,还需要一个受信任的CA颁发的证书。

  1. PKIZ

原理:和PKI基本一致,只是在使用base64url encoding进行编码的基础上,又使用压缩机制,长度上减小了一半,并且Token使用PKIZ_开头。

缺陷:同PKI

  1. Fernet

起源:当集群运行较长一段时间后,访问其 API 会变得奇慢无比,究其原因在于 Keystone 数据库存储了大量的 token 导致性能太差,解决的办法是经常清理 token。

特点:采用对称加密库(加密密钥和解密密钥相同) 加密 token,不需要存储于数据库,带来了一定的性能提升。采用 Key Rotation 更换密钥,从而提高安全性。

fernet不需要后端持久化操作(采用 Key Rotation定期更换密钥,只要Keystone具有访问这些key的权限,更新后的token就不需要在keystone数据库中存储,缓解了数据库负载压力),并且token的认证,使用的是密钥进行解密,能够直接得出token Data的信息,从而进行token的过期认证。

缺陷:使用对称加密,安全性低。

Domain

Domain=project+user(+group)

Group=user×n    (n表示数量)

Project:IT基础设施资源的集合,如虚拟机,卷,镜像等

同一个domain中,元素的名称唯一,不同domain间,名称可以重复。

参数相关简介:

Group的主要目的是为了方便分配role,如果给group分配了一个role,那么group里的所有user都拥有了这个role。

Role名称必须唯一,相当于角色。policy.json文件根据role的名称所指定的允许进行的操作。

Token是针对不同scope认证状态,这里的scope是指project和domain,因此一共有三种scoped token:

1. project­scoped token:针对一个project的token,它包含service catalog,a set of roles,和那个project的详细信息

2. domain­scoped token:针对一个domain的token,它具有有限的使用场景,只用于domain层面的操作。与project­scoped相比,它只具有优先的sevice catalog

3. unscoped token:当既不指定project也不指定domai为scope,同时user也没有default project时获得的token,这是一种特殊的token。

安装和配置keystone

一、在base节点上配置

1.登录base节点并创建数据库

2.授予数据库用户keystone访问keystone数据库的权限

3.查看创建好的数据库keystone

二、在ctrl节点上配置

1.安装软件包

# yum install openstack-keystone httpd mod_wsgi –y 

#yum install python-openstackclient

2.编辑/etc/keystone/keystone.conf 文件并完成下列操作:

A.备份keyston.conf

B.去掉keystone配置文件中的注释行

C.在[database]小节,配置数据库访问;在[token]小节,配置使用 Fernet 技术提供令牌

3.初始化身份服务数据库

# su -s /bin/sh -c “keystone-manage db_sync” keystone 

4.初始化 Fernet key 仓库

# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone 

# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone 

5.引导身份服务,创建管理员。

# keystone-manage bootstrap --bootstrap-password ADMIN_PASS \ 
--bootstrap-admin-url http://ctrl.xdj.com:35357/v3/ \ 
--bootstrap-internal-url http://ctrl.xdj.com:5000/v3/ \ 
--bootstrap-public-url http://ctrl.xdj.com:5000/v3/ \ 
--bootstrap-region-id RegionOne 

三、配置 Apache HTTP 服务

1.编辑/etc/httpd/conf/httpd.conf 文件并配置 ServerName 配置项

2.创建到文件/usr/share/keystone/wsgi-keystone.conf 的链接:

Ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ 

四、配置环境变量

1.配置管理账号

# export OS_USERNAME=admin

# export OS_PASSWORD=ADMIN_PASS

# export OS_PROJECT_NAME=admin

# export OS_USER_DOMAIN_NAME=Default

# export OS_PROJECT_DOMAIN_NAME=Default

# export OS_AUTH_URL=http://ctrl.xdj.com:35357/v3

# export OS_IDENTITY_API_VERSION=3 

2.配置 ADMIN_PASS 为 keystone-manage bootstrap 命令中使用的密码 
创建域,项目,用户和角色 。

身份服务:身份服务为每一个 OpenStack 服务提供认证服务。认证服务使用一个 domain(域),projects(项目(tenants(租户))),users(用户)和roles(角色)的组合。

在 openstack 环境中创建一个包含其他服务唯一账号的 service 项目,创建 service 项目:

# openstack project create –domain default –description “Service Project” service 

3.配置 ADMIN_PASS 为 keystone-manage bootstrap 命令中使用的密码 
创建域,项目,用户和角色 
身份服务为每一个 OpenStack 服务提供认证服务。认证服务使用一个 domain(域),projects(项目(tenants(租户))),users(用户)和roles(角色)的组合。 
在 openstack 环境中创建一个包含其他服务唯一账号的 service 项目,创建 service 项目:

 
4. 创建 demo 项目:

5.创建 demo 用户:

6.创建 user 角色

7.添加 user 角色到 demo 项目和用户

五、验证操作 
在安装其他服务前,验证身份服务是否正常。 
1. 由于安全的原因,关闭临时认证令牌机制编辑/etc/keystone/keystone-paste.ini 文件并移除[pipeline:public_api], [pipeline:admin_api], 和[pipeline:api_v3]小节的 admin_token_auth 项。 

 2.删除临时环境变量

3.使用 admin 用户,请求认证令牌,密码ADMIN_PASS

4.使用 demo 用户,请求认证令牌:,密码DEMO_PASS

六、创建 OpenStack 客户端环境脚本 
 
1. 编辑 admin-openrc 文件,并添加下列内容,替换 ADMIN_PASS 为身份服务中 admin 用户的密码。 

2.编辑 demo-openrc 文件,并添加下列内容:替换 DEMO_PASS 为身份服务中 demo 用户的密码。

3.请求认证令牌

  • 31
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值