文章总结: 文档全面阐述OpenStackKeystone组件,涵盖基础概念、架构原理及高级运维。核心内容涉及身份认证、授权机制、服务目录与多域架构,深入解析Fernet令牌及策略管理。文中详细提供了性能优化、高可用部署、安全加固与故障排查方案,并包含LDAP集成与监控审计实践。该教材为企业构建安全稳定的云平台身份服务提供了系统性技术指导。 综合评分: 90 文章分类: 云安全,安全建设,安全培训,安全运营
OpenStack Keystone 组件全面培训教材
原创
刘军军 刘军军
运维星火燎原
2026年1月25日 00:01 山西
第一部分:Keystone 基础入门(适合初学者)
1.1 Keystone 概述
什么是Keystone?
Keystone是OpenStack的身份认证服务,作为OpenStack的安全大脑,负责所有组件的认证、授权和服务发现。它是OpenStack第一个需要部署的核心服务。
Keystone 的核心功能
- 身份认证 (Authentication): 验证用户身份
- 授权管理 (Authorization): 控制用户访问权限
- 服务目录 (Service Catalog): 提供可用服务端点信息
- 令牌管理 (Token Management): 生成和验证访问令牌
- 多租户支持 (Multi-tenancy): 支持项目/租户隔离
Keystone 的重要性
# Keystone是OpenStack的入口点
用户/服务 → Keystone → 获取令牌 → 访问其他服务
# 没有Keystone,整个OpenStack无法工作
其他服务都依赖Keystone进行身份验证
1.2 Keystone 基本概念
核心概念解析
# 用户 (User)
- 访问OpenStack的个体或系统
- 拥有用户名、密码、邮箱等属性
# 项目 (Project) / 租户 (Tenant)
- 资源的逻辑分组和隔离单位
- 用户必须在项目中才有权限
# 角色 (Role)
- 定义用户的权限级别
- 如:admin, member, reader等
# 域 (Domain)
- 用户和项目的高层分组
- 支持多级权限管理
# 服务 (Service)
- OpenStack的各种服务(nova, neutron等)
- 在服务目录中注册
# 端点 (Endpoint)
- 服务的访问地址(URL)
- 分为public, internal, admin三种类型
# 令牌 (Token)
- 访问OpenStack的凭证
- 有时效性,需要定期刷新
权限模型
User → 分配到 → Project → 授予 → Role → 定义 → 权限
1.3 快速开始:Keystone 基本操作
环境准备
# 安装OpenStack客户端
pip install python-openstackclient
# 配置管理员认证信息
export OS_AUTH_URL=http://controller:5000/v3
export OS_USERNAME=admin
export OS_PASSWORD=admin_pass
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
基本操作演示
# 1. 查看当前认证信息
openstack token issue
# 2. 查看可用服务
openstack service list
# 3. 查看端点信息
openstack endpoint list
# 4. 查看用户列表
openstack user list
# 5. 查看项目列表
openstack project list
# 6. 查看角色列表
openstack role list
# 7. 查看域列表
openstack domain list
创建第一个用户和项目
# 1. 创建新项目
openstack project create \
--description "Development Project" \
development
# 2. 创建新用户
openstack user create \
--password user123 \
--email [email protected] \
developer
# 3. 为用户分配角色
openstack role add \
--project development \
--user developer \
member
# 4. 验证权限
export OS_USERNAME=developer
export OS_PASSWORD=user123
export OS_PROJECT_NAME=development
# 5. 测试访问
openstack token issue
openstack server list
服务注册示例
# 注册Nova服务
openstack service create \
--name nova \
--description "OpenStack Compute" \
compute
# 添加Nova端点
openstack endpoint create \
--region RegionOne \
compute public http://controller:8774/v2.1
openstack endpoint create \
--region RegionOne \
compute internal http://controller:8774/v2.1
openstack endpoint create \
--region RegionOne \
compute admin http://controller:8774/v2.1
第二部分:Keystone 中级进阶(适合有一定基础)
2.1 Keystone 架构深度解析
服务架构
# Keystone 核心组件
keystone-all # 主服务进程(包含API和各个驱动)
# 实际由多个WSGI应用组成
# WSGI 应用组件
keystone-admin # 管理API (端口35357)
keystone-main # 公共API (端口5000)
# 支持的驱动类型
- Identity Driver: 管理用户、组、项目
- Resource Driver: 管理域、项目
- Assignment Driver: 管理角色分配
- Catalog Driver: 管理服务和端点
- Token Driver: 管理令牌
- Policy Driver: 管理策略规则
数据存储后端
# 支持的后端数据库
- SQL (MySQL, PostgreSQL): 生产环境推荐
- LDAP: 企业级目录服务集成
- NoSQL: 实验性支持
# 令牌存储后端
- SQL: 数据库存储
- Memcached: 内存缓存(性能好)
- Fernet: 加密令牌(无状态)
配置文件结构
# 主要配置文件
/etc/keystone/keystone.conf
# 配置文件分段
[DEFAULT] # 通用配置
[database] # 数据库配置
[token] # 令牌配置
[fernet_tokens] # Fernet令牌配置
[memcache] # Memcache配置
[ldap] # LDAP集成配置
[oslo_policy] # 策略配置
[ssl] # SSL配置
2.2 认证机制详解
支持的认证方法
# 密码认证 (最常用)
- 用户名+密码认证
- 支持多种密码哈希算法
# 令牌认证
- 使用已有令牌获取新令牌
- 用于服务间认证
# 证书认证
- SSL客户端证书认证
- 高安全性场景
# OAuth 1.0认证
- 第三方应用集成
# OpenID Connect
- 现代身份认证协议
令牌类型比较
| | | | | | — | — | — | — | | 令牌类型 | 存储方式 | 优点 | 缺点 | | UUID | 数据库 | 简单可靠 | 需要持久化存储 | | PKI | 自包含 | 可离线验证 | 令牌体积大 | | Fernet | 无状态 | 轻量高效 | 需要密钥轮换 |
Fernet 令牌优势
# Fernet令牌特点
- 基于加密的无状态令牌
- 不需要持久化存储
- 令牌体积小(约255字节)
- 支持密钥轮换
# 配置Fernet令牌
[token]
provider = fernet
driver = sql
[fernet_tokens]
key_repository = /etc/keystone/fernet-keys
max_active_keys = 3
2.3 多域架构
域的概念
# 域 (Domain) 的作用
- 用户和项目的高层分组
- 实现多级权限管理
- 支持企业级组织架构
# 默认域
- Default域: 包含初始用户和项目
- Default域通常用于管理目的
多域配置示例
# 创建新域
openstack domain create \
--description "Engineering Department" \
engineering
# 在域中创建项目
openstack project create \
--domain engineering \
--description "DevOps Team" \
devops
# 在域中创建用户
openstack user create \
--domain engineering \
--password devops123 \
--email [email protected] \
devops-user
# 跨域权限分配
openstack role add \
--domain engineering \
--user devops-user \
admin
域的管理最佳实践
# 1. 使用域进行逻辑隔离
- 每个部门一个域
- 每个客户一个域(云服务商)
# 2. 域管理员权限
- 域管理员只能管理本域资源
- 全局管理员可以管理所有域
# 3. 资源配额管理
- 配额可以按域设置
- 实现资源分配和控制
2.4 策略和权限管理
策略引擎
# 策略文件位置
/etc/keystone/policy.json
# 策略语法
{
"rule_name": "rule_definition",
"identity:list_users": "role:admin",
"compute:create_server": "project_id:%(project_id)s"
}
# 策略规则类型
- 基于角色: "role:admin"
- 基于项目: "project_id:%(project_id)s"
- 自定义规则: "rule:cloud_admin"
自定义策略示例
{
"admin_required": "role:admin",
"cloud_admin": "rule:admin_required and domain_id:default",
"project_member": "project_id:%(project_id)s",
"identity:list_users": "rule:admin_required",
"identity:list_projects": "rule:project_member or rule:admin_required",
"compute:create_server": "rule:project_member"
}
策略管理操作
# 查看当前策略
openstack policy list
# 验证权限
openstack policy show identity:list_users
# 更新策略(需要重启服务)
cp new-policy.json /etc/keystone/policy.json
systemctl restart keystone
第三部分:Keystone 高级运维(适合高级工程师)
3.1 Keystone 性能优化
配置优化
# /etc/keystone/keystone.conf 优化
[DEFAULT]
# Worker进程数
public_workers = 8
admin_workers = 4
# 数据库连接池
max_pool_size = 30
max_overflow = 10
pool_timeout = 30
# 消息队列优化
rpc_conn_pool_size = 30
rpc_response_timeout = 60
# 缓存配置
memcache_servers = controller1:11211,controller2:11211,controller3:11211
memcache_dead_retry = 30
memcache_socket_timeout = 1
令牌优化配置
# 使用Fernet令牌提升性能
[token]
provider = fernet
driver = sql
expiration = 3600
[fernet_tokens]
key_repository = /etc/keystone/fernet-keys
max_active_keys = 3
# 令牌缓存配置
[token]
caching = true
cache_time = 300
# 减少令牌验证开销
[token]
revoke_by_id = false
数据库优化
# 定期清理过期令牌
keystone-manage token_flush
# 数据库索引优化
# 确保以下字段有索引:
- token表: user_id, project_id, expires
- assignment表: user_id, project_id, role_id
- user表: domain_id, enabled
- project表: domain_id, enabled
# 连接池监控
show status like 'Threads_connected';
show processlist;
3.2 高可用部署
多节点高可用架构
# 控制节点 (3节点集群)
Controller1: keystone (Active)
Controller2: keystone (Standby)
Controller3: keystone (Standby)
# 负载均衡配置
frontendkeystone-public
bind *:5000
modehttp
default_backendkeystone-public-backend
frontendkeystone-admin
bind *:35357
modehttp
default_backendkeystone-admin-backend
backendkeystone-public-backend
balanceroundrobin
servercontroller1 10.0.0.11:5000check
servercontroller2 10.0.0.12:5000check
servercontroller3 10.0.0.13:5000check
backendkeystone-admin-backend
balanceroundrobin
servercontroller1 10.0.0.11:35357check
servercontroller2 10.0.0.12:35357check
servercontroller3 10.0.0.13:35357 check
数据库高可用
# MySQL Galera Cluster
[database]
connection = mysql+pymysql://keystone:keystone_pass@controller1,controller2,controller3/keystone?charset=utf8
# 连接参数优化
max_retries = 3
retry_interval = 1
Fernet密钥管理
# 多节点密钥同步
# 密钥文件需要手动同步到所有节点
rsync -av /etc/keystone/fernet-keys/ controller2:/etc/keystone/fernet-keys/
rsync -av /etc/keystone/fernet-keys/ controller3:/etc/keystone/fernet-keys/
# 密钥轮换脚本
keystone-manage fernet_rotate --keystone-user keystone --keystone-group keystone
# 定期密钥轮换(cronjob)
0 2 * * * /usr/bin/keystone-manage fernet_rotate
3.3 故障排查和调试
服务状态检查
# 检查Keystone服务状态
systemctl status keystone
journalctl -u keystone -f
# 检查数据库连接
mysql -u keystone -p -e "SELECT COUNT(*) FROM user;"
# 检查令牌服务
openstack token issue
curl -X GET http://controller:5000/v3 -H "Accept: application/json"
# 检查端点健康状态
openstack endpoint list
日志分析
# 关键日志文件
/var/log/keystone/keystone.log
# 日志级别配置
[DEFAULT]
debug = true
verbose = true
log_file = /var/log/keystone/keystone.log
# 日志分析技巧
grep"ERROR" /var/log/keystone/keystone.log
grep"Authentication failed" /var/log/keystone/keystone.log
grep"Token validation" /var/log/keystone/keystone.log
# 详细调试信息
[audit]
middleware = true
常见故障排查
# 1. 认证失败
- 检查用户密码是否正确
- 检查用户是否被禁用
- 检查项目是否存在
# 2. 令牌无效
- 检查令牌是否过期
- 检查令牌是否被撤销
- 检查时间同步(NTP)
# 3. 权限不足
- 检查用户角色分配
- 检查策略文件配置
# 4. 服务不可用
- 检查Keystone服务状态
- 检查数据库连接
- 检查负载均衡配置
3.4 安全加固
API安全配置
# SSL/TLS加密
[ssl]
enable = true
certfile = /etc/keystone/ssl/cert.pem
keyfile = /etc/keystone/ssl/key.pem
ca_certs = /etc/keystone/ssl/ca.pem
# CORS安全配置
[cors]
allowed_origin = https://dashboard.example.com
allow_credentials = true
max_age = 3600
# 请求限制
[DEFAULT]
max_request_body_size = 114688
client_socket_timeout = 900
认证安全
# 密码策略强化
[identity]
password_hash_algorithm = bcrypt
bcrypt_rounds = 12
# 防止暴力破解
[security_compliance]
lockout_failure_attempts = 5
lockout_duration = 300
# 会话管理
[token]
expiration = 3600
invalidate_token = true
网络安全
# 防火墙规则
# 只开放必要的端口
iptables -A INPUT -p tcp --dport 5000 -s trusted_network -j ACCEPT
iptables -A INPUT -p tcp --dport 35357 -s trusted_network -j ACCEPT
# 网络隔离
- 管理网络隔离
- 使用VPN访问管理接口
- 启用网络访问控制
3.5 监控和审计
监控指标
# 关键性能指标
-keystone.request.count: API请求数量
-keystone.request.duration: 请求处理时间
-keystone.token.issue.count: 令牌签发数量
-keystone.token.validate.count: 令牌验证数量
# 系统健康指标
-keystone.db.connection.time: 数据库连接时间
-keystone.worker.memory: 工作进程内存使用
-keystone.active.threads: 活跃线程数
审计日志
# 启用详细审计
[audit]
middleware = true
audit_map_file = /etc/keystone/audit_map.conf
# 审计日志配置
[audit]
audit_log_file = /var/log/keystone/audit.log
audit_log_format = json
# 关键审计事件
- 用户登录/登出
- 权限变更
- 令牌签发/撤销
- 管理操作
集成监控系统
# Prometheus监控
- 使用keystone-exporter暴露指标
- 配置告警规则
# ELK日志分析
- 收集Keystone日志
- 分析认证模式
- 检测异常行为
# 自定义监控脚本
#!/bin/bash
# 检查Keystone服务健康
response=$(curl -s -o /dev/null -w "%{http_code}" http://controller:5000/v3)
if [ "$response" -ne 200 ]; then
echo"Keystone service is down"
exit 1
fi
第四部分:企业级集成和最佳实践
4.1 LDAP/AD 集成
LDAP 集成配置
# /etc/keystone/keystone.conf
[identity]
driver = ldap
[ldap]
url = ldap://
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:运维星火燎原 刘军军 刘军军《OpenStack Keystone 组件全面培训教材》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论