美文网首页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