美文网首页OpenStack大数据&云计算
OpenStack工作原理——Token进阶

OpenStack工作原理——Token进阶

作者: 云拾 | 来源:发表于2021-08-31 19:10 被阅读0次

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

Token 分类

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

  • Unscoped tokens
    * contains neither a service catalog, any roles, a project scope, nor a domain scope
    * use to generate scoped tokens

  • Project-scoped tokens
    * operate in a specific tenancy of the cloud

  • Domain-scoped tokens
    * domain-level administrator to operate a domain

  • System-scoped tokens
    * operate system-level resources,e.g. endpoints, service, hypervisors

按生成方式分:

  • UUID tokens
    * 32 bytes in length and must be persisted

  • PKI tokens
    * CA certificate issued by external CA

  • PKIZ tokens
    * zipped PKI token

  • Fernet tokens
    * do not need to be persisted
    * AES256 encryption is used to protect the information stored in the token
    * integrity is verified with a SHA256 HMAC signature

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

相关文章

网友评论

    本文标题:OpenStack工作原理——Token进阶

    本文链接:https://www.haomeiwen.com/subject/rlwziltx.html