type
status
date
slug
summary
tags
category
icon
password
openstack-keystone
泰克中会有前台角色
1、当有外来人员访问,确认身份
2、如果是我们学员,确认什么方向的课程
3、指引到相应的教室
openstack会有keystone
1、当有外来访问者,确认身份
2、确认权限
3、告诉对应服务的入口-url
如果是packstack的话,在/root/目录下引入环境变量
source keystonerc_admin
cat keystonerc_admin
unset OS_SERVICE_TOKEN
exportOS_USERNAME=admin
exportOS_PASSWORD='123456'
exportOS_REGION_NAME=RegionOne
exportOS_AUTH_URL=http://192.168.126.20:5000/v3 exportPS1='[\u@\h \W(keystone_admin)]\$ '
exportOS_PROJECT_NAME=admin
exportOS_USER_DOMAIN_NAME=Default
exportOS_PROJECT_DOMAIN_NAME=Default
exportOS_IDENTITY_API_VERSION=3
如果是华为的FusionCloud的话,需要在root用户下,引入环境变量
[fsp@CPS01 ~]$ su- root
# fsp Huawei@CLOUD8
# root Huawei@CLOUD8!
Last login: Sat Feb 2711:20:00 CST 2021 on pts/1
CPS01:~ # TMOUT=0
CPS01:~ # source set_env
please choose environment variable which you want to import: (1) openstack environment variable (keystone v3)
(2) cps environment variable
(3) openstack environment variable legacy (keystone v2)
(4) openstack environment variable of cloud_admin (keystone v3) please choose:[1|2|3|4]1
OS_USERNAME: dc0_admin
Enter OS_PASSWORD=
# dc0_admin FusionSphere123
...
cps host-list #华为定义的命令客户端
...
nova list #旧版openstack命令客户端,在旧版中,每个openstack项目都有自己的命令行客户端。在新版中,则直接使用openstack替代所有的项目的命令行客户端。例如:openstack server list
keystone架构
1、keystone api:接收来自cli\web的外部请求
2、keystone mkddleware:中间件,主要用于缓存token
3、keystone service:核心,不同功能会有不同service实现
4、keystone backend:service的后端实现
5、keystone plugin:插件
service服务
内部服务+外部服务
内部服务:Identity、Resource、Assignment、Token、Catalog等
外部服务:openstack的项目,比如nova、cinder、neutron、swift等
identity身份
user+group
User是单个OpenStack服务使用者,用户本身必须属于某个特定域。所有用户名不是OpenStack全局唯一的,仅在其所属域唯一。
Groups把多个用户作为一个整体进行管理。组本身必须属于某个特定域。所有组名不是OpenStack全局唯一的,仅在其所属域唯一。
resource资源
project+domain
project包含:计算、存储、网络等资源
domain包含:project、user、group三个资源
实际应用:
一个公有云,通常就是一个openstack
一个租户,通常对应是一个domain
租户可能是一个公司,所以内部会有不同部门、子公司,对应是Project
user、group可以属于多个Project
assignment授权三元组
role+role assignment
Role规定最终用户可以获得的授权级别。角色可以在域或项目级别授予。可以在单个用户或组级别分配角色。角色名称在拥有该角色的域中是唯一的。
Role Assignment是一个3元组,有一个Role,一个Resource和一个Identity。
例如:一个user\group在project\domain范围,拥有什么role
token令牌
Token服务提供用户访问服务的凭证,代表着用户的账户信息。
Token一般包含User信息、Scope信息(Project、Domain或者Trust)、Role信息。
catalog服务目录
在openstack当中,会有很多项目(nova\cinder等)。这些项目对于keystone来说都是外部服务。
每个服务对应会有三个endpoint,分别是
endpoint | 作用 |
public | 最终用户或其他服务用户使用,通常在公共网络接口上使用。 |
admin | 供最终用户使用,通常在未计量的内部网络接口上。 |
internal | 供管理服务的用户使用,通常是在安全的网络接口上。 |
policy访问控制
每个OpenStack服务都在相关的策略文件中定义其资源的访问策略(Policy)
。/etc/SERVICE/policy.json
访问策略类似于Linux中的权限管理,不同角色的用户或用户组将会拥有不同的操作权限。
一个用户在不同服务下,拥有不同角色。而不同角色则意味着,这个用户在当前服务下,能够执行的操作。
用户A在nova中是管理员角色,policy.json定义了管理员可以删除虚拟机,用户不可以删除。用户B只是用户角色。
用户A在cinder也是管理员角色,但如果动作是删除虚拟机,可不可以?
region
类似于公有云上的华南、华北、华中等区域,可以将一个openstack划分为不同区域从资源范围大小:openstack>region>domain>group>user
keystone的认证方式
1、本地:用户名+密码
2、外部:对接第三方认证系统,比如AD
3、令牌token:uuid\pki\pkiz\fernet
为什么使用token?
原因是因为密码的不安全。缓存功能。
token有有效期。
UUID
原理:
1、user首先向keystone发送自己的用户名密码,申请token
2、keystone验证user的身份正确后,向user发放uuid token,自己缓存一份3、user收到token后,向服务发送请求,携带token
4、服务收到请求后,剥离token,向keystone验证token。
5、keystone本身缓存一份token,两者比较通过后,向服务告知user的project\role 6、服务再根据user请求的动作,结合它的角色,判断该动作能否执行
优点:相比密码的方式,token有有效期,相对比较安全
缺点:每次验证token都需要找keystone,对于keystone压力较大
PKI
非对称算法
公钥(可以公开)、私钥(不可以公开)。
公钥加密,需要使用私钥解密。数据加密传输
私钥加密,需要使用公钥解密。证书
我、工商银行、证书颁发机构
工商制作证书,证书内容(A是工商银行)+签名(对证书内容hash+私钥加密)
证书给到工商银行
我在访问工商银行时,得到此张证书。验证过程:1、使用公钥对签名解密,得到原来的hash值;2、对证书内容hash。两个hash值比较,就可以知道证书内容没有被修改,说明A是工商银行。
PKI类似于第二种《证书》的方式
我->nova
证书颁发机构->keystone
工商银行->user
原理:
1、user首先向keystone发送自己的用户名密码,申请token
2、keystone验证user的身份正确后,向user发放私钥加密过后的pki token 3、user收到token后,向服务发送请求,携带token
4、服务收到请求后,剥离token,自己使用公钥解密pki token。
5、服务根据user请求的动作,结合它的角色,判断该动作能否执行优点:相比uuid,不需要每次找keystone验证,keystone压力较小缺点:pki token本身内容较多,token较大。对整体规模有限制
PKIZ
可以理解为压缩版本的PKI
原理:
1、user首先向keystone发送自己的用户名密码,申请token
2、keystone验证user的身份正确后,向user发放私钥加密,并且龙宫过后的pkiz token 3、user收到token后,向服务发送请求,携带token
4、服务收到请求后,剥离token,自己先解压缩,再使用公钥解密pkiz token。
5、服务根据user请求的动作,结合它的角色,判断该动作能否执行优点:相比PKI,token较小
缺点:压缩本身压缩能力有限,而且压缩、解压缩需要消耗CPU。
fernet
对称算法
只有一个密钥,数据使用密钥加密后,需要使用同样的密钥解密
原理:
1、user首先向keystone发送自己的用户名密码,申请token
2、keystone验证user的身份正确后,向user发放密钥加密过的fernet token 3、user收到token后,向服务发送请求,携带token
4、服务收到请求后,剥离token,向keystone验证token。
5、keystone直接使用密钥解密,向服务告知user的project\role
6、服务再根据user请求的动作,结合它的角色,判断该动作能否执行
优点:相比PKI\PKIZ,token较小;相比UUID,keystone不需要缓存token,压力较小缺点:类似于UUID,需要找keystone进行二次验证。
Token 类型 | UUID | PKI | PKIZ | Fernet |
大小 | 32 Byte | KB 级别 | KB 级别 | 约 255 Byte |
支持本地认证 | 不支持 | 支持 | 支持 | 不支持 |
Keystone 负载 | 大 | 小 | 小 | 大 |
存储于数据库 | 是 | 是 | 是 | 否 |
携带信息 | 无 | user, catalog 等 | user, catalog 等 | user 等 |
涉及加密方式 | 无 | 非对称加密 | 非对称加密 | 对称加密(AES) |
是否压缩 | 否 | 否 | 是 | 否 |
令牌类型的选择涉及多个因素,包括Keystone server的负载、region数量、安全因素、维护成本以及令牌本身的成熟度。
Region的数量影响PKI/PKIZ令牌的大小
从安全的角度上看,UUID无需维护密钥,PKI需要妥善保管Keystone server上的私钥,Fernet需要周期性的更换密钥。
因此从安全、维护成本和成熟度上看,UUID > PKI/PKIZ > Fernet 如果:
Keystone server 负载低,region少于3个,采用UUID令牌。
Keystone server 负载高,region少于3个,采用PKI/PKIZ令牌。
Keystone server 负载低,region大于或等于3个,采用UUID令牌。
Keystone server 负载高,region大于或等于3个,目前OpenStack新版本默认采用Fernet令牌。
token验证是否有效,分两种情况
1、项目内的子组件,因为属于同个项目,所以,内部子组件不需要多次向keystone验证
2、不同项目,因为属于不同项目,所以,不同项目需要多次向keystone验证
Keystone只检验Token是否有效,那每个服务的操作权限控制是怎么实现的?
角色的访问控制
1、用户在向服务发送请求时,请求包含请求的动作、token
2、keystone验证token,主要验证身份、角色
3、每个服务,/etc/service/policy.json文件中,定义什么角色能够做什么动作。
openstack进度

openstack 部署

openstack keystone

keystone功能、应用场景

keystone架构

keystone概念

service

identity

resource

assignment

policy

catalog

region

token

UUID

PKI\PKIZ

Fernet
- Author:always1ov
- URL:https://always1ov.com/article/%EF%BC%88%E6%97%A7%EF%BC%89%E5%8D%8E%E4%B8%BA%E4%BA%91%E8%AE%A1%E7%AE%97%E7%AC%94%E8%AE%B0%EF%BC%88%E4%B8%83%EF%BC%89
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts
