安全

令牌

师成师成· 更新于 2026-09-28· 阅读 6 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Ozone 使用基于令牌的身份验证来保护存储在容器和块中的数据的访问安全。令牌是短期有效的凭证,可在无需客户端反复向中央授权机构进行身份验证的情况下,授权执行特定操作。

Ozone 实现了两种类型的令牌:

  • 委托令牌用于命名空间操作
  • 块令牌用于细粒度的数据访问,
  • 容器令牌用于容器级别的管理操作。

委托令牌

  • 粒度:命名空间级别。委托令牌授予对整个 Ozone 集群执行元数据和命名空间操作的权限,例如创建卷、桶和键,或列出对象。

  • 签发方:Ozone Manager(OM)。当客户端首次进行身份验证(通常通过 Kerberos)并请求委托令牌时,OM 会生成委托令牌。这是因为 OM 负责管理 Ozone 中的命名空间和元数据操作。

  • **使用场景:**当客户端需要执行控制平面操作(命名空间/元数据操作)而无需反复通过 Kerberos 进行身份验证时,就会使用委托令牌。例如:

    1. 客户端应用启动并通过 Kerberos 向 Ozone Manager 进行身份验证。
    2. 客户端向 OM 请求委托令牌,OM 签发一个代表用户身份的令牌。
    3. 对于后续操作,如创建卷、列出桶或创建键,客户端使用该委托令牌而非 Kerberos 凭证。
    4. 令牌可在过期前续期,使长时间运行的应用无需重新进行身份验证即可继续运行。
  • **携带的信息(OzoneTokenIdentifier):**令牌标识符包含:

    • 所有者(有效用户名)。
    • 续期者(有权续期该令牌的主体)。
    • 实际用户(如果使用了身份模拟,则为实际用户)。
    • 签发日期和过期日期。
    • 用于令牌管理的序列号和主密钥 ID。
    • 密钥 ID(用于对称签名)或 OM 证书序列 ID(已弃用)。
    • 用于多 OM 部署的 OM 服务 ID。
  • 令牌类型:OzoneTokenIdentifier 支持两种子类型:

    • DELEGATION_TOKEN:用于命名空间操作的标准委托令牌。
    • S3AUTHINFO:用于 S3 兼容访问的 S3 身份验证信息(AWS Signature Version 4)。

块令牌

  • 粒度:块级别。块令牌授予对容器内某个特定块的访问权限。
  • 签发方:Ozone Manager(OM)。当客户端请求写入或读取某个块时,OM 会生成块令牌。这是因为 OM 负责管理对象存储中的块命名空间。
  • **使用场景:**当客户端需要对某个特定块执行数据平面操作(读取/写入)时,就会使用块令牌。例如:
  1. 客户端想要写入 key1 的数据。
  2. 它联系 OM,由 OM 为 key1 分配一个新的 Block(例如 block123)。
  3. OM 返回 block123 的位置(其中包含 Datanode)以及一个针对 block123 的唯一 Block Token。
  4. 随后,客户端使用这个特定的 Block Token 将 block123 的数据写入 Datanode。
  • 携带的信息(OzoneBlockTokenIdentifier): 该令牌标识符包含:

    • 用户/属主 ID。
    • 它所授权的 BlockID。
    • 它允许的访问模式(例如 READ、WRITE、DELETE)。
    • 过期时间。

容器令牌(Container Token)

  • 粒度: 容器级别。容器令牌授予对整个容器的访问权限,一个容器可以包含许多 Block。

  • 签发者: Storage Container Manager (SCM)。由 SCM 生成容器令牌。这是合乎逻辑的,因为 SCM 负责管理容器及其在各个 Datanode 上的分布,但它并不了解容器内部的各个 Block。

  • 使用场景: 容器令牌用于针对整个容器的操作,通常用于绕过 Ozone Manager 的管理或维护任务。例如:

    1. 管理员使用 ozone debug replicas verify 命令来检查某个容器副本的完整性。
    2. 管理工具联系 SCM,以获取指定 ContainerID 的容器令牌。
    3. 该工具随后使用此令牌直接与 Datanode 通信以执行校验。
    4. 另一个例子是 SCM 自身向 Datanode 下发命令(例如关闭容器)时,它会生成一个容器令牌来为自己的命令授权。
  • 携带的信息(ContainerTokenIdentifier): 该令牌标识符包含:

    • 用户/属主 ID。
    • 它所授权的 ContainerID。
    • 过期时间。
    • 它不会像 Block Token 那样指定具体的 Block 或细粒度的访问模式。

主要差异总结

特性委托令牌块令牌容器令牌
访问范围整个命名空间(所有卷、桶、键)单个块(Block)整个容器
生成者Ozone Manager(OM)Ozone Manager(OM)Storage Container Manager(SCM)
主要用例授权命名空间/元数据操作(创建卷、桶、键,以及列表操作)授权客户端数据操作(读写块)授权对容器的管理或运维操作
典型用户执行命名空间操作的终端客户端应用写入/读取键的终端客户端应用Ozone 内部进程(如 SCM)或管理工具(ozone debug)
可续期是否(有效期短,过期后获取新的令牌)否(有效期短)
默认启用是(启用安全特性时)是(启用安全特性时)否(默认禁用)

简而言之,可以这样理解:

  • 委托令牌是你进入整个电影院综合体(Ozone 集群)的通用通行证,由主售票处(Ozone Manager)发放,让你无需反复出示身份证件(Kerberos 凭据)即可参与所有游乐项目(命名空间操作)。
  • 块令牌是电影院中某个具体座位的门票,由售票处(Ozone Manager)发放。
  • 容器令牌是整个放映厅的万能钥匙,由大楼管理员(SCM)出于维护或巡检目的发放。

评论

登录后参与评论

正在加载评论…