- 项目介绍Keystone是Openstack框架中负责身份认证、服务管理、服务规则和服务令牌的功能,它实现了Openstack的Identity API。Keystone是整个openstack框架的注册表,其他服务通过keystone来注册其服务的endpoint,任何服务之间相互的调用,都需要经过keystone的身份验证来获得目标服务的endpoint来找到目标服务。Keystone主要包含两个主要部件:验证、权限和服务目录。
- 基本概念User用户,表示拥有用户名,密码,邮箱等帐号信息的个人Tenant租户,它是各个服务中的一些可以访问的资源集合。可以理解为一个项目,默认user是绑定在Tenant上的。Role 角色,代表用户可以访问的资源权限。Users可以被添加到任意一个全局的 或 租户内的角色中。在全局的role中,用户的role权限作用于所有的租户,即可以对所有的租户执行role规定的权限;在租户内的role中,用户仅能在当前租户内执行role规定的权限。Service服务,一个openstack的服务,例如nova,swift等。通常用不同的名称来表示不同的服务。 Endpoint端点,一个可以通过网络访问的地址,即服务访问的URL。具有public,private,admin三种权限。Token 令牌,是一把特殊的钥匙。用户通过用户名和密码获取某个租户的令牌,可以实现单点登录。Template 模版,一个端点集合,代表一组可用的openstack服务端点。
- 认证服务的流程
- 用户名通过自己的用户名和密码向keystone申请令牌token,keystone认证其用户名和密码后,若正确则返回一个token1。
- 用户携带token1向keystone申请查询其所拥有的租户,keystone认证token1后,返回其拥有的所有租户的tenant信息。
- 用户选择一个租户,通过用户名和密码向keystone申请令牌token,keystone认证用户名,密码和租户后,返回token2。(前两步是为了查询用户所拥有的租户信息的,如果已经知道租户信息,则省略前两步)。
- 用户携带token2向keystone发送提供服务的请求,keystone认证token2后(包括此token是否有效,是否有创建服务的权限等等),把请求下发到相应的服务,服务按照需求执行相应的操作并把执行结果返回给用户。 从上面的流程得知,用户是从keystone获取令牌和服务列表。并在访问某个服务的时候提供自己的token,然后此服务向keystone求证所携带token的合法性。
- 配置认证服务所需要的数据库首先在数据库中创建名为keystone的数据库:
然后授权keystone用户对keystone库拥有完全权限:
- 安装keystone软件包
启动memcached服务
修改keystone的配置文件/etc/keystone/keystone.conf
a.在[DEFAULT]中,设置admin的token
注:随机码用openssl rand –hex 10 生成
b.在[database]中,设置数据库授权
c.在[memcache]中,设置memcache-server
d.在[token]中,配置UUID token和memcache driver
e.在[revoke]中,配置SQL的撤销
填充认证服务数据库
- 配置HTTP服务修改http配置文件/etc/httpd/conf/httpd.conf,设置服务主机名
创建/etc/httpd/conf.d/wsgi-keystone.conf文件,并写入以下的行:
创建WSGI结构目录
切换到上面的目录下,然后下载main和admin的文件,其实两个文件是一样的。
设置该目录的权限和属组
启动http服务和开机自启
- 创建服务实体和API endpoint首先创建认证token和endpoint:
为认证服务创建服务实体:
Openstack为每个服务创建了三个API endpoint:admin,internal,public。Admin的endpoint默认是可以修改用户和租户的,而其余的是不可以的。这样分开也是为了安全考虑。另外,openstack为了扩展性还支持多区域,默认使用RegionOne区域。
创建认证服务的API endpoint:
注:每个openstack的服务都必须在认证服务中有一个服务的实体和API endpoint
- 创建租户、用户、角色创建admin租户
创建admin用户
创建admin的角色
添加admin的角色到admin的租户和用户中
创建一个service的租户,用来存放openstack的各种服务:
创建一个普通租户demo:
创建demo的用户
创建角色user
添加角色user到demo租户和用户中:
- 认证服务的搭建
- 认证服务的验证
为了安全考虑,禁用临时认证token,修改/usr/share/keystone/keystone-dist-paste.ini
删除[pipeline:public_api],[pipeline:admin_api],[pipeline:api_v3]区域中的admin_token_auth
取消OS_TOKEN和OS_URL的定义 OS_TOKEN OS_URL
作为admin用户,请求一个认证token
为了支持版本3的API,要求至少包含default域或者使用ID:
作为admin请求租户列表;
作为admin请求用户列表:
作为admin请求角色列表:
作为demo用户向API v3请求token:
作为demo用户不能操作admin用户的命令。
创建环境脚本admin-openrc.sh和demo-openrc.sh
admin-openrc.sh
Demo-openrc.sh
验证环境脚本;
到此keystone服务搭建完毕。