OpenStack工作原理——Token进阶

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容

  • keystone四种token keystone的四种token为:UUID token、PKI token、PK...
    爱吃土豆的程序猿阅读 1,688评论 0 5
  • 序言 近几年,计算机不断冒出新技术,包括云计算、大数据、人工智能、区块链等等。 由于工作原因,最近有机会接触云计算...
    蛋蛋邻里阅读 1,231评论 0 1
  • 在OpenStack的框架体系中Keystone的作用类似于一个服务总线,为OpenStack提供身份管理服务(I...
    草帽豆子阅读 1,158评论 0 2
  • 作者:Maxwell Li日期:2016/12/21未经作者允许,禁止转载本文任何内容。如需转载请留言。 什么是 ...
    Maxwell_Li阅读 1,961评论 0 0
  • keystone知识点 keystone主要功能: 认证 (Authentication) 授权 用户管理 服务目...
    crowns阅读 1,271评论 1 1