1.keystone集成需求介绍
公司要搭建基于openstack的私有云平台,提供IAAS。私有云用户是公司员工,考虑到公司已经有一套单点登录认证系统,需要openstack的keystone身份认证服务能集成该认证系统。
keystone提供openstack的认证授权服务,它实现了OpenStack的Identity API,除此之外它还负责提供目录服务(提供服务的url)。keystone缺省提供基于用户名口令、LDAP等认证方式,此外还可开发python认证模块来提供其它的认证方式。
2.keystone外部认证流程
集成公司已有的认证系统需要使用到keystone的外部(external authentication)认证,整个认证过程如下图。
1)、用户在openatck控制台(该控制台可基于openstack的Horizon进行改造或重新开发)的登录页面中输入用户名、口令等,提交到公司认证系统进行登录认证。
2)、公司认证系统认证通过后,返回访问凭证(通常是访问token)、用户名。
3)、openstack控制台通过http协议将第二步收到的访问token和用户名通过keystone提供的认证接口发给keystone,发送的http请求大致如下:
POST http://172.19.106.242:5000/v2.0/tokens
REMOTE_USER: 用户名
EXTERNAL_ACCESS_TOKEN: 访问token
Accept: application/json
Content-Type: application/json
{"auth" : { } }
REMOTE_USER头是keystone进行外部认证必须要有的,请求中存在该头keystone才会执行外部认证,其值为用户名;EXTERNAL_ACCESS_TOKEN头是自定义的,其值是公司认证系统返回的访问token。
http body是json格式,只有auth属性,内容为空。其他的如口令等都不需要。
4)、keystone收到该请求后,识别出认证请求中存在REMOTE_USER头,就进行外部认证的处理,主要是根据REMOTE_USER头中的用户名查询keystone的user表,看用户记录是否存在(所以需要将公司用户信息同步到keystone的user表中,不需同步密码字段),存在就通过了keystone的认证,后续处理流程和进行用户名/密码验证的相同,主要是颁发keystone的unscoped token等(该token不和具体的project/tenant绑定)。
基于安全的原因,keystone会到公司认证系统验证访问token(EXTERNAL_ACCESS_TOKEN头中携带),确保该token是公司认证系统颁发,且没过期。
该验证也可采用其他方式,如keystone回调openstack控制台来验证该访问token,或openstack控制台和keystone之间采用对称或非对称密钥,keystone对opentack传过来的签名进行验证(该签名放在另一个http头中,去掉EXTERNAL_ACCESS_TOKEN头)。外加iptables进行控制台ip地址限制。
在这一步的处理需要修改keystone的代码,具体的代码修改将在下面给出。
5)、返回keystone unscoped token给控制台。
3.涉及到的代码修改
keystone代码修改(基于openstack havana版)位于两个文件中,/opt/stack/keystone/keystone/token/controllers.py (对应v2.0认证接口)和/opt/stack/keystone/keystone/auth/controllers.py (对应v3认证接口),实际的文件位置根据安装来定。
第一个文件的修改位于def _authenticate_external方法中,需要注意的是由于keystone的http底层代码会将收到的REMOTE_USER头加HTTP_前缀后改成HTTP_REMOTE_USER(目前的havana版存在该bug),因此在该方法中的context对象中是获取不到REMOTE_USER头的,需要在该方法开头进行如下的修改:
#如果REMOTE_USER头和HTTP_REMOTE_USER头都没有,则抛异常
if 'REMOTE_USER' not in context.get('environment', {}) and 'HTTP_REMOTE_USER' not in context.get('environment', {}):
raise ExternalAuthNotApplicable()
#如果REMOTER_USER为None,则将HTTP_REMOTE_USER的值赋给它。
remoteUser = context.get('environment', {}).get('REMOTE_USER')
if not remoteUser:
context['environment']['REMOTE_USER'] = context['environment']['HTTP_REMOTE_USER']
到公司认证系统验证访问token的逻辑略去。
第二个文件的修改位于 def authenticate(self, context, auth_info, auth_context)方法中,和第一个文件类似,不过该文件中对外部认证的处理还有其他几个小问题,通过调试很容易发现并修改。
相关推荐
- **Keystone API**:接收外部请求,并处理这些请求,如身份认证、令牌发放等。 - **Keystone Middleware**:不同的服务提供不同的认证或鉴权服务,如HTTP中间件等。 - **Keystone Services**:实现Keystone的核心...
接下来是Keystone服务的安装,这是OpenStack的身份认证和授权中心。安装`openstack-keystone`和`python-keystoneclient`,然后配置Keystone连接到MySQL数据库,创建服务数据库连接。使用`openstack-db`命令初始化...
OpenStack的核心组件包括Keystone(认证服务)、Glance(镜像服务)、Placement(资源调度)、Nova(计算服务)、Neutron(网络服务)、Horizon(dashboard界面)和Cinder(块存储服务)。每个组件的配置都涉及...
- **Keystone**: OpenStack 的身份认证服务, 用于管理和验证用户身份以及对资源的访问权限。 - **配置步骤**: 1. **安装 Keystone**: `yum install openstack-keystone` 2. **初始化数据库**: `keystone-manage db...
1. **Keystone(身份认证服务)**:Keystone作为OpenStack中的身份认证服务,负责用户的认证、鉴权以及服务目录的维护等功能。 2. **Glance(镜像服务)**:Glance提供了对虚拟机镜像的存储、检索和维护功能,支持...
身份认证服务Keystone是OpenStack的核心组件之一,用于管理用户认证、授权和服务目录。 1. **安装Keystone相关组件** ``` yum install openstack-utils openstack-keystone python-keystoneclient ``` 2. **...
Keystone是OpenStack中的身份认证服务,它负责用户的认证、鉴权和令牌管理。通过Keystone,用户可以访问OpenStack提供的各种服务。 ##### 安装和配置 1. 安装Keystone:`yum install openstack-keystone` 2. 配置...
例如,在一个典型的OpenStack部署中,用户首先通过Keystone进行认证,然后通过Nova创建虚拟机实例,使用Neutron配置网络连接,并通过Glance获取镜像。 ### 二、基本环境 #### 准备工作 - **安全性**:在安装...
Keystone是OpenStack的身份服务,提供身份验证和授权功能,所有其他OpenStack服务都通过Keystone进行用户身份验证。Keystone的安装配置步骤包括: - 前期准备工作,包括服务的规划和配置。 - 安装和配置Keystone...
6. **Keystone**: 认证服务,为OpenStack的所有服务提供身份验证和授权。 7. **Horizon**: Web门户,用户可以通过它来交互式地管理和控制OpenStack资源。 8. **Ceilometer**: 监控服务,收集各种资源的使用情况数据...
OpenStack的概念架构基于一个中心化的身份认证服务(Keystone),其他服务都通过API接口与其交互来完成认证和权限检查。各个服务之间通过RESTful API相互通信,实现灵活可扩展的架构设计。 ##### 架构样例 为了更...
6. Identity Service (Keystone):为其他 OpenStack 服务提供认证和授权服务。同时提供所有 OpenStack 服务的端点目录。 7. Image Service (Glance):存储和检索虚拟机磁盘镜像。OpenStack Compute 在实例配置时会...
- Keystone 是 OpenStack 的身份认证服务,提供了用户认证、鉴权等功能。 - 介绍了如何为 Quantum 设置 Keystone 的认证信息,包括如何注册 Quantum 服务。 - **OpenStack Compute** - Nova 是 OpenStack 的计算...
作为OpenStack的基础服务,Keystone提供了认证和授权功能。首先,创建数据库、服务端点和API版本,然后启动服务。 五、安装Nova Nova是OpenStack的核心服务,负责处理计算任务。安装Nova的控制节点和服务节点,配置...
执行这个脚本可以创建OpenStack的身份认证环境。 - `edit_nova_conf.sh`: Nova配置文件的修改,可能涉及网络配置、计算资源调度策略等。执行这个脚本会帮助调整Nova的配置以适应VMware环境。 - `swift_container_...
- Keystone是OpenStack的身份认证服务。 - 在控制器节点上安装Keystone,创建相应的数据库,并对其进行配置。 - 配置文件位于`/etc/keystone/keystone.conf`。 - 示例命令: ``` [root@controller1~]# ...
1. **用户认证**:通过OIDC协议,用户可以通过外部认证服务器进行身份验证,如Google或Facebook等。 2. **令牌验证**:插件接收并验证由IDP签发的访问令牌,确保用户的身份有效。 3. **角色映射**:可以将外部IDP的...
Keystone是OpenStack的身份服务,负责用户认证、授权和会话管理。安装keystone包括创建数据库、初始化服务、配置身份服务以及启动服务。 ### 第五章 glance Glance是OpenStack的镜像服务,用于存储和检索虚拟机镜像...
7. **Keystone**:身份和认证服务,管理用户、项目和服务之间的权限。它是OpenStack的安全基础。 8. **Heat**:编排服务,允许用户通过模板定义复杂的云应用部署,自动处理资源的生命周期管理。 9. **Ceilometer**...