Keystone(OpenStack Identity Service)是 OpenStack 框架中负责管理身份验证、服务规则和服务令牌功能的模块。用户访问资源需要验证用户的身份与权限,服务执行操作也需要进行权限检测,这些都需要通过 Keystone 来处理。Keystone类似一个服务总线, 或者说是整个Openstack框架的注册表, 其他服务通过keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互的调用, 需要经过Keystone的身份验证, 来获得目标服务的Endpoint来找到目标服务。
(1)用户管理:验证用户身份信息合法性
(2)服务目录管理:提供各个服务目录的(Service Catalog:包括service和endpoint)服务,无论任何服务或者客户访问openstack都要访问keystone获取服务列表,以及每个服务的endpoint
1.user:User即用户,指的是使用openstack service的用户,可以是人,服务,系统,就是说只要是访问openstack service 的对象都可以称为User
2.Credentials:是用于确认用户身份的凭证。说白了就是“信物”,可以是:
(1):用户名和密码
(2):用户名跟API Kye(秘钥) #(1)(2)用户第一次确认身份的方法
(3):一个keystone分配的身份的token #(3)用户已经确认身份后的方法 (token是有时间限制的)
3.Auhentication:
(1):用户身份验证的过程。keystone服务通过检查用户的Credentials来确定用户的身份
(2):第一次验证身份是使用用户名与密码或者用户名与API Key的形式。当用户的Credentials被验证后,keystone会给用户分配一个Authentication token 供该用户的后续请求操作(返回的token中就包含User的Role列表)
4.Token
(1):是一串数字字符串,当用户访问资源时需要使用的东西,在keystone中主要是引入令牌机制来保护用户对资源的访问,同时引入PKI、PKIZ、fernet、UUID其中一个随机加密产生一串数字,对令牌加以保护
5.Role:
(1):本身是一堆ACL集合,主要用于权限的划分。
(2):可以给User指定Role,是user获得role对应的操作权限。
(3):系统默认使用管理Role的角色 管理员用户:admin 普通用户:member(老版本) user(新版本)
(5):user验证的时候必须带有Project。老版本叫(Tenant)
6.Policy
(1):对于keystone service 来说,Policy就是一个JSON文件,rpm安装默认是在/etc/keyston/policy.json。通过配置这个文件,keystone实现了对User基于Role的权限管理(User <– Role(ACL) <–Policy)
(2):Policy就是用来控制User对Project(tenant)中资源的操作权限
7.Project(Tenant)
(1):Project(Tenant)是一个人或服务所拥有的资源集合。不同的Project之间资源是隔离的,资源可以设置配额
(2):Project(Tenant)中可以有多个User,每一个User会根据权限的划分来使用Project(Tenant)中的资源
(3):User在使用Project(Tenant)的资源前,必须要与这个Project关联,并且制定User在Project下的Role,一个assignment(关联) 即:Project-User-Role
8.Service
即服务,如Nova,Glace,等各个组件
9.Endpoint:
(1):用来通过访问和定位某个openstack service的地址,通常是一个URL
(2):不同的region有不同的Endpoint
(3):任何服务都访问openstack service中的资源时,都要访问keystone
(4):Endpoint分为三类:
1.admin url —>管理员用户使用 Port:35357
2.internal url —>openstack内部组件间互相通信 Port:5000 (组件之间通信基于Restful api)
3.public url —> 其他用户访问地址 Port:5000
10.Service与Endpoint关系
(1):在openstack中,每一个service中都有三种Endpoint:Admin、Public、Internal(创建完service后需要为其创建API Endpoint)
(2):Admin使用者为管理员,能够修改User Project(Tenant)
(3):public使用者为客户端,使用者在外网管理自己云服务器
(4):internal使用者为内部组件间相互调用
(5):三种Endpoint在网络上开放的权限也不同,Admin通常只能对内网开放,public通常可以对外网开放,internal只能对有安装openstack服务的机器开放
11.V3版本更新
1.Tenant更改为Project
2.添加了Domain(对系统资源进行限额)
3.添加了Group (组的概念为了更好的管理用户,例如linux下对组授权,其组下面的用户也有了相应的权限)
4.member更改为user
将上面各个部分结合起来。
比如说,某公司年会组织跟团去旅游(公司相当于一个group,公司的员工相当于User)。到了晚上要住店,首先要先到前台登记(前台就相当于Keystone),对前台(keystone)来说,你要住店要拿出你的证明(对keystone来说就是要证明你是你)。
怎么办?拿出身份证,这里的身份证就相当于Credentials(用户名和密码),前台(keystone)会进行验证你的身份信息(Authentication),验证成功后,前台(Keystone)会给你一个房卡(Token),并且有不同的房卡(比如:普通卡,会员卡,白金卡等),不同的卡有不同的权限(Role),并且拿到房卡后,前台(keystone)会给你一个导航图(Endpoint)让你找到你的房间。并且一个酒店不光会有住宿服务,可能还有别的服务(service),像餐饮,娱乐,按摩等等,比如说要去吃饭,不知道路线怎么走,看一下导航图(endpoint)就知道了,到餐饮部门(service)会有三个路线(Endpoint)可以走。为什么会有三个,领导层通道 –> 走后门(admin),内部员工通道 –>(internal),客人通道 –>(public)。知道如何去,也有了权限(Token/Role)到了餐饮部门,当你点餐的时候,会让你刷上你的会员卡(这个步骤就是service像keystone确认你有没有权限),验证成功后,你就可以点餐吃饭。
工作流程。
这样就很好理解了。
以上参考:http://www.cnblogs.com/charles1ee/p/6293387.html
安装和配置 Identity service(身份服务)keystone
本章节介绍在 Controller node(管理节点)安装和配置身份服务。
先决条件
在安装配置 OpenStack 身份服务前,你必须创建一个数据库和管理员令牌。
1. 创建数据库,并完成下列操作
A. 使用数据库命令行客户端,以 root 身份登录数据库服务器
# mysql -u root -p123
B. 创建 keystone 数据库
MariaDB [(none)]> CREATE DATABASE keystone;
C. 授予数据库用户 keystone 访问 keystone 数据库的权限。
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@’localhost’ IDENTIFIED BY ‘123’;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@’%’ IDENTIFIED BY ‘123’;
替换 123 为一个合适的密码。
安装并配置组件
1. 安装软件包
# yum install openstack-keystone httpd mod_wsgi –y
[database]
# …
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
注:替换 KEYSTONE_DBPASS 为合适的密码。
B. 在[token]小节,配置使用 Fernet 技术提供令牌。
[token]
# …
provider = fernet
3. 初始化身份服务数据库:
# su -s /bin/sh -c “keystone-manage db_sync” keystone
4. 初始化 Fernet key 仓库:
# keystone-manage fernet_setup –keystone-user keystone –keystone-group keystone
# keystone-manage credential_setup –keystone-user keystone –keystone-group keystone
5. 引导身份服务,创建管理员。
# keystone-manage bootstrap –bootstrap-password 123 \
–bootstrap-admin-url http://controller:35357/v3/ \
–bootstrap-internal-url http://controller:5000/v3/ \
–bootstrap-public-url http://controller:5000/v3/ \
–bootstrap-region-id RegionOne
替换 ADMIN_PASS 为合适的密码。
配置 Apache HTTP 服务
1. 编辑/etc/httpd/conf/httpd.conf 文件并配置 ServerName 配置项
为管理节点的主机名:
ServerName controller
2. 创建到文件/usr/share/keystone/wsgi-keystone.conf 的链接:
# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
完成安装
1. 启动 Apache HTTP 服务并设置开机自动启动:
# systemctl enable httpd.service
# systemctl start httpd.service
2. 配置管理账号
# 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
# export OS_AUTH_URL=http://controller:35357/v3
# export OS_IDENTITY_API_VERSION=3
配置 ADMIN_PASS 为 keystone-manage bootstrap 命令中使用的密码
创建域,项目,用户和角色
身份服务为每一个 OpenStack 服务提供认证服务。认证服务使用一个 domain(域),projects(项目(tenants(租户))),users(用户)和roles(角色)的组合。
1. 在 openstack 环境中创建一个包含其他服务唯一账号的 service 项目,创建 service 项目:
# openstack project create –domain default –description “Service Project” service
2. 日常(非管理员)任务一般使用一个非特权项目和用户。在本手册中,创建 demo 项目和用户:
A. 创建 demo 项目:
# openstack project create –domain default –description “Demo Project” demo
B. 创建 demo 用户:
# openstack user create –domain default –password-prompt demo
C. 创建 user 角色:
# openstack role create user
D. 添加 user 角色到 demo 项目和用户:
# openstack role add –project demo –user demo user
验证操作
在安装其他服务前,验证身份服务是否正常。
1. 由于安全的原因,关闭临时认证令牌机制。
编辑/etc/keystone/keystone-paste.ini 文件并移除[pipeline:public_api], [pipeline:admin_api], 和[pipeline:api_v3]小节的 admin_token_auth 项。
2. 删除临时环境变量 OS_AUTH_URL 和 OS_PASSWORD:
# unset OS_AUTH_URL OS_PASSWORD
3. 使用 admin 用户,请求认证令牌
# openstack –os-auth-url http://controller:35357/v3 –os-project-domain-name default –os-user-domain-name default –os-project-name admin –os-username admin token issue
4. 使用 demo 用户,请求认证令牌:
# openstack –os-auth-url http://controller:5000/v3 –os-project-domain-name default –os-user-domain-name default –os-project-name demo –os-username demo token issue
创建 OpenStack 客户端环境脚本
为 admin 和 demo 项目和用户创建客户端环境脚本。本手册后续部分将使用这些脚本加载用户凭据。
1. 编辑 admin-openrc 文件,并添加下列内容:
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
替换 ADMIN_PASS 为身份服务中 admin 用户的密码。
2. 编辑 demo-openrc 文件,并添加下列内容:
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
替换 DEMO_PASS 为身份服务中 demo 用户的密码。
使用脚本
1. 加载 admin-openrc 文件用来填充身份服务中 admin 项目和用户的
用户凭据到环境变量:
# . admin-openrc
# openstack token issue
中间可能会出现一些错误,比如说:
1.Missing value auth-url required for auth plugin password
2.The request you have made requires authentication. (HTTP 401) (Request-ID: req-fa28c870-79e5-48f3-aa72-a7b25057d157)