keystone

keystone知识点

keystone_第1张图片
Paste_Image.png

keystone主要功能:

  • 认证 (Authentication)
  • 授权
  • 用户管理
  • 服务目录管理

1. 用户管理(User Management)

1.1 相关概念

在V2中,结构比较简单,用一个三角形就可以明白


keystone_第2张图片
Paste_Image.png
keystone_第3张图片
Paste_Image.png

Keystone V3中的概念就比较多了,也相对复杂,文档较少,比较推荐下面的文章:

  • http://www.florentflament.com/blog/setting-keystone-v3-domains.html
  • [转]Setting Keystone v3 domains
keystone_第4张图片
Paste_Image.png

2. 认证(Authentication )

Keystone有四种Token分别是 UUID、PKI、PKIZ、Fernet

四种token的生成方式演化过程:


keystone_第5张图片
2.png

比较各种方式的优缺点:

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的统一管理。

推荐下面的文章:

  • Customizing OpenStack RBAC policies
  • [转] Customizing OpenStack RBAC policies

Mandatory Access Control (MAC)在Openstack中也有应用,就是对Libvirt对Host文件的访问控制AppArmor。当你使用virsh命令进行操作的时候,如果发现自己是root,但是还没有权限,八成就是它的原因了。
推荐

  • http://ubuntuforums.org/showthread.php?t=1008906
  • [转] Introduction to AppArmor

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 可以给外部用户访问

参考文献

http://www.cnblogs.com/popsuper1982/p/3927390.html

你可能感兴趣的:(keystone)