OpenStack 每日学习课程

日期: 2026-03-30(周一)
主题: Keystone — 身份认证与权限管理的"智能大厦门禁系统"


🔑 核心概念:Keystone 是什么?

想象一栋高级写字楼,每天有大量员工、访客、外卖小哥进出。如果每个楼层、每个公司都自己管理门禁,结果必然是混乱不堪。Keystone 就是这栋大厦的统一门禁中心,它不归任何一家公司所有,而是由物业统一运营——所有租户都来这里登记、领卡、授权。

在 OpenStack 中,Keystone 负责三大职责:

职责 说明
身份认证(Authentication) 验证"你是谁",核验用户名密码或令牌
授权管理(Authorization) 决定"你能干什么",基于角色的权限控制
服务目录(Service Catalog) 提供"哪里有什么服务"的导航,类比大厦的服务台

核心资源模型:

  • User(用户):在大厦登记的个人,比如员工"张三"
  • Project(项目):租户公司或部门,比如"5楼科技公司"
  • Domain(域):顶层隔离区,比如"仅限商务楼层"
  • Role(角色):权限等级,比如"管理员"可进所有房间,"访客"只能去大堂
  • Token(令牌):临时门禁卡,有有效期,过期自动失效

⚙️ 工作原理:一次认证请求的完整旅程

当你通过命令行登录 OpenStack 时,Keystone 的处理流程如下:

1. 用户请求  ──→  POST /v3/auth/tokens
   (携带用户名 + 密码 + 项目名称)

         ↓
2. Keystone 认证身份
   - 查询 User 表,核验密码(加盐哈希比对)
   - 确认 User 属于哪个 Domain

         ↓
3. Keystone 授权权限
   - 查询该 User 在目标 Project 中的 Role
   - 根据 Role 生成对应的权限规则

         ↓
4. Keystone 颁发 Token
   - 生成带签名的 Token(含过期时间,默认1小时)
   - 返回 Token + 该项目可用的服务端点列表

         ↓
5. 后续请求携带 Token
   - 各服务(Nova、Cinder 等)通过 Token 验证身份
   - 无需重复认证,直接放行或拒绝

类比理解:你去酒店入住 → 前台验证身份证 → 给你房卡(Token)+ 早餐券(权限范围)→ 电梯扫描房卡放行(各服务验证)。


🌐 实际应用场景

场景一:多租户隔离的企业云平台

某公司 IT 部为市场部、研发部、财务部分别创建独立 Project。市场部员工无法访问财务部的账单数据,因为 Keystone 为每个 Project 分配了不同的 Role 映射,即使用户名相同,权限也完全不同。这就像同一栋楼里,A 公司员工刷不开 B 公司的门禁。

场景二:运维人员的分级授权

平台管理员(Admin)为新入职运维工程师授予 compute_admin 角色,使其可以管理虚拟机但无法删除对象存储数据。后来该员工转岗,Admin 只需修改其 Role,无需重建账号——权限调整即时生效。这比改物理钥匙安全得多。

场景三:跨域联邦认证

大型集团收购了子公司,两套 OpenStack 环境需要互通。通过 Keystone 的 Domain Federation(域联邦),子公司员工使用自己公司的账号登录后,可被映射到集团主平台的 Guest Role,直接访问已授权的共享资源,无需重新注册账号。


🛠️ 动手练习

练习 1:用 CLI 操作 Keystone(必做)

# 1. 配置环境变量(使用 admin 凭证)
export OS_AUTH_URL=http://controller:5000/v3
export OS_USERNAME=admin
export OS_PASSWORD=your_password
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_IDENTITY_API_VERSION=3

# 2. 获取 Token
openstack token issue
# 观察输出:Token ID、过期时间、关联的 Project

# 3. 查看当前用户的权限
openstack role assignment list --user admin --names

# 4. 创建新项目并分配用户
openstack project create --domain default --description "研发部云平台" rd-project
openstack user create --project rd-project --password P@ssw0rd rd-user
openstack role add --user rd-user --project rd-project member

练习 2:思考题

  1. Token 的过期时间默认是 1 小时。思考:如果运维脚本需要长时间运行(比如批量创建 100 台虚拟机),1 小时后 Token 过期怎么办?有几种应对方案?
  2. Role 与 Policy 的区别是什么? admin 角色是否等于"可以做任何事"?查阅 Keystone 的 policy.json 文件,看看哪些操作被显式禁止了。
  3. 如果删除了一个 User,但该 User 之前颁发的 Token 仍在有效期内,这些 Token 还能使用吗?如何在删除用户时让所有 Token 立即失效?

📋 今日总结

项目 内容
组件名称 Keystone(身份认证服务)
核心职责 身份认证 + 授权管理 + 服务目录
关键资源 User、Project、Domain、Role、Token
核心流程 认证身份 → 匹配角色 → 颁发 Token → 各服务验证
端口号 5000(Keystone API)、35357(Admin API)
配置文件 /etc/keystone/keystone.conf
CLI 命令 openstack token issueopenstack role assignment list
类比记忆 智能大厦统一门禁系统(物业统一管理)
明日预告 Nova — 计算服务(虚拟机的心脏)

学习提示:Keystone 是 OpenStack 所有组件的"入口",几乎所有服务都需要与其交互。建议在本机搭建 DevStack 或使用 PackStack 搭建实验环境,实际操作上面的命令,加深理解。明天我们将学习 Nova——负责创建和管理虚拟机的计算服务。

results matching ""

    No results matching ""