keystone知识点
keystone主要功能:
- 认证 (Authentication)
- 授权
- 用户管理
- 服务目录管理
1. 用户管理(User Management)
1.1 相关概念
在V2中,结构比较简单,用一个三角形就可以明白
Keystone V3中的概念就比较多了,也相对复杂,文档较少,比较推荐下面的文章:
2. 认证(Authentication )
Keystone有四种Token分别是 UUID、PKI、PKIZ、Fernet
四种token的生成方式演化过程:
比较各种方式的优缺点:
Token 类型 | UUID | PKI | PKIZ | Fernet |
---|---|---|---|---|
大小 | 32 Byte | KB 级别 | KB 级别 | 约 255 Byte |
支持本地认证 | 不支持 | 支持 | 支持 | 支持 |
Keystone 负载 | 大 | 小 | 小 | 大 |
存储于数据库 | 是 | 是 | 是 | 否 |
携带信息 | 无 | user, catalog 等 | user, catalog 等 | user 等 |
涉及加密方式 | 无 | 非对称加密 | 非对称加密 | 对称加密 |
是否支持压缩 | 否 | 否 | 是 | 否 |
版本支持 | D | G | J | K |
优点 | 生成的Token,长度较短,使用方便。url使用方便,回收的方式,就是从后端删除即可,实现逻辑较为清晰。 | 使用证书及私钥生成,可以线下验证(不需要走keystone认证服务) | 较PKI长度上缩小了很多 | 设计的逻辑,引入序列化,负载格式加以控制,基于此进行加密,长度比PKI、PKIZ要短。 |
缺点 | 需要持久化后端存储,每次访问需要keystone相关服务进行认证。 | 长度负载重,不推荐用于生产部署,经常由于长度超长引起错误。 | 长度负载较重,同上PKI | 对称加密算法,安全性低,需要周期性更换秘钥 |
Token 类型的选择涉及多个因素,包括 Keystone server 的负载、region 数量、安全因素、维护成本以及 token 本身的成熟度。region 的数量影响 PKI/PKIZ token 的大小,从安全的角度上看,UUID 无需维护密钥,PKI 需要妥善保管 Keystone server 上的私钥,Fernet 需要周期性的更换密钥。
3. 授权(Authorization)
对于访问控制Access Control,发现有多种http://en.wikipedia.org/wiki/Access_control,而Openstack采用的是Role Based Access Control RBAC。
其中在V2中采用的每个Service下面的policy.json文件,访问控制是每个Service自己决策的。后来在V3中,除了policy.json文件,还可以将Policy在数据库中创建,实现了keystone的统一管理。
推荐下面的文章:
Mandatory Access Control (MAC)在Openstack中也有应用,就是对Libvirt对Host文件的访问控制AppArmor。当你使用virsh命令进行操作的时候,如果发现自己是root,但是还没有权限,八成就是它的原因了。
推荐
4. 服务目录管理
4.1 概念
Service 服务:一个 OpenStack 服务,比如Nova、Swift或者Glance等。每个服务提供一个或者多个 endpoint 供用户访问资源以及进行操作。
-
Endpoint 端点:一个网络可访问的服务地址,通过它你可以访问一个服务,通常是个 URL 地址。不同 region 有不同的service endpoint。endpoint告诉也可告诉 OpenStack service 去哪里访问特定的 servcie。比如,当 Nova 需要访问 Glance 服务去获取 image 时,Nova 通过访问 Keystone 拿到 Glance 的 endpoint,然后通过访问该 endpoint 去获取Glance服务。我们可以通过Endpoint的 region 属性去定义多个 region。Endpoint 该使用对象分为三类:
- adminurl 给 admin 用户使用
- internalurl 给 OpenStack 内部服务使用来跟别的服务通信
- publicurl 可以给外部用户访问