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进度
notion image
openstack 部署
notion image
openstack keystone
notion image
keystone功能、应用场景
notion image
keystone架构
notion image
keystone概念
notion image
service
notion image
identity
notion image
resource
notion image
assignment
notion image
policy
notion image
catalog
notion image
region
notion image
token
notion image
UUID
notion image
PKI\PKIZ
notion image
Fernet
(旧)华为云计算笔记(八)(旧)华为云计算笔记(六)
Loading...