keystone简介
keystone为openstack安全认证服务组件,提供了用户信息管理和完成各个模块认证服务。
- 认证服务:登录认证,各个组件API的权限控制。
- 用户信息管理:user/tenant基本信息,tenant管理;
为了能够理解Openstack的认证服务,我们必须了解如下概念:
-
租户:用于组成或隔离资源的容器,租户会组成或隔离身份对象。一个租户会映射到一个客户,一个账户,一个组织或一个项目。
-
用户: 如果租户映射到单位,那么用户就是单位中的人,身份认证服务会验证那些生成调用的用户发过来的请求,用户登录且被赋予令牌以访问资源。
-
凭证:用户身份的确认数据,例如,用户名和密码,用户名和API密钥,或者是一个有身份服务提供的授权令牌。
-
认证: 确认用户身份的流程,OpenStack身份服务确认过来的请求,即验证由用户提供的凭证。
这些凭证通常是用户名和密码,或者是用户名和API密钥。当用户的凭证被验证通过,OpenStack身份服务给他一个认证令牌,令牌可以为用户提供随后的请求。 -
令牌:一个字母数字混合的文本字符串,用户访问OpenStack API和资源,令牌可以随时撤销,以及有一定的时间期限。在Keystone中Token有两种格式PKI 、UUID
-
服务:计算Nova、存储Swift、镜像管理Glance等都是Openstack中的服务,一个服务能提供一个或多个端点供用户访问
-
端点:一个当用户访问服务时用到的可访问的网络地址,通常是一个URL地址。如果用户为模板而使用扩展,一个端点可以被创建,它表示模板是为所有可用的跨region的可消费的服务。
-
角色:定义了一组用户权限的用户,可赋予其执行某些特定的操作。
在身份服务中,一个令牌所携带用户信息包含了角色列表。服务在被调用是会看用户是什么样的角色,这个角色赋予的权限能够操作什么资源。
下图展示Keystone认证流程 :
配置数据库
登陆控制节点,使用mysql客户端连接数据库,用户名root,密码123456
mysql -u root -p 123456
创建keystone数据库
create database keystone;
为keystone用户授予本地与远程登陆时的所有权限
grant all privileges on keystone.* to 'keystone'@'%' identified by '123456';
grant all privileges on keystone.* to 'keystone'@'localhost' identified by '123456';
安装依赖
安装相关依赖
yum install -y python-pip git python-setuptools gettext python-virtualenv python-lxml python-greenlet-devel python-ldap sqlite-devel openldap-devel python-devel libxslt-devel openssl-devel libffi-devel
安装开发包
yum group install "Development Tools"
升级到最新的pip
pip install --upgrade pip
安装keystoneclient等
- 安装keystoneclient
git clone git://git.openstack.org/openstack/python-keystoneclient
cd python-keystoneclient
pip install -r requirements.txt
pip install -r test-requirements.txt
python setup.py install && cd ..
- 安装keystonemiddleware
git clone git://git.openstack.org/openstack/keystonemiddleware
cd keystonemiddleware
pip install -r requirements.txt
pip install -r test-requirements.txt
python setup.py install && cd ..
- 安装python-glanceclient
git clone git://git.openstack.org/openstack/python-glanceclient
cd python-glanceclient
pip install -r requirements.txt
pip install -r test-requirements.txt
python setup.py install && cd ..
- 安装python-novaclient
git clone git://git.openstack.org/openstack/python-novaclient
cd python-novaclient
pip install -r requirements.txt
pip install -r test-requirements.txt
python setup.py install && cd ..
- 安装python-cinderclient
git clone git://git.openstack.org/openstack/python-cinderclient
cd python-cinderclient
pip install -r requirements.txt
pip install -r test-requirements.txt
python setup.py install && cd ..
- 安装python-neutronclient
git clone git://git.openstack.org/openstack/python-neutronclient
cd python-neutronclient
pip install -r requirements.txt
pip install -r test-requirements.txt
python setup.py install && cd ..
- 安装python-openstackclient
git clone git://git.openstack.org/openstack/python-openstackclient
cd python-openstackclient/
pip install -r requirements.txt
pip install -r test-requirements.txt
python setup.py install && cd ..
安装keystone
git clone git://git.openstack.org/openstack/keystone
cd keystone
pip install -r requirements.txt
pip install -r test-requirements.txt
python setup.py install
配置keystontone
- 新建/etc/keystone文件夹,
mkdir -p /etc/keystone
将在第4步时从github中克隆过来的keystone/etc文件夹的配置文件拷贝到/etc/keystone文件夹,然后在/etc/keystone中将keystone.conf.example复制一份为keystone.conf,相关命令如下
cd ./etc
cp * /etc/keystone
cd /etc/keystone
cp keystone.conf.sample keystone.conf
- 编辑 /etc/keystone/keystone.conf ,并完成下列操作:
首先,若/var/log/keystone文件夹不存在,则新建
mkdir -p /var/log/keystone
并且将其改为keystone用户 keystone用户组,若keystone用户不存在,则创建
useradd keystone
chown keystone:keystone -R /var/log/keystone
在 [DEFAULT] 段中,对管理员令牌进行配置,配置log_file
[DEFAULT]
...
admin_token = ADMIN_TOKEN
...
log_file = /var/log/keystone/keystone.log
为了安全起见,使用openssl rand -hex 10命令生产一个随机数代替ADMIN_TOKEN
在 [database] 段,配置数据库访问相关参数:
[database]
...
connection = mysql://keystone:KEYSTONE_DBPASS@控制器/keystone
将 KEYSTONE_DBPASS 替换为实际的数据库用户的密码。
在 [memcache] 部分,配置Memcache服务:
[memcache]
...
servers = localhost:11211
在 [token] 部分,设置 UUID 令牌的提供者和 Memcached 驱动:
[token]
...
provider = keystone.token.providers.uuid.Provider
driver = keystone.token.persistence.backends.memcache.Token
在 [revoke] 部分,配置 SQL 的撤回驱动:
[revoke]
...
driver = keystone.contrib.revoke.backends.sql.Revoke
(可选配置)可以在 [DEFAULT] 段中开启详细日志配置,为后期的故障排除提供帮助
[DEFAULT]
...
verbose = True
运行命令grep ‘^[a-z]’ /etc/keystone/keystone.conf的结果为
[root@localhost keystone]# grep '^[a-z]' /etc/keystone/keystone.conf
admin_token = ADMIN_TOKEN
verbose = true
log_file = /var/log/keystone.log
connection = mysql://keystone:123456@controller/keystone
servers = localhost:11211
driver = keystone.contrib.revoke.backends.sql.Revoke
provider = keystone.token.providers.uuid.Provider
driver = keystone.token.persistence.backends.memcache.Token
其中ADMIN_TOKEN为用户自己的值
- 新建keystone用户,然后初始化keystone数据库
初始化keystone数据库
su -s /bin/sh -c "keystone-manage db_sync" keystone
输入如下命令应该能查看数据库中的表项
mysql -h controller -ukeystone -p123456 -e 'use keystone;show tables'
查看的结果如下
+------------------------+
| Tables_in_keystone |
+------------------------+
| access_token |
| assignment |
| config_register |
| consumer |
| credential |
| domain |
| endpoint |
| endpoint_group |
| federation_protocol |
| group |
| id_mapping |
| identity_provider |
| idp_remote_ids |
| mapping |
| migrate_version |
| policy |
| policy_association |
| project |
| project_endpoint |
| project_endpoint_group |
| region |
| request_token |
| revocation_event |
| role |
| sensitive_config |
| service |
| service_provider |
| token |
| trust |
| trust_role |
| user |
| user_group_membership |
| whitelisted_config |
+------------------------+
安装配置 Apache HTTP 服务器
若没有http服务器,则安装
yum install -y httpd
若没有安装Python在apache服务器中的WSGI接口,则安装mod_wsgi.x86_64
yum -y install mod_wsgi
编辑/etc/httpd/conf/httpd.conf 文件,参考控制节点配置ServerName 选项:
ServerName controller
使用以下内容创建文件/etc/httpd/conf.d/wsgi-keystone.conf
Listen 5000
Listen 35357
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /var/www/cgi-bin/keystone/main
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
LogLevel info
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /var/www/cgi-bin/keystone/admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
LogLevel info
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
创建WSGI组件的目录结构;
mkdir -p /var/www/cgi-bin/keystone
从上游仓库拷贝WSGI组件到这个目录:
curl http://git.openstack.org/cgit/openstack/keystone/plain/httpd/keystone.py?h=stable/kilo \
| tee /var/www/cgi-bin/keystone/main /var/www/cgi-bin/keystone/admin
调整这个目录及其中文件的所有者和权限:
chown -R keystone:keystone /var/www/cgi-bin/keystone
chmod 755 /var/www/cgi-bin/keystone/*
完成安装,重启Apache HTTP服务器
systemctl enable httpd.service && systemctl start httpd.service
Was this helpful?
0 / 0