OpenStack大数据&云计算

OpenStack工作原理——Token进阶

2021-08-31  本文已影响0人  云拾

Keystone 负责 OpenStack 的认证和授权管理。当用户的 Credentials 被验证后,keystone 会给用户分配一个 Authentication token 作为用户凭据去访问其他组件的 API。

Token 分类

OpenStack Token 按授权范围分有以下几种:

按生成方式分:

Token 认证流程

OpenStack Token 认证流程

其中 OpenStack API 接受到用户 token 后向 keystone 认证的步骤4、5是通过 keystone 提供的 WSGI middleware —— keystonemiddleware 实现的:

  1. 在各个组件的 api-paste.ini 配置文件中引入 auth_token filter:
api-paste filter 配置
  1. 在组件配置文件如 nova.conf 中配置 keystone 参数:
Nova 认证配置

Token 变迁史

OpenStack D 版本时,仅有 UUID 类型的 Token,UUID token 简单易用,却容易给 Keystone 带来性能问题,每当 OpenStack API 收到用户请求,都需要向 Keystone 验证该 token 是否有效。随着集群规模的扩大,Keystone 需处理大量验证 token 的请求,在高并发下容易出现性能问题,而且需要持久化到数据库中,与日俱增积累的大量 token 引起数据库性能下降,所以用户需经常清理数据库的 过期 token。

于是 PKI(Public Key Infrastructrue) token 在 G 版本应运而生,和 UUID 相比,PKI token 携带更多用户信息的同时还附上了数字签名,以支持本地认证,从而避免了和 keystone 交互过程。而因为 PKI token 携带了更多的信息,包括 service catalog,随着 OpenStack 的 Region 数增多,service catalog 携带的 endpoint 数量越多,PKI token 也相应增大,很容易超出 HTTP Server 允许的最大 HTTP Header(默认为 8 KB),导致 HTTP 请求失败。PKI 的过期管理和安全问题也需要用户考虑,给实际应用带来了额外的开销。

PKIZ token 就是 PKI token 的改进压缩版,但压缩效果有限,无法良好的处理 token size 过大问题。PKI 和 PKIZ 类型的 token 由于安全性和使用上的不便,在 P 版本已被废弃。

为了解决前面种种问题,社区引入了 Fernet token,它携带了少量的用户信息,实际 token 大小约为 255 Byte,采用了对称加密,无需存于数据库中,解析传输效率很高,现在已成为 keystone 的默认 token 类型。

Token 类型比较

Token 类型 UUID PKI PKIZ Fernet
大小 32 Byte KB 级别 KB 级别 约 255 Byte
支持本地认证 不支持 支持 支持 不支持
Keystone 负载
存储于数据库
携带信息 user, catalog 等 user, catalog 等 user 等
涉及加密方式 非对称加密 非对称加密 对称加密(AES)
是否压缩
需要预配置
版本支持 D G J K
上一篇下一篇

猜你喜欢

热点阅读